package main
import ("fmt")
func main() {
var bts []byte =nil
fmt.Println("the result :", string(bts)) // why not panic ?
// the result :
}
https://play.golang.org/p/dzRzzKvUyd將nil []字節變量轉換爲字符串不會恐慌。爲什麼不?
package main
import ("fmt")
func main() {
var bts []byte =nil
fmt.Println("the result :", string(bts)) // why not panic ?
// the result :
}
https://play.golang.org/p/dzRzzKvUyd將nil []字節變量轉換爲字符串不會恐慌。爲什麼不?
由於切片(nil
)的零值的作用就像一個零長度的片。例如。你也可以聲明切片變量,然後追加到它在一個循環:
// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
var p []int // == nil
for _, v := range s {
if fn(v) {
p = append(p, v)
}
}
return p
}
更多細節可以在這裏找到:https://blog.golang.org/go-slices-usage-and-internals
你甚至可以對一個無切片進行切片,這真的很奇怪:'fmt.Printf(「wat:%v \ n」,([] byte(nil))[0:0])'不會恐慌。 – Adrian
語言規範的哪一部分表明這應該是恐慌? – Volker
相關:[無片vs非零片vs Go語言中的空片](https://stackoverflow.com/questions/44305170/nil-slices-vs-non-nil-slices-vs-empty-slices-in -go語言/ 44305910#44305910)。 – icza