我正在 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'或其他非字母字符。但这似乎很老套。我应该怎么办?
3 回答
幕布斯6054654
TA贡献1876条经验 获得超7个赞
对于惯用的 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)
}
游乐场:https://play.golang.org/p/v6DJCnpN6Ys
输出:
&{0 <nil> map[]}
payload
空树的值为整数零 ( ) 0
,整数类型 的零值byte
。零不是英文字母表中的单个小写字母值。
Go 编程语言规范
零值
当通过声明或调用 new 为变量分配存储空间时,或者通过复合文字或调用 make 创建新值时,并且没有提供显式初始化,则给出变量或值一个默认值。此类变量或值的每个元素都设置为其类型的零值:布尔值为 false,数字类型为 0,字符串为 "",指针、函数、接口、切片、通道和映射为 nil。
- 3 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消