请忽略这似乎是个坏主意、糟糕的风格等等。
这里的主要问题是 process()
获取一个指向未知类型结构的指针作为 interface{}
传递,我需要克隆底层结构.
核心问题是我不知道如何引用指针,因为它作为 interface{}
传入,所以我可以克隆底层结构并返回它。
package main
import (
"fmt"
"reflect"
)
type Foo struct {
Value string
}
func main() {
foo1 := Foo{"bar"}
foo2 := process(&foo1)
result := reflect.DeepEqual(foo1, foo2)
fmt.Println(result) // how do I make this true?
}
// objective: pointer to struct is passed it, clone of underlying struct is returned
func process(i interface{}) interface{} {
return clone(i)
}
最佳答案
使用一些反射魔法,我能够让它发挥作用。谢谢,JimB ,感谢您的帮助!这个问题中的代码显然是人为的。我需要一个测试实用程序的此功能,该实用程序在应用各种突变之前在不同阶段拍摄任何类型的结构的“快照”。
...
func process(i interface{}) (interface{}, error) {
value := reflect.ValueOf(i)
if value.Kind() == reflect.Ptr {
i = value.Elem().Interface()
}
return copystructure.Copy(i)
}
...
关于go - 引用指向结构的指针并克隆它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52569167/