最后,这个问题肯定取决于个人喜好。尽管如此,我还是想尝试找出哪种样式是首选。
我最近发现我的代码不一致。我有一些领域的结构。现在的问题是,当我需要调用一个函数以获取要设置的值时,该字段的惯用方式是什么?我是在函数内部设置值,还是在调用函数中返回并设置它?
type SuperStruct struct {
OneValue string
AnotherValue string
}
func (s *SuperStruct) makeAnotherValue() {
s.AnotherValue = "Hello there"
}
func main() {
superStruct := SuperStruct{}
superStruct.makeAnotherValue()
}
或(具有相同的结构)
func (s *SuperStruct) makeAnotherValue() string {
return "Hello there"
}
func main() {
superStruct := SuperStruct{}
superStruct.AnotherValue = superStruct.makeAnotherValue()
}
我知道在某些情况下,只有其中一种方式有意义。但是我经常发现自己处于两者皆有可能的情况。我想第二种方法可以提供更好的防护,但这有时不是问题。
答案 0 :(得分:2)
我认为惯用的方法是完全删除您的功能:
func main() {
superStruct := SuperStruct{AnotherValue:"Hello there"}
}
或
func main() {
superStruct := SuperStruct{}
...
superStruct.AnotherValue = "Hello there"
}
除非绝对必要,否则不要构建getter / setters / create函数,只需执行所需的工作即可。如果您只是设置一个简单的字段,则在大多数情况下,不需要工厂即可设置该字段的值。如果您认为该函数是必需的,则它需要比这复杂得多(至少几行),通常将其称为NewAnotherValue而不附加到父结构。
每个通过另一个函数/结构的间接调用都使代码难以遵循。