首页 > 其他分享 >go两个结构体赋值相同类型和名称的字段(测试)

go两个结构体赋值相同类型和名称的字段(测试)

时间:2022-09-01 16:11:44浏览次数:44  
标签:int32 type TT reflect json 测试 go Type 赋值

package main

import (
	"fmt"
	"reflect"
	"time"
)

type TA struct {
	Id   *int32       `json:"id"`
	TT   TT           `json:"tt"`
	Arr  Array[int32] `json:"arr"`
	Date Datetime     `json:"date"`
}

type TB struct {
	Id   *int32       `json:"id"`
	TT   TT           `json:"tt"`
	Arr  Array[int32] `json:"arr"`
	Date Datetime     `json:"date"`
}

type Array[T string | int32 | int8] []T
type Datetime time.Time

type TT struct {
	Id int32 `json:"id"`
}

func main() {
	var num int32 = 1
	a := TA{
		Id: &num,
		TT: TT{
			Id: 2,
		},
		Arr:  []int32{1, 2},
		Date: Datetime(time.Now()),
	}
	var b TB
	StructAssign(&b, &a)
	fmt.Printf("%#v\n", a)
	fmt.Printf("%#v\n", b)
}

func StructAssign(binding interface{}, value interface{}) {
	bVal := reflect.ValueOf(binding).Elem() // 获取reflect.Type类型
	vVal := reflect.ValueOf(value).Elem()   // 获取reflect.Type类型
	vTypeOfT := vVal.Type()
	for i := 0; i < vVal.NumField(); i++ {
		// 相同属性的字段,有则修改其值
		name := vTypeOfT.Field(i).Name
		// 同类型
		valType := vTypeOfT.Field(i).Type

		if ok := bVal.FieldByName(name).IsValid() && bVal.FieldByName(name).Type() == valType; ok {
			bVal.FieldByName(name).Set(reflect.ValueOf(vVal.Field(i).Interface()))
		}
	}
}

标签:int32,type,TT,reflect,json,测试,go,Type,赋值
From: https://www.cnblogs.com/burndust/p/16646856.html

相关文章

  • Go 语言入门 1-管道的特性及实现原理
    入坑go也快一年了,从今天开始会定期分享一下Go语言学习过程中的一些基础知识。 go语言中的管道,主要是用于协程之间的通信,比UNIX的管道更加轻量和易用。 我们......
  • 修改mongodb的缓存大小
    在admin下首先查询当前cache大小db.serverStatus().wiredTiger.cache['maximumbytesconfigured']/1024/1024/1024 方法一:修改配置文件mongod.conf添加内容如下s......
  • 给正在运行的mongodb启动添加配置文件
    因为一开始启动容器的时候就没有指定配置文件,无论怎么修改容器中的/etc/mongd.conf.org文件都无法生效所以直接修改启动脚本添加$@的参数实现1、复制容器中的文件/usr/lo......
  • 只懂黑盒测试也能学会的代码覆盖率及精准化测试
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取测试覆盖率是对测试完成程度的度量。它通常依据某种覆盖准则来对测试用例执行情况进行衡量,以判......
  • 史上最全 Appium 自动化测试从入门到框架实战精华学习笔记(三)
    ⬇️点击“下方链接”,提升测试核心竞争力!>>更多技术文章分享和免费资料领取本系列文章汇总了从Appium自动化测试从基础到框架高级实战中,所涉及到的方方面面的知识点精华......
  • go map键类型小记
    一、Go语言map的键类型不可以是函数类型、字典类型和切片类型。因为map键值需要可以做hash操作,而func,map,slice不支持这些操作。 报错:  并且,一般Struct可以支持ha......
  • sprinngboot+Mongodb
    参考:https://blog.csdn.net/m0_46742141/article/details/121845098 maven依赖<dependency><groupId>org.springframework.boot</groupId>......
  • Django国际化
    安装python环境并配置系统变量安装django:pipinstallDjangoCMD中输入django-admin 看看是否有命令提示输出,如果没有,将”xxxxx\Roaming\Python\Python39\Scripts”加......
  • MongoDB 实现中文全文搜索
    Prerequisite倒排索引是所有支持全文搜索的数据库的基础。比如iamironman和iwillbesoonback,欲查找be,先查第一句,再查第二局,这是正排;将每个单词提取出来形成一个......
  • pyest+appium实现APP自动化测试,思路全总结在这里
    每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自【码同学软件测试】码同学公众号:自动化软件测试,领取资料可加:magetest码同学抖音号:小码哥聊软件测试01appium......