婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > golang 實現兩個結構體復制字段

golang 實現兩個結構體復制字段

熱門標簽:阿克蘇地圖標注 涿州代理外呼系統 外呼系統顯本地手機號 電話機器人軟件免費 百度地圖標注后傳給手機 外呼系統用什么卡 壽光微信地圖標注 excel地圖標注分布數據 評價高的400電話辦理

實際工作中可能會有這樣的場景:

兩個結構體(可能類型一樣), 字段名和類型都一樣, 想復制一個結構體的全部或者其中某幾個字段的值到另一個(即merge操作),

自然想到可以用反射實現

package main
import "fmt"
import "reflect"
// 用b的所有字段覆蓋a的
// 如果fields不為空, 表示用b的特定字段覆蓋a的
// a應該為結構體指針
func CopyFields(a interface{}, b interface{}, fields ...string) (err error) {
	at := reflect.TypeOf(a)
	av := reflect.ValueOf(a)
	bt := reflect.TypeOf(b)
	bv := reflect.ValueOf(b)
	// 簡單判斷下
	if at.Kind() != reflect.Ptr {
		err = fmt.Errorf("a must be a struct pointer")
		return
	}
	av = reflect.ValueOf(av.Interface())
	// 要復制哪些字段
	_fields := make([]string, 0)
	if len(fields) > 0 {
		_fields = fields
	} else {
		for i := 0; i  bv.NumField(); i++ {
			_fields = append(_fields, bt.Field(i).Name)
		}
	}
	if len(_fields) == 0 {
		fmt.Println("no fields to copy")
		return
	}
	// 復制
	for i := 0; i  len(_fields); i++ {
		name := _fields[i]
		f := av.Elem().FieldByName(name)
		bValue := bv.FieldByName(name)
		// a中有同名的字段并且類型一致才復制
		if f.IsValid()  f.Kind() == bValue.Kind() {
			f.Set(bValue)
		} else {
			fmt.Printf("no such field or different kind, fieldName: %s\n", name)
		}
	}
	return
}
type S1 struct {
    Name string
    Age int
}
type S2 struct {
    Name string
    Age int32
}
func main() {
    s1 := S1{"hello", 22}
    s2 := S2{"world", 33}
    fmt.Println(s1, s2)
    CopyFields(s1, s2)
    fmt.Println(s1, s2)
}

上述例子輸出為:

{hello 22} {world 33}

no such field or different kind, fieldName: Age

{world 22} {world 33}

可見s2的Name字段值已經成功被覆蓋.

而s2中Age字段和s1中Age字段類型不一樣, 會忽略.

其實上面的還可以優化, 畢竟int32和int還是可以認為是"一樣"的類型的,

不過思路就是這樣.

補充:golang使用反射將一個結構體的數據直接復制到另一個結構體中(通過相同字段)

看代碼吧~

