谷歌下载https://golang.org/dl/
国内一些镜像下载
package main //表示当前程序所在的包
import "fmt"
// 主函数
func main() { // 左花括号必须和函数名同一行
// 可加分号也可以不加 推荐不加
fmt.Println("Hello World")
}
fmt是go的标准化I/O
- print,println区别是回车 当然前者也可以使用\n
- printf 格式化字符串 可以将后面参数的值赋给第一个参数
序号 | 类型和描述 |
---|---|
1 | 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 |
2 | 数字类型 整型 int 和浮点型 float,Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。 |
3 | 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。 |
4 | 派生类型: 包括:(a) 指针类型(Pointer)(b) 数组类型© 结构化类型(struct)(d) 联合体类型 (union)(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型(i) Channel 类型 |
在方法外使用
上述1,2,3可以用 4不行
也可以使用多行声明
直接声明
多行声明
var(
a1 int = 200
a2 bool = true
)
关键字: const , iota(iota只能在const中使用)
// const定义常量 一般用于枚举
// 1. 定义常量 即不可改变
const aaa = 1
// 2. 定义枚举
const (
A1= 1
A2 = 2
A3 =3
)
// 3. 使用iota关键字实现自动增加
const (
B1 = iota // iota从0开始 iota = 0
B2 // iota = 1
B3 // iota = 2
B4 = 10*iota
B5
B6
B7 = iota+1
B8
)
package main
import "fmt"
// 声明全局变量 方法1.2.3都可以 4不行
var hhh = 1000
// const定义常量 一般用于枚举
// 1. 定义常量 即不可改变
const aaa = 1
// 2. 定义枚举
const (
A1= 1
A2 = 2
A3 =3
)
// 3. 使用iota关键字实现自动增加
const (
B1 = iota // iota从0开始 iota = 0
B2 // iota = 1
B3 // iota = 2
B4 = 10*iota
B5
B6
B7 = iota+1
B8
)
// := 只能声明局部变量
func main() {
// 1. var声明 a变量名 int数据类型 不初始化默认是0
var a int
fmt.Println(a)
fmt.Printf("类型是 %T\n",a)
// 2. 声明一个变量直接初始化
var b int= 10
fmt.Println(b)
fmt.Printf("类型是 %T\n",b)
// 3. 省去类型
var c = 20
fmt.Println(c)
fmt.Printf("类型是 %T\n",c)
// 4. 省去var 常用
// %v自动匹配类型 其实也有f float s string .....
e := 30
fmt.Printf("e = %v , type = %T\n",e,e)
f := 3.14
fmt.Printf("f = %v , type = %T\n",f,f)
g := "3.14"
fmt.Printf("g = %v , type = %T\n",g,g)
// 声明多个变量
var aa, bb int = 100, 200
fmt.Printf("aa = %v , type = %T\n",aa, aa)
fmt.Printf("bb = %v , type = %T\n",bb, bb)
var cc ,dd = 111, "ddd"
fmt.Printf("cc = %v , type = %T\n",cc, cc)
fmt.Printf("dd = %v , type = %T\n",dd, dd)
// 多行变量声明
var(
a1 int = 200
a2 bool = true
)
fmt.Printf("a1 = %v , type = %T\n",a1, a1)
fmt.Printf("a2 = %v , type = %T\n",a2, a2)
}
func 函数名(参数名 参数类型, …) 返回值{
…
}
package main
import "fmt"
// 单返回值
func test1(a string, b int) string {
fmt.Println("a = ", a)
fmt.Println("b = ", b)
c := "返回值"
return c
}
// 多返回值 匿名
func test2(a string, b int) (int,int) {
fmt.Println("a = ", a)
fmt.Println("b = ", b)
return 11, 22
}
// 多返回值 有名称
func test3(a string, b int) (a1 int,a2 int) { // 也可以a1, a2 int
fmt.Println("a = ", a)
fmt.Println("b = ", b)
a1 = 11
a2 =22
return 11, 22
}
func main() {
c := test1("aaa", 2)
fmt.Println("c = ",c)
d, e := test2("aaa", 2)
fmt.Println("d = ",d, "e = ",e)
f, g := test2("aaa", 2)
fmt.Println("f = ",f, "g = ",g)
}
字符串 包路径
此时这个字符串就是这个包的别名,方法调用可以使用别名.方法名. 包路径
此时会将包导入到当前包中,使用起来就像自己包一样,方法可以直接调用