引用指向结构的指针并将其克隆

时间:2018-09-29 14:10:32

标签: go

请忽略这似乎是个坏主意,风格不好等

这里的主要问题是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)
}

1 个答案:

答案 0 :(得分:0)

使用一些反射魔术,我能够使它起作用。 JimB,谢谢您的所有帮助!这个问题中的代码显然是人为设计的。对于测试实用程序,我需要此功能,该实用程序可以在应用各种突变之前的不同阶段对任何类型的结构进行“快照”。

...    
func process(i interface{}) (interface{}, error) {
    value := reflect.ValueOf(i)
    if value.Kind() == reflect.Ptr {
        i = value.Elem().Interface()
    }

    return copystructure.Copy(i)
}
...