仅在已知接口时克隆结构

时间:2019-03-21 12:55:17

标签: go interface clone

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(最好是无反射)? 我正在寻找仅修改maingetTwo方法的答案(其余方法都被嘲笑了)。显然,getTwo应该能够处理Dogs和其他Animals(就像现在一样)

0 个答案:

没有答案