2 回答
TA贡献1842条经验 获得超21个赞
没有理由在文章提供的代码中检查 nil。还有其他方法可以构建代码。
选项1:
var templates = map[string]*template.Template{}
func init() {
// code following the if statement from the function in the article
}
选项 2:
var templates = initTemplates()
func initTemplates() map[string]*template.Template{} {
templates := map[string]*template.Template{}
// code following the if statement from the function in the article
return templates
}
选项 3:
func init() {
templates = make(map[string]*template.Template)
// code following the if statement from the function in the article
}
您将在 Go 代码中看到所有这些方法。我更喜欢第二个选项,因为它清楚地表明templates是在函数中初始化的initTemplates。其他选项需要环顾四周以找出templates初始化的位置。
TA贡献1834条经验 获得超8个赞
变量也可以使用init 在包块中声明的函数进行初始化,没有参数和结果参数。
func init() { … }
即使在单个源文件中,也可以定义多个这样的函数。
现在或将来可能会有多个init功能包。例如,
package plates
import "text/template"
var templates map[string]*template.Template
// Load project templates on program initialisation
func init() {
if templates == nil {
templates = make(map[string]*template.Template)
}
// Load project templates
}
// Load program templates on program initialisation
func init() {
if templates == nil {
templates = make(map[string]*template.Template)
}
// Load program templates
}
程序应该有零错误。防御性编程。
- 2 回答
- 0 关注
- 157 浏览
添加回答
举报