将nil []字节变量转换为字符串不会出现混乱。为什么不?

时间:2017-06-09 10:16:06

标签: go

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

2 个答案:

答案 0 :(得分:1)

因为切片的零值(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

答案 1 :(得分:1)

通常,对于任何可以nil的类型,您都可以生成任何您喜欢的字符串表示形式!这是因为在实现fmt.Stringer接口(请参阅here) - 或类型上可能为nil的任何函数时 - 您可以为接收器值设置nil。换句话说,与OOP语言相比,您可以在nil个对象上调用方法。在this示例代码中,您会看到ʕ◔ϖ◔ʔ hey nilo!表示第二种类型的nil值,但BOO DATA!!! :: Hi! :)表示内部有一个元素(它只打印第一个元素)作为示例代码)。

再次牢记nil is typed