当我的函数被赋予一个作为指针的接口参数时,我想将指针更新为其他东西(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 它按预期工作。
当函数签名是接口而不是指针时,有没有办法让它按预期工作。
谢谢。