go类型的实例是否可以更改其基础值?多亏了 previous question 我知道我可以 make my function's receiver a pointer and change struct fields 如果我的类型是结构。
不过,我对更改底层类型的值很感兴趣。考虑这样一个小程序
type Foo string func (f *Foo) ChangeMe() { val := Foo("Hello World") f = &val //fmt.Println(*f) } func main() { f := Foo("Nope") f.ChangeMe() fmt.Println(f) }
我天真的假设是“好吧,我创造了一个新的 Foo("Hello World") 然后指向 f 就这样。因为接收器是指针( *Foo ),这将更改 main() .
Foo("Hello World")
f
*Foo
main()
但是,这不起作用。上面的程序仍然打印“不”
对我关于围棋的错误假设和我想做的任何技巧都感兴趣。
您正在为 f 而不是取消引用。
取消引用 f型 并分配新的字符串值:
f型
func (f *Foo) ChangeMe() { *f = Foo("Hello World") }