是否有一个nil值可用于Go中的字节?

是否有一个nil值可用于Go中的字节?,go,Go,我正在执行一个Go中的树。我的TreeNode结构如下所示: type TreeNode struct { payload byte parent *TreeNode children map[byte]*TreeNode } func createEmptyTree(fileName string) *TreeNode{ return &TreeNode{ nil, // Line #180 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{},
    }
}
在我的实现中,树的根节点是一个没有有效负载的特殊节点。否则,有效负载总是来自英语字母表的单个小写字母。因此,我的树初始化函数如下所示:

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:不能在字段值中使用nil作为类型字节


看来我不能用nil来表示字节变量。在这种情况下,我还有什么可以用的吗?我可以很容易地使用“0”或其他非字母字符。但它似乎很粗糙。我该怎么办?

golang中的每种类型都有一个零值。对于字节,它是空字节


完全可以在根目录中将空字节用作神奇的零负载。

golang中的每种类型都有一个零值。对于字节,它是空字节

完全可以在根目录中将空字节用作神奇的零负载。

字节是一个,实际上是uint8的别名

这意味着它的默认值为0

字节是一个,实际上是uint8的别名


这意味着它的默认值为0

对于惯用的Go,将函数编写为:

package main

import (
    "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)
}
游乐场:

输出:

&{0 <nil> map[]}
空树的有效负载值为整数0,即整数类型字节的零值。零不是英语字母表中的单个小写字母值

当通过声明为变量分配存储时 或者调用new,或者当通过 复合文字或make调用,不需要显式初始化 如果提供,则为变量或值提供默认值。每个元素 此类变量或值的类型设置为零值: 布尔值为false,数字类型为0,字符串为0,字符串为nil 指针、函数、接口、切片、通道和映射


对于惯用的Go,将函数编写为:

package main

import (
    "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)
}
游乐场:

输出:

&{0 <nil> map[]}
空树的有效负载值为整数0,即整数类型字节的零值。零不是英语字母表中的单个小写字母值

当通过声明为变量分配存储时 或者调用new,或者当通过 复合文字或make调用,不需要显式初始化 如果提供,则为变量或值提供默认值。每个元素 此类变量或值的类型设置为零值: 布尔值为false,数字类型为0,字符串为0,字符串为nil 指针、函数、接口、切片、通道和映射


将零值与字节片混淆。切片的零值为零。对于一个字节(uint8的别名),它是0。零值与字节片混淆。切片的零值为零。对于一个字节(uint8的别名),它的值为0。