Golang小技巧与原理
前言:每个部分写的不太清楚,只是指出了思路,可以直接根据思路百度,应该都有相应教程。
-
1:&是地址 是值 当&为参数传入方法时会影响之前的值,否则不会影响(包括)
3:切面和map都是线程不安全的,建议不要开携程,否则就需要加锁。
4:for k := rang item //第一个默认值就是k而不是v
5: i:=make([]int,10); i = append(i,1) //最后的值为[0,0,0,0,0,0,0,0,0,0,1]
6:…在前是不限制参数,在后是打散数组,打散后的参数方法类型要一致
7: websoket 是线程不安全的,当一个连接需要发多条信息建议用锁,变为线程安全,如果要达到高效可以几条消息并成一条或者使用负载均衡。
8:string类型只能通过x[0]取值而不能复制,除非转换成[]byte(x)[0] = 1 输出string(x)
9:string x[0]取出来的索引是[]byte类型,必须要string(x[0])才是想要的索引值
10:len(中❤) 会返回6,因为返回的是byte的数量,只能用utf8.RuneCountInString(中❤)返回2
11:结构体里,序列化后,反序列化在输出,可以全部输出,但如果用string()来输出,则小写的字段名会直接忽略
:12: http连接等,关闭连接写在连接不出错的情况下,别连接时已经失败,还会关闭连接
:13:== 结构相比名称一样字段一样同一个结构再能相比(如果值不同则是false),否则就会报错
:14:reflect.DeepEqual() 可用于做一些==判断不了的事情
:15: 数组不能直接用raw[:3]取值,否则他的内存不会减少,可用cap()测,而且在同一大小内append()时会互相影响
所以只能用copy(res,raw[:3])来赋值,则什么问题都不会出现 ,这种情况局限于[0:1] 截取尾巴的值
:16: type myMutex sync.Mutex myMutex只有属性, 是没有之前锁类型的方法 例如没有Lock() 和
Unlock()
:17: defer的函数的参数会在defer声明时求值,就算之前和之前改变了参数也没用,已经先把值算好了
:18: 通过结构点出方法item.print(), 但是当结构存在map里就不能点方法了,只能获取相应的属性
:19: 因为map是获取不到址的,所以存结构的时候,不能再点击结构一个一个复制,必须要一个value全体复制,当然使用指针例外。也就是map[string]*data
20:new()引用为空值得类型,每个类型空值都不同。