登录
首页 >  Golang >  Go问答

复制指向结构体的指针

来源:stackoverflow

时间:2024-03-13 10:09:22 469浏览 收藏

大家好,我们又见面了啊~本文《复制指向结构体的指针》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

请忽略这似乎是一个坏主意、不好的风格等等。

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

今天关于《复制指向结构体的指针》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>