当我的函数被赋予一个接口参数作为指针时,我想将指针更新到其他内容(a* = b*)。如果函数参数不是接口,而是指针,则此方法工作正常。
给定以下代码:
package main
import "fmt"
type demoInterface interface {
GetName() string
}
type demoStruct struct {
name string
}
func (d demoStruct ) GetName() string {
return d.name
}
func Update(d1 demoInterface) {
fmt.Println(d1)
d2 := demoStruct{name: "bob"}
d1 = &d2
fmt.Println(d1)
}
func main() {
d1 := &demoStruct{name: "frank"}
fmt.Println(d1)
Update(d1)
fmt.Println(d1)
}
输出为
&{frank}
&{frank}
&{bob}
&{frank}
然而,我实际上期望
&{frank}
&{frank}
&{bob}
&{bob}
如果我替换 Update 函数签名以接受 *demoStruct 而不是 demoInterface,它将按预期工作。
当函数签名是接口而不是指针时,有没有办法让它按预期工作。
慕姐4208626
相关分类