考虑这个例子。假设我有一个在我的代码库中无处不在的对象:
type Person struct {
Name string
Age int
[some other fields]
}
在代码库深处的某个地方,我还有一些创建新Person结构的代码。也许它类似于下面的实用函数(请注意,这只是一些创建函数的示例Person——我的问题的重点不是专门询问复制函数):
func copyPerson(origPerson Person) *Person {
copy := Person{
Name: origPerson.Name,
Age: origPerson.Age,
[some other fields]
}
return ©
}
另一位开发人员出现并向结构添加了一个新Gender字段Person。但是,因为该copyPerson函数位于一段遥远的代码中,所以他们忘记更新copyPerson. 如果您在创建结构时省略参数,golang 不会抛出任何警告或错误,代码将编译并看起来工作正常;唯一的区别是该copyPerson方法现在无法复制Gender结构,并且结果copyPerson将Gender替换为 nil 值(例如空字符串)。
防止这种情况发生的最佳方法是什么?有没有办法让 golang 在特定的结构初始化中强制执行不丢失参数?是否有可以检测此类潜在错误的 linter?
慕田峪4524236
SMILET
慕妹3242003
素胚勾勒不出你
一只斗牛犬
相关分类