dqu94359 2018-02-20 12:29
浏览 27
已采纳

如何在Golang中创建结构运行时

For example, I have a struct that I take from the outside. I do not know the struct in fields and field values. I want to copy and use the same struct. With reflection I find the fields and types in it. But how do I create this struct in the runtime?

Edit : I just want to create a struct in the same name as the runtime. Imagine I do not know my person type. I just want to create the same struct by reflection with interface. I only know one interface. Person struct I just created it for instance. When a person creates a struct and sends it out, I will create it. instead of person, customer, student etc. You can send. consider the following code as a 3rd party library.


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

}



  • 写回答

1条回答 默认 最新

  • douzhantanju1849 2018-02-27 07:28
    关注

    The github.com/mitchellh/copystructure library handles this operation, which is known as a deep copy. After performing a deep copy, the original and the copy contain the same data but modifications to either one do not affect the other.

    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
    ", original)
    
        // The copy of the Person has not change, still has Id:0.
        fmt.Printf("copy: %#v
    ", copy)
    }
    
    func deepCopy(original interface{}) interface{} {
        copy, err := copystructure.Copy(original)
        if err != nil {
            panic(err)
        }
        return copy
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥50 求解vmware的网络模式问题
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?