1.关键字
nil 相当于null
println 换行打印
printf 格式化打印
type 声明一种类型
2. 变量声明
- 第一种,指定变量类型,声明后若不赋值,使用默认值0
var a int (变量类型在变量名之后)
- 第二种,根据值自行判定变量类型。
var v_name = value
- 第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。(只能定义局部变量,不能定义全局变量)
v_name := value // 例如 var a int = 10 var b = 10 c : = 10
- 多变量命名
var x, y int
6.常量
const a int = 100 //const定义枚举类型
const(
//关键字iota,初始值为0,每行iota加1
A = iota
B
C
D )
iota按行变化,每行加1 iota只能出现在const中
3.函数声明
- 第一种(匿名)
func foo2**(a string, b int)** *(int, int)*{
return 666,777
}
粗体是参数,斜体是返回值类型
- 第二种,给返回值命名
func foo3(a string, b int) (r1 int,r2 int){
r1 = 1000
r2 = 2000
return
}
- 第三种,返回同一种类型可以合并
func foo3(a string, b int) (r1 ,r2 int){
r1 = 1000
r2 = 2000
return
}
R1和r2是局部变量,在foo3{}内,初始值都为0
4.导包
在包名前面加上别名
“-”表示匿名导包
匿名导包可以导入包但是不能使用包里的函数
“.”别名可以直接使用包里的函数(不建议使用,当都使用这个方法是,会造成混淆)
不用写lib.
4.go指针
支持二级指针和三级
6.defer函数
函数最后执行 多个defer的执行顺序:栈结构存储
defer和return执行顺序
return先执行
5.数组和动态数组的区别
定义数组
var myArray1 [10]int //全为0
myArray2 :=[10]int{1,2,3,4} //前四个数为1,2,3,4
for循环
动态数组
myArray := [ ]int{1,2,3,4} //切片slice
7.slice四种声明方式
1.声明slice1是一个切片,并且初始化,默认值是1,2,长度len是3
slicel := [ ]lint{1,2,3}
2.声明slice1是一个切片,但是并没有给slice分配空间
var slice1 lint
slice1 = make([]int,3) //开辟3个空间 ,默认值是0
3.声明slice1是一个切片,同时给slice分配空间,3个空间,初始化值是0
var slice1 []lint = make([]lint,3)
4.声明slice1是 一个切片,同时给sLice分配空间,3个空间,初始化值是0,通过:=推导出slice是一个切片
slice1 := make([]int,3)