我可以在Go中为字节使用nil值吗?

时间:2019-01-01 06:54:48

标签: 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,
        false,
        map[byte]*TreeNode{},
    }
}

尽管编译时,出现以下错误:./main.go:180:9: cannot use nil as type byte in field value

所以看来我不能使用nil作为字节变量。在这种情况下我还能使用其他东西吗?我可以轻松使用'0'或其他非字母字符。但是似乎很hack。我该怎么办?

3 个答案:

答案 0 :(得分:7)

bytenumeric 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

     

The zero value

     

当通过声明为变量分配存储空间时   或调用new或创建新值时(通过   复合文字或make的调用,并且没有显式初始化   如果提供,则变量或值被赋予默认值。每个元素   这样的变量或值的类型为其类型设置为零值:   对于布尔值,为false;对于数字类型,为0;对于字符串,为“”;对于布尔值,为nil   指针,函数,接口,切片,通道和映射。

答案 2 :(得分:0)

golang中的每种类型的值均为零。如果是byte,则为空字节。

完全有可能在根目录使用空字节作为神奇的零负载。