我正在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'
或其他非字母字符。但是似乎很hack。我该怎么办?
答案 0 :(得分:7)
byte
是numeric type,实际上是uint8
的别名。
这意味着它的默认zero value为0。
答案 1 :(得分:2)
对于惯用的Go,将您的函数编写为:
import { DOCUMENT } from '@angular/common';
...
export class AppComponent implements OnInit {
constructor(@Inject(DOCUMENT) private document: Document) {}
ngOnInit() {
this.document.documentElement.lang = 'es';
}
...
}
游乐场:https://play.golang.org/p/v6DJCnpN6Ys
输出:
let person = {name: "Annah", age: 18};
let pointer = person;
pointer = undefined;
空树的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[]}
),整数类型payload
的零值。零不是英语字母中的单个小写字母值。
The Go Programming Language Specification
当通过声明为变量分配存储空间时 或调用new或创建新值时(通过 复合文字或make的调用,并且没有显式初始化 如果提供,则变量或值被赋予默认值。每个元素 这样的变量或值的类型为其类型设置为零值: 对于布尔值,为false;对于数字类型,为0;对于字符串,为“”;对于布尔值,为nil 指针,函数,接口,切片,通道和映射。
答案 2 :(得分:0)
golang中的每种类型的值均为零。如果是byte
,则为空字节。
完全有可能在根目录使用空字节作为神奇的零负载。