繁体   English   中英

如何在 golang 中创建 struct 运行时

[英]How to create struct runtime in golang

例如,我有一个从外部获取的结构。 我不知道字段和字段值中的结构。 我想复制并使用相同的结构。 通过反射,我找到了其中的字段和类型。 但是如何在运行时创建这个结构呢?

编辑:我只想创建一个与运行时同名的结构。 想象一下,我不知道我的人的类型。 我只想通过接口反射来创建相同的结构。 我只知道一个界面。 例如,我刚刚创建的 Person 结构体。 当一个人创建一个结构并将其发送出去时,我会创建它。 而不是人,客户,学生等。您可以发送。 将以下代码视为第 3 方库。


package main

import(

    "fmt" 
    "reflect"
)

type Person struct {
    Id  int  
    Name string   
    Surname string  
}

func main(){

    person := NewSomething()

    newPerson := typeReflection(person)

    ChangePerson(newPerson)

    fmt.Println("Success")
}

func typeReflection(_person interface{}){

    val := reflect.ValueOf(_person)
    //How to create same struct

}



github.com/mitchellh/copystructure库处理这个操作,称为深拷贝 执行深度复制后,原始和副本包含相同的数据,但对其中一个的修改不会影响另一个。

package main

import (
    "fmt"

    "github.com/mitchellh/copystructure"
)

type Person struct {
    Id      int
    Name    string
    Surname string
}

func main() {
    original := Person{Id: 0, Name: "n", Surname: "s"}

    copy := deepCopy(original)

    // Change fields of the original Person.
    original.Id = 9
    fmt.Printf("original: %#v\n", original)

    // The copy of the Person has not change, still has Id:0.
    fmt.Printf("copy: %#v\n", copy)
}

func deepCopy(original interface{}) interface{} {
    copy, err := copystructure.Copy(original)
    if err != nil {
        panic(err)
    }
    return copy
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM