美文网首页Golang Code Pieces
通过tag从一个对象复制到另外一个对象

通过tag从一个对象复制到另外一个对象

作者: yanjusong | 来源:发表于2019-06-23 00:06 被阅读0次
package main

import (
    "fmt"
    "reflect"
)

type T struct {
    A int    `newT:"AA"`
    B string `newT:"BB"`
}

type newT struct {
    AA int
    BB string
}

func copyFromValue() {
    t := T{
        A: 123,
        B: "hello",
    }
    tt := reflect.TypeOf(t)
    tv := reflect.ValueOf(t)

    newT := &newT{}
    newTValue := reflect.ValueOf(newT)

    for i := 0; i < tt.NumField(); i++ {
        field := tt.Field(i)
        newTTag := field.Tag.Get("newT")
        tValue := tv.Field(i)
        newTValue.Elem().FieldByName(newTTag).Set(tValue)
    }

    fmt.Println(newT)
}

func copyFromPointer() {
    t := &T{
        A: 123,
        B: "hello",
    }

    // t是reference类型,所以需要Elem
    // Elem()注释如下:
    // Elem returns the value that the interface v contains
    // or that the pointer v points to.
    // It panics if v's Kind is not Interface or Ptr.
    // It returns the zero Value if v is nil.
    tt := reflect.TypeOf(t).Elem()
    tv := reflect.ValueOf(t).Elem()

    newT := &newT{}
    newTValue := reflect.ValueOf(newT)

    for i := 0; i < tt.NumField(); i++ {
        field := tt.Field(i)
        newTTag := field.Tag.Get("newT")
        tValue := tv.Field(i)
        newTValue.Elem().FieldByName(newTTag).Set(tValue)
    }

    fmt.Println(newT)
}

func main() {
    copyFromValue()
    copyFromPointer()
}

相关文章

  • 通过tag从一个对象复制到另外一个对象

  • 设计模式之原型模式

    原型模式:用原型对象指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其实原型对象就是从一个对象再创建另外一个...

  • Object.assign()用法讲解

    // 将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 const target =...

  • Object方法

    1、Object.assign(); 用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,最后返回 目标对象...

  • Beautifulsoup入门笔记(一)

    BeautifulSoup库里的对象 BeautifulSoup对象 标签Tag对象:通过find、findAll...

  • Object.assign()

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...

  • JS:Object.assign()方法

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...

  • Vue-music 小知识点

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...

  • 经典前端面试题: Object.assign 是浅拷贝还是深拷贝

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...

  • Object.assign()

    Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 ...

网友评论

    本文标题:通过tag从一个对象复制到另外一个对象

    本文链接:https://www.haomeiwen.com/subject/pvmbqctx.html