package main
import (
	"fmt"
	"reflect"
)
type A struct {
	Name   string
	Gender string
	Age    int
}
type B struct {
	Name   string
	Gender string
}
//binding type interface 要修改的結構體
//value type interace 有數據的結構體
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
		if ok := bVal.FieldByName(name).IsValid(); ok {
			bVal.FieldByName(name).Set(reflect.ValueOf(vVal.Field(i).Interface()))
		}
	}
}
func main() {
	as := A{}
	bs := B{Name: "wfy", Gender: "男"}
	fmt.Println(as)
	structAssign(as, bs)
	fmt.Println(as)
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang修改結構體中的切片值方法
  • golang 結構體初始化時賦值格式介紹
  • golang結構體與json格式串實例代碼
  • Golang 利用反射對結構體優雅排序的操作方法

標簽:吐魯番 重慶 梅河口 汕頭 欽州 雞西 銅川 蘭州

巨人網絡通訊聲明:本文標題《golang 實現兩個結構體復制字段》,本文關鍵詞  golang,實現,兩個,結構,體,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《golang 實現兩個結構體復制字段》相關的同類信息!
  • 本頁收集關于golang 實現兩個結構體復制字段的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美三级电影精品| 久久久久久久久久久电影| 大尺度一区二区| 精品噜噜噜噜久久久久久久久试看 | jlzzjlzz国产精品久久| 悠悠色在线精品| 亚洲午夜私人影院| 96av麻豆蜜桃一区二区| 91影院在线观看| 亚洲裸体xxx| 在线免费观看一区| 亚洲成人午夜影院| 日韩欧美亚洲一区二区| 国产成人在线色| 亚洲一二三四在线| 欧美一区二区三区男人的天堂| 九色|91porny| 国产精品国产成人国产三级| 欧美在线一区二区| 国内国产精品久久| 一区二区日韩av| 2023国产一二三区日本精品2022| 夫妻av一区二区| 亚洲v精品v日韩v欧美v专区 | 92精品国产成人观看免费| 亚洲精品高清在线观看| 91精品婷婷国产综合久久性色| 国产激情视频一区二区三区欧美| 中文字幕亚洲综合久久菠萝蜜| 欧美日韩精品久久久| 国产二区国产一区在线观看| 香蕉久久一区二区不卡无毒影院| 欧美激情资源网| 国产亚洲va综合人人澡精品 | 亚洲伦理在线免费看| 欧美一区二区在线播放| 97精品国产露脸对白| 久久爱www久久做| 午夜a成v人精品| 亚洲精品欧美激情| 国产日产精品一区| 日韩女同互慰一区二区| 在线精品观看国产| 国产suv精品一区二区6| 久久精品二区亚洲w码| 亚洲国产精品久久久久婷婷884| 久久色视频免费观看| 欧美精品 日韩| 精品视频1区2区3区| 色婷婷久久久综合中文字幕| 国产成人午夜精品影院观看视频| 精一区二区三区| 日产精品久久久久久久性色| 亚洲一卡二卡三卡四卡五卡| 中文字幕欧美一| 欧美国产精品v| 国产精品午夜在线| 国产精品久久午夜| 国产精品国产三级国产三级人妇| 精品久久久久久无| 久久久久久久精| 久久久国产午夜精品| 精品国产伦一区二区三区免费| 欧美挠脚心视频网站| 欧美精品自拍偷拍| 欧美日韩国产首页在线观看| 欧美日韩在线精品一区二区三区激情| 91一区一区三区| 欧美午夜精品电影| 欧美日韩在线不卡| 日韩视频免费观看高清在线视频| 日韩亚洲欧美一区二区三区| 在线不卡一区二区| 欧美第一区第二区| 国产欧美日韩不卡| 亚洲免费三区一区二区| 亚洲成人黄色小说| 麻豆精品在线视频| 风间由美一区二区av101| jlzzjlzz国产精品久久| 色噜噜狠狠成人中文综合| 欧美天堂一区二区三区| 日韩欧美在线123| 久久久久久97三级| 亚洲综合999| 国产在线一区二区| 97精品国产露脸对白| 91精品欧美福利在线观看| 久久婷婷国产综合精品青草| 亚洲欧美色综合| 99精品欧美一区二区蜜桃免费| 欧美日韩国产影片| 亚洲第一成年网| av亚洲精华国产精华精| 欧美一区国产二区| 人妖欧美一区二区| 91麻豆精品国产自产在线| 亚洲免费资源在线播放| 成人精品鲁一区一区二区| 欧美日韩一区在线观看| 日韩av在线免费观看不卡| 视频一区视频二区在线观看| 一区二区三区视频在线看| 亚洲成人av一区二区三区| 精品在线播放免费| 一本色道久久综合亚洲91| 久久久久久久久伊人| 亚洲va韩国va欧美va精品| 国产精品一区二区在线观看网站 | 亚洲福利一二三区| 国产成人在线看| 欧美一区国产二区| 亚洲精品成a人| 大胆亚洲人体视频| 欧美videossexotv100| 亚洲美女屁股眼交3| 成人免费精品视频| 久久综合色综合88| 亚洲r级在线视频| 91亚洲国产成人精品一区二区三 | 欧美一级二级三级蜜桃| 国产精品免费丝袜| 国产一区在线观看视频| 69堂成人精品免费视频| 亚洲精品伦理在线| 岛国精品在线播放| 欧美国产激情一区二区三区蜜月| 经典三级在线一区| 欧美一区二区三区视频在线 | 欧美日韩成人综合| 国产精品全国免费观看高清| 国产一区二区在线观看视频| 日韩久久久久久| 裸体一区二区三区| 91麻豆精品国产91久久久资源速度| 一区二区日韩电影| 欧美午夜精品免费| 天堂蜜桃91精品| 91精品国产综合久久精品性色| 亚洲电影第三页| 欧美日韩精品一区二区天天拍小说| 日韩一区日韩二区| 在线亚洲欧美专区二区| 亚洲宅男天堂在线观看无病毒| 欧美精品久久天天躁| 日韩精品久久理论片| 日韩一区二区三区视频在线| 日韩和欧美的一区| 精品欧美一区二区三区精品久久 | 午夜视频一区二区| 欧美丰满少妇xxxxx高潮对白 | 国产成人亚洲综合a∨猫咪| 久久精品亚洲精品国产欧美kt∨| 国产成人精品综合在线观看| 国产精品久久久久影院| 91免费看视频| 日韩高清欧美激情| 久久久久久**毛片大全| 成人国产精品视频| 亚洲最大成人综合| 日韩一区和二区| 不卡的av网站| 日本成人超碰在线观看| 国产色产综合产在线视频| 99久久777色| 日韩中文欧美在线| 国产亲近乱来精品视频 | 国产精品国产精品国产专区不蜜| 99久久精品免费看| 亚洲二区在线观看| 久久精品视频一区| 欧美日韩激情一区二区三区| 国产一区在线观看视频| 亚洲视频一区二区免费在线观看| 在线播放中文字幕一区| 国产成人日日夜夜| 日韩av成人高清| 亚洲精品写真福利| 久久久久久免费| 欧美精选午夜久久久乱码6080| 成人丝袜视频网| 日韩国产欧美三级| 亚洲精品成a人| 国产精品久久久久久久久动漫| 日韩一区二区三区视频| 欧美亚男人的天堂| 色综合久久天天综合网| 精品一区二区三区免费毛片爱| 一区二区三区久久| 国产精品日日摸夜夜摸av| 精品国产91乱码一区二区三区 | 亚洲欧洲国产日韩| 久久一区二区视频| 日韩小视频在线观看专区| 91尤物视频在线观看| 国产成人8x视频一区二区| 久久精品国产99国产精品| 午夜激情一区二区三区| 亚洲最色的网站| 亚洲在线免费播放|