判斷slice是否為空,不能與nil進行比較做判斷,因為slice有可能已初始化。而是應該使用len計算長度。
例如
package main
import (
"fmt"
)func main()
fmt.println("slice1 == nil:", slice1 == nil)
fmt.println("slice1 len:", len(slice1))
fmt.println("slice2 == nil:", slice2 == nil)
fmt.println("slice2 len:", len(slice2))
}
output:
slice1 == nil: trueslice不是併發安全的。slice1 len: 0
slice2 == nil: false
slice2 len: 0
package main
import (
"fmt"
"time"
)var slice1 int
}func main()
time.sleep(time.second)
for i, v := range slice1
}
output:
…從輸出可以看到,slice不是併發安全的,資料有丟失。7516 9996
7517 9995
7518 9997
7519 9998
7520 9999
如何達到併發安全?
加鎖是一種方式。
看下面的例子,通過加鎖,達到互斥效果,實現併發安全。
package main
import (
"fmt"
"sync"
"time"
)var slice1 int
var lock sync.mutex
lock.lock()
defer lock.unlock()
}func main()
time.sleep(time.second)
for i, v := range slice1
}
output:
9991 9627從輸出可以看到,資料沒有丟失,可以正常列印。9992 9991
9993 9995
9994 9993
9995 9992
9996 9998
9997 9278
9998 9948
9999 9999
環形佇列如何判空和判滿
環形佇列的判空和判滿是乙個比較基礎的問題,可以通過以下兩種方法來實現,定義環形佇列抽象類 define max size 1024 class circularqueue circularqueue circularqueue int size this data new int size this...
Velocity判空的方法
前端使用velocity,經常會遇到判斷是否為null的情景,通常判斷是否為null有下面幾種方法 1.if foo 判斷 foo為空,判斷非空為 if foo 2.使用 ifnull 或 ifnotnull ifnull foo 要使用這個特性必須在velocity.properties檔案中加入...
SQL的字段判空
請看下面的 products 表 p id productname unitprice unitsinstock unitsonorder 1computer 69925152 printer 36536 3telephone 28015957 假如 unitsonorder 是可選的,而且可以包含...