Go 更改函数中的struct字段或返回值
最后,这个问题肯定取决于个人偏好。尽管如此,我还是想大胆尝试,找出哪种风格更受欢迎 我最近注意到我的代码中存在不一致之处。我有一个带有一些字段的结构。现在的问题是,当我需要调用一个函数来获取我想要设置的值时,编辑此字段的惯用方法是什么。我是在函数中设置值,还是返回值并在调用函数中设置Go 更改函数中的struct字段或返回值,go,Go,最后,这个问题肯定取决于个人偏好。尽管如此,我还是想大胆尝试,找出哪种风格更受欢迎 我最近注意到我的代码中存在不一致之处。我有一个带有一些字段的结构。现在的问题是,当我需要调用一个函数来获取我想要设置的值时,编辑此字段的惯用方法是什么。我是在函数中设置值,还是返回值并在调用函数中设置 type SuperStruct struct { OneValue string AnotherValue string } func (s *SuperStruct) makeAnot
type SuperStruct struct {
OneValue string
AnotherValue string
}
func (s *SuperStruct) makeAnotherValue() {
s.AnotherValue = "Hello there"
}
func main() {
superStruct := SuperStruct{}
superStruct.makeAnotherValue()
}
或(使用相同的结构)
我知道在某些情况下,这些方法中只有一种是有意义的。但我经常发现自己处于一种两者皆有可能的情况。我想第二种方法可以提供更好的保护,但有时这不是问题。我认为惯用的方法是完全删除您的功能:
func main() {
superStruct := SuperStruct{AnotherValue:"Hello there"}
}
或
除非绝对必要,否则不要构建getter/setter/create函数,只需完成所需的工作。如果只是设置一个简单的字段,在大多数情况下,不需要工厂来生成字段值。如果您认为该函数是必需的,那么它需要比这个复杂得多(至少几行),并且通常被称为NewAnotherValue,而不是附加到父结构
通过另一个函数/结构进行的每一次间接寻址都会使代码更难理解。也许示例的内容要少一点。它是关于复杂的任务,而不仅仅是设定一个值。查询API、IO访问或复杂的收集操作。如果您真的觉得卡住了,请发布实际代码,但我认为go风格非常简单-避免unecc。抽象,使用NewXXX来创建新类型,在这里您想要包装一个复杂的设置,而不是在类型a上的函数中创建类型b(您可以,但没有必要)。
func main() {
superStruct := SuperStruct{AnotherValue:"Hello there"}
}
func main() {
superStruct := SuperStruct{}
...
superStruct.AnotherValue = "Hello there"
}