Golang常见小细节总结(1)

本系列不按期更新,用于记录日常开发过程当中出现的一些小问题数组

 

Array 类型的值做为函数参数




能够理解slice是对array的一个视图,底层仍是array因此会被修改闭包

 

 

经过map的ok来肯定是否存在key

if _, ok := maps["xxx"]; !ok {
....
}函数

 

 

修改一个string中的字符

注意使用rune数组来保证汉字的字节问题
func main() {
str := "test"
strArr := []rune(str)
strArr[0] = '我'
fmt.Println(string(strArr))
}对象

 

 

使用sync.WaitGroup注意


在外部调用的Add是操做外部的sync.WaitGroup,可是test方法内部的Done操做的是内部的sync.WaitGroup,二者的sync.WaitGroup是不一样的。在这里须要改成引用传递,而不要传值拷贝。
blog

 

 

channel会发生panic的状况

close已经关闭的channel
向已经关闭的channel发送消息
在一开始使用channel的时候很容易忽视这个问题,并且这个问题隐藏的很好,因此使用channel必定要注意,由于出现panic会致使程序直接崩溃开发

 

 

for中使用闭包

这个问题也很容易犯,可是由于遇到的人多,因此在这里仍是提一下
string

应该写为

若是你不懂问题在哪,你赶忙敲代码试试看it

 

 

不要直接调用map获取到对象的方法

type User struct {
name string
}test

func (user *User) print() {
fmt.Println("name: ", user.name)
}变量

func main() {
user := &User{
name: "小明",
}
m := make(map[string]User)
m["xiaoming"] = *user
m["xiaoming"].print()
}

这个会出现异常,由于map在获取的时候是不肯定的,须要用一个变量去接一下

相关文章
相关标签/搜索