go 类型的实例可以更改其基础值吗?感谢之前的一个问题,我知道如果我的类型是结构,我可以将函数的接收器设为指针并更改结构字段。
但是,我对更改基础类型的值很感兴趣。考虑一个这样的小程序
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)
}
Run Code Online (Sandbox Code Playgroud)
我天真的假设是“好吧,我已经创建了一个新的Foo("Hello World")然后指向f它。由于接收者是一个指针 ( *Foo),这应该改变main().
但是,这不起作用。上面的程序仍然打印出“Nope”
对我对 go 的错误假设以及实现我想做的事情的任何技术都感兴趣。
您正在分配一个新的指针值f而不是取消引用它。
取消引用f并分配一个新的字符串值:
func (f *Foo) ChangeMe() {
*f = Foo("Hello World")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |