Go语言 如何将一个接口{}分配给另一个具体类型为SameStructType的接口{}?

uqdfh47h  于 2023-06-19  发布在  Go
关注(0)|答案(1)|浏览(114)
type SameStructType struct{
    Test string
}

func A() interface{} {
    return SameStructType{
        Test:"123",
    }
}
func B() interface{} {
    return &SameStructType{}
}

a:=A()
b:=B()

// *b=a //I want to make b assigned by a.

如果我知道实际的类型,我可以使用下面的代码:

a := A().(SameStructType)
b := B().(*SameStructType)
*b = a

问题是我不知道他们的实际类型,但我知道他们有相同的类型。
有没有一个简单的方法来代替“reflect”?我不喜欢使用reflect逐字段解析结构体,因为它很慢。
如果我必须使用reflect,有没有简单的方法?我确信它们有相同的类型,那么有没有像C/C++那样快速复制内存的方法呢?

e3bfsja2

e3bfsja21#

我找到了一个“愚蠢”的方法。

a := A()
b := B()
buffer, _ := json.Marshal(a)
json.Unmarshal(buffer, b)

它工作得很好,json包使用reflect来编码/解码接口{}。我认为这个解决方案很容易编码,但运行缓慢,所以我不认为这是一个好的解决方案。

相关问题