1. string和buffer
當需要對一個字符串進行頻繁的操作時章喉,謹記在go語言中字符串是不可變的(類似java和c#)。使用諸如a += b形式連接字符串效率低下身坐,尤其在一個循環(huán)內(nèi)部使用這種形式秸脱。這會導致大量的內(nèi)存開銷和拷貝。應(yīng)該使用一個字符數(shù)組代替字符串部蛇,將字符串內(nèi)容寫入一個緩存中摊唇。 例如以下的代碼示例:
var b bytes.Buffer
...
for condition {
b.WriteString(str) // 將字符串str寫入緩存buffer
}
return b.String()
注意:由于編譯優(yōu)化和依賴于使用緩存操作的字符串大小,當循環(huán)次數(shù)大于15時涯鲁,效率才會更佳巷查。
2.何時使用new()和make()
- 切片、映射和通道抹腿,使用make
- 數(shù)組岛请、結(jié)構(gòu)體和所有的值類型,使用new
3.多重循環(huán)退出
found := false
Found: for row := range arr2Dim {
for column := range arr2Dim[row] {
if arr2Dim[row][column] == V{
found = true
break Found
}
}
}
4.簡單的超時模板
timeout := make(chan bool, 1)
go func() {
time.Sleep(1e9) // one second
timeout <- true
}()
select {
case <-ch:
// a read from ch has occurred
case <-timeout:
// the read from ch has timed out
}