亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 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 實現兩個結構體復制字段的相關信息資訊供網民參考!
  • 推薦文章
    国产精品自拍在线| 亚洲www美色| 日本在线www| 国产91精品一区二区| 美女免费精品高清毛片在线视 | 欧美激情一区二区三区在线| 亚洲 男人 天堂| 亚洲天堂在线播放| 天天做日日爱| 成人影视在线播放| 尤物视频网站在线观看| 国产一区免费在线观看| 精品久久久久久中文字幕一区| 毛片高清| 成人高清视频免费观看| 国产国语对白一级毛片| 精品视频在线观看一区二区三区| 国产成人啪精品| 国产美女在线观看| 亚洲 欧美 91| 亚洲天堂在线播放| 欧美大片a一级毛片视频| 青青青草影院 | 欧美国产日韩在线| 青青青草影院| 精品视频一区二区| 日本伦理黄色大片在线观看网站| 日日日夜夜操| 国产美女在线一区二区三区| 国产麻豆精品免费视频| 毛片成人永久免费视频| 香蕉视频一级| 青青青草影院| 精品国产一区二区三区国产馆| 黄色福利| 国产一区二区精品| 国产国语对白一级毛片| 在线观看成人网 | 日韩中文字幕一区二区不卡| 免费一级片在线| 久久精品免视看国产成人2021| 超级乱淫伦动漫| 日韩中文字幕在线观看视频| 久久成人综合网| 欧美国产日韩一区二区三区| 国产美女在线观看| 国产欧美精品午夜在线播放| 国产伦久视频免费观看 视频| 国产成人精品综合久久久| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 天天做日日爱| 一级女人毛片人一女人| 国产91丝袜高跟系列| 日韩男人天堂| 欧美激情伊人| 四虎影视库| 久久国产一久久高清| 国产网站免费观看| 色综合久久手机在线| 日本特黄特色aa大片免费| 美女免费精品高清毛片在线视 | 午夜激情视频在线观看| 日韩在线观看免费完整版视频| 欧美一级视频免费| 91麻豆精品国产自产在线观看一区| 97视频免费在线观看| 国产成人精品综合久久久| 欧美激情一区二区三区在线播放 | 免费毛片基地| 香蕉视频久久| 你懂的福利视频| 国产精品免费久久| 国产不卡在线看| 国产麻豆精品hdvideoss| 免费一级生活片| 天天做日日干| 成人高清视频免费观看| 日本特黄特色aaa大片免费| 一级毛片视频播放| 欧美日本二区| 97视频免费在线观看| 久久成人综合网| 日日夜人人澡人人澡人人看免| 国产不卡在线看| 成人免费观看男女羞羞视频| 黄视频网站免费观看| 日韩专区第一页| 高清一级淫片a级中文字幕| 天天做日日爱夜夜爽| 一级毛片看真人在线视频| 精品视频在线观看免费| 日本免费看视频| 日韩在线观看视频黄| 九九热国产视频| 香蕉视频三级| 精品视频一区二区三区| 中文字幕97| 国产伦精品一区三区视频| 欧美一级视频免费观看| 欧美国产日韩在线| 日韩中文字幕在线亚洲一区 | 可以免费看污视频的网站| 你懂的国产精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产网站在线| 欧美日本韩国| 精品视频免费在线| 久久久成人网| 久久精品免视看国产成人2021| 欧美a级片免费看| 欧美a级片免费看| 日本免费乱理伦片在线观看2018| 久久国产精品自由自在| 国产福利免费视频| 国产网站免费观看| 国产一级生活片| 日日爽天天| 精品国产一区二区三区久| 国产成人啪精品| 久久国产影院| 精品国产一级毛片| 麻豆系列 在线视频| 可以免费看毛片的网站| 99久久视频| 欧美国产日韩精品| 久久精品免视看国产明星| 日本在线播放一区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 亚洲精品永久一区| 精品国产三级a∨在线观看| 国产麻豆精品高清在线播放| 超级乱淫伦动漫| 欧美日本免费| 一 级 黄 中国色 片| 免费毛片基地| 精品国产香蕉伊思人在线又爽又黄| 国产成人啪精品| 精品久久久久久免费影院| 欧美激情伊人| 成人免费福利片在线观看| 你懂的国产精品| 青青久在线视频| 999精品在线| 免费国产在线观看| 国产麻豆精品高清在线播放| 久久久久久久男人的天堂| 日日日夜夜操| 日韩一级黄色片| 日韩专区一区| 四虎久久影院| 日本在线不卡免费视频一区| 日本免费看视频| 国产欧美精品午夜在线播放| 国产a视频精品免费观看| 精品国产一区二区三区久久久狼| 中文字幕97| 九九九国产| 亚洲第一色在线| 亚洲精品影院| 四虎影视库国产精品一区| 国产精品自拍亚洲| 久久精品成人一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 青青青草影院 | 免费国产一级特黄aa大片在线| 国产综合成人观看在线| 人人干人人草| 成人影视在线观看| 韩国三级香港三级日本三级la| 毛片高清| 国产视频一区在线| 一级毛片视频播放| 欧美日本二区| 日韩欧美一二三区| 久久精品免视看国产明星| 99久久精品国产国产毛片| 国产不卡精品一区二区三区| 精品视频在线观看一区二区三区| 午夜激情视频在线观看| 成人影视在线播放| 精品国产亚洲一区二区三区| 精品视频免费看| 久久99中文字幕久久| 九九久久国产精品大片| 精品视频在线看| 一本高清在线| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产福利免费观看| 国产成人精品综合久久久| 国产精品自拍在线| 日韩专区一区| 九九干| 九九精品影院| 日韩av东京社区男人的天堂| 成人高清护士在线播放| 99久久网站| 亚洲天堂在线播放| 日本特黄特黄aaaaa大片| 久久国产一久久高清| 黄色免费三级|