go类型用别名之后就属于新的类型。
go指针不能+1取下一个地址。
go没有前置++,--(++a是错的)
用==比较数组(注意数组可以比较,切片不能比较)
相同维数且含有相同个数元素的数组才可以进行比较
每个元素都相同的才相等
&^ 按位清零
1 &^ 0 -- 1
1 &^ 1 -- 0
go-for
执行无限循环
for {}
go 在switch里面不需要添加break,语句自己带有break
switch支持case里面填写多条件
例如:
switch {
case 0<=NUM &&NUM <=3
fmt.print(1)
case 5,6:
-----------------------
数组和切片(切片是共享存储结构的)
var a [3]int //声明并初始化为默认零值
}
循环常用为:
for i:=0;i<len(arr);i++ {}
推荐使用for idx,e := range arr{}
数组截取方法(不支持负数获取)
例如:
a :=[...]int{1,2,3,4,5}
a[1:2]//2
a[1:3]//2,3
a[1:len(a)]//2,3,4,5
a[1:]//2,3,4,5
a[:3]//1,2,3
数组和切片的区别是,数组是有长度的,切片是没有长度的
切片使用append填充数据
make(arr len,cap) //创建切片
如果一个切片用append进去的时候,那么数组增加会在cap中调取
例如:
make(a,3,5)
fmt.print(a)//0,0,0
a=append(a,666)
fmt.print(a)//0,0,0,666
当一个参数放到切片中的时候,如果空间不够就会*2的整长
例如:
s:=[]int{}
for i:=0;i<10;i++ {
s=append(s,i)
t.log(len(s),cap(s))//len对一个一个递增,但是cap会在不够的情况下翻倍递增
}
//cap比较特殊
----------
map类型
m3 := make(map[int]int,10)//这个时候打印出来的长度为0,当make用与map的时候,第二个参数实际上为map
在访问Key不存在时,既然会返回零值,不能通过返回nil来判断元素是否存在
-----------
函数
与其他主要编程语言的差异
1. 可以有多个返回值
2. 所有参数都是值传递:slice,map,channel会有传引用的错觉
3. 函数可以作为变量的值
4. 函数可以作为参数和返回值
--------
struct为指正或者为值的时候,访问方式都是用struct.id类似来访问
--------
共享内存并发机制
sync.Mutex
推荐使用sync.WaitGroup