GO 语言结构体里定义 map 字段,使用时如何自动初始化?
例如我有这样一个结构体
type Trie struct {
isEnd bool
children map[rune]*Trie
}
当我初始化一个 Trie 变量,当他的某个 child
为空时为它赋值时会报错 panic: assignment to entry in nil map
:
root := Trie{}
if root.children['a'] == nil {
root.children['a'] = &Trie{}
}
对于这种情况,难道我每次赋值前都要先检查 map 是否被初始化了吗?如下:
root := Trie{}
if len(root.children) == 0 {
root.children = map[rune]*Trie{}
}
if root.children['a'] == nil {
root.children['a'] = &Trie{}
}
有没有更优雅的语法或做法,让为结构体的 map 赋值时自动初始化?
回复
1个回答
test
2024-07-08
go 的一般做法是定义一个 NewTrie:
func NewTrie() *Trie {
return &Trie{
true,
map[rune]*Trie{}
}
}
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容