go中的接口包含对结构的引用-这是否意味着它们无法正确复制/取消引用?我在下面重新创建了my problem:
package main
import (
"fmt"
"encoding/json"
)
type Animal interface {
getName() string
}
type Dog struct {
Name string
}
func (d Dog) getName() string {; return d.Name; }
func getTwo(a Animal) []Animal {
b := a
json.Unmarshal([]byte(`{"Name":"Bella"}`), a)
json.Unmarshal([]byte(`{"Name":"Buster"}`), b)
return []Animal{a, b}
}
func main() {
l := getTwo(&Dog{})
fmt.Printf("dog 1 is called: %s\n", l[0].(*Dog).getName())
fmt.Printf("dog 2 is called: %s\n", l[1].(*Dog).getName())
}
当前输出:
狗1被称为:克星
狗2被称为:克星
是否可以从b
取消引用a
(最好是无反射)?
我正在寻找仅修改main
或getTwo
方法的答案(其余方法都被嘲笑了)。显然,getTwo应该能够处理Dogs和其他Animals(就像现在一样)