如何优雅地初始化 Go 结构体中的 map 字段?
如何优雅初始化 go 结构体中的 map 字段
在定义 go 结构体时,如果字段类型为 map,在使用时如果不进行初始化就会报错。传统的方法是在每次赋值前检查并初始化 map,但这较为繁琐。
本文介绍了一种更优雅的语法和做法,即在定义结构体时使用 new 函数。
使用 new 函数初始化 map 字段
在定义结构体时,可以通过 new 函数来创建并初始化结构体。例如,对于一个 trie 结构体,我们可以定义一个 newtrie 函数:
func newtrie() *trie { return &trie{ true, map[rune]*trie{}, } }
在 newtrie 函数中,我们创建一个 trie 结构体指针,并初始化其 isend 字段为 true,children 字段为一个空 map。
使用 new 函数初始化结构体
有了 newtrie 函数后,我们就可以使用它来初始化 trie 结构体:
root := NewTrie() if root.children['a'] == nil { root.children['a'] = NewTrie() }
使用 newtrie() 初始化 root 变量后,root.children 被自动初始化为一个空 map,因此可以像上面那样直接赋值。
总结
通过使用 new 函数,我们可以优雅地初始化结构体中的 map 字段,无需在每次赋值前进行复杂的检查和初始化。这种方法让代码更加简洁和清晰。