go - 引用指向结构的指针并克隆它

标签 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)
}

最佳答案

使用一些反射魔法,我能够让它发挥作用。谢谢,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/

相关文章:

go - 为什么 calibre 无法读取重新创建的 .epub 文件上的元数据?

java - gRPC:如何使用 Go 服务器在 Java 客户端中获取多个返回值

golang使用ssh连接ssh并打印错误异常

go - 为什么详细给出的GO语言程序中的接口(interface)字段访问有效?

selenium - 端口不可用。退出...对于 golang selenium webdriver

go - 获取由空格分隔的输入的快速方法[Golang]

go - 安装GO-1.2的QML包找不到-Xubuntu

rest - 间歇性错误getsockopt : connection refused error on Http Post

linux - gccgo 精确

json - 在 Go 中从 POST 请求解码 JSON 失败