Go 中的字节是否可以使用 nil 值?

我正在 Go 中实现一棵树。我的 TreeNode 结构如下所示:


type TreeNode struct {

    payload byte

    parent *TreeNode

    children map[byte]*TreeNode

}

在我的实现中,树的根节点是一个没有负载的特殊节点。否则有效负载始终是英文字母表中的单个小写字母。所以我的树初始化函数如下所示:


func createEmptyTree(fileName string) *TreeNode{

    return &TreeNode{

        nil,           // Line #180

        nil,

        false,

        map[byte]*TreeNode{},

    }

}

但是,当我编译它时,出现以下错误:./main.go:180:9: cannot use nil as type byte in field value


所以看来我不能用于nil字节变量。在这种情况下我还有什么可以使用的吗?我可以轻松使用'0'或其他非字母字符。但这似乎很老套。我应该怎么办?


函数式编程
浏览 131回答 3
3回答

肥皂起泡泡

byte是数值类型,实际上是.的别名uint8。这意味着它的默认零值为0。

幕布斯6054654

对于惯用的 Go,将您的函数编写为:package mainimport (    "fmt")type TreeNode struct {    payload  byte    parent   *TreeNode    children map[byte]*TreeNode}func createEmptyTree(fileName string) *TreeNode {    return &TreeNode{        children: map[byte]*TreeNode{},    }}func main() {    tree := createEmptyTree("fiename")    fmt.Println(tree)}游乐场:https://play.golang.org/p/v6DJCnpN6Ys输出:&{0 <nil> map[]}payload空树的值为整数零 ( ) 0,整数类型 的零值byte。零不是英文字母表中的单个小写字母值。Go 编程语言规范零值当通过声明或调用 new 为变量分配存储空间时,或者通过复合文字或调用 make 创建新值时,并且没有提供显式初始化,则给出变量或值一个默认值。此类变量或值的每个元素都设置为其类型的零值:布尔值为 false,数字类型为 0,字符串为 "",指针、函数、接口、切片、通道和映射为 nil。

守着一只汪

golang 中的每种类型都有一个零值。在这种情况下byte是空字节。完全有可能只使用空字节作为根部的神奇零有效负载。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go