理解 Go 中的结构体设置器
在 Go 中,结构体可以通过引用或值传递到函数中。当通过引用传递时,该函数可以修改原始结构。但是,按值传递结构会导致在函数内创建该结构的新副本,并且对此副本进行的任何修改都不会更改原始结构。
在提供的代码示例中:
type T struct { Val string }
结构体 T 包含一个名为 Val 的字符串字段。
func (t T) SetVal(s string) { t.Val = s }
SetVal 方法按值接收结构体并尝试修改其 Val 字段。但是,这并不能按预期工作,因为该函数正在对结构体的副本进行操作。
func (t *T) SetVal2(s string) { (*t).Val = s }
另一方面,SetVal2 方法接收指向结构体的指针,因此可以修改原始结构体结构。这是因为 Go 动态地对指针进行类型检查,允许函数访问底层结构并直接修改其字段。
总而言之,必须了解按值传递的结构会创建一个新副本,从而防止任何函数内所做的修改不会影响原始结构。要从函数内修改原始结构,必须使用指针通过引用传递它。
以上是Go 的结构设置器如何处理按值传递与按引用传递?的详细内容。更多信息请关注PHP中文网其他相关文章!