为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
函数式编程 2023-05-22 17:39:45
我正在 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 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

byte是数值类型,实际上是.的别名uint8

这意味着它的默认零值为0。


查看完整回答
反对 回复 2023-05-22
?
幕布斯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。


查看完整回答
反对 回复 2023-05-22
?
守着一只汪

TA贡献1872条经验 获得超3个赞

golang 中的每种类型都有一个零值。在这种情况下byte是空字节。

完全有可能只使用空字节作为根部的神奇零有效负载。


查看完整回答
反对 回复 2023-05-22
  • 3 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信