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在獲取的時候是不肯定的,須要用一個變量去接一下

相關文章
相關標籤/搜索