日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang struct 转map 及 map[string]*Struct 初始化和遍历

發布時間:2025/4/16 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang struct 转map 及 map[string]*Struct 初始化和遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
package mainimport ("encoding/json""errors""fmt""reflect""strconv""time" )type User struct {a stringb string }type S struct {UserName stringAge intAddress string }//結構體轉map方法1 func Struct2Map(obj interface{}) map[string]interface{} {t := reflect.TypeOf(obj)v := reflect.ValueOf(obj)var data = make(map[string]interface{})//func (v Value) NumField() int, 返回v持有的結構體類型值的字段數,如果v的Kind不是Struct會panicfor i := 0; i < t.NumField(); i++ {data[t.Field(i).Name] = v.Field(i).Interface()}return data }//結構體轉map方法2 func StructToMapViaJson(data S) map[string]interface{} {m := make(map[string]interface{})//struct 轉jsonj, _ := json.Marshal(data)//json 轉mapjson.Unmarshal(j, &m)return m }func FillStruct(data map[string]interface{}, obj interface{}) error {for k, v := range data {//fmt.Println("k: ", k, " v: ", v)err := SetField(obj, k, v)if err != nil {return err}}return nil }func SetField(obj interface{}, k string, v interface{}) error {//結構體屬性值structValue := reflect.ValueOf(obj).Elem()//fmt.Println("structValue: ", structValue)//結構體單個屬性值structFieldValue := structValue.FieldByName(k)//fmt.Println("structFieldValue: ", structFieldValue)if !structFieldValue.IsValid() {return fmt.Errorf("No such field: %s in obj", k)}if !structFieldValue.CanSet() {return fmt.Errorf("Cannot set %s field value", k)}//結構體屬性類型structFieldType := structFieldValue.Type()val := reflect.ValueOf(v)var err errorif structFieldType != val.Type() {//類型轉換val, err = TypeConversion(fmt.Sprintf("%v", v), structFieldValue.Type().Name())if err != nil {return err}}structFieldValue.Set(val)return nil }func TypeConversion(value string, ntype string) (reflect.Value, error) {fmt.Println("call TypeConversion...")if ntype == "string" {return reflect.ValueOf(value), nil} else if ntype == "time.Time" {t, err := time.ParseInLocation("2006-01-02 15:04:05", value, time.Local)return reflect.ValueOf(t), err} else if ntype == "Time" {t, err := time.ParseInLocation("2006-01-02 15:04:05", value, time.Local)return reflect.ValueOf(t), err} else if ntype == "int" {i, err := strconv.Atoi(value)return reflect.ValueOf(i), err} else if ntype == "int8" {i, err := strconv.ParseInt(value, 10, 64)return reflect.ValueOf(int8(i)), err} else if ntype == "int32" {i, err := strconv.ParseInt(value, 10, 64)return reflect.ValueOf(int64(i)), err} else if ntype == "int64" {i, err := strconv.ParseInt(value, 10, 64)return reflect.ValueOf(i), err} else if ntype == "float32" {i, err := strconv.ParseFloat(value, 64)return reflect.ValueOf(float32(i)), err} else if ntype == "float64" {i, err := strconv.ParseFloat(value, 64)return reflect.ValueOf(i), err}//else if .......增加其他一些類型的轉換return reflect.ValueOf(value), errors.New("未知的類型:" + ntype) }func main() {var s STypes := reflect.TypeOf(s)//TypeData.FieldByIndex([]int{}) 返回 StructField//[]int{}參數: 第一個是struct類型的索引(如果索引為參數一的數據類型不是struct會報錯), 第二個是索引為參數一的結構體內屬性的索引//例如[]int{0,0} 會輸出[0] a string,表示索引為0的結構體User內索引為0的數據是a//[]int{0, 1} 會輸出[1] b string//[]int{1, 0}會報錯, 因為索引為1的數據是S結構體中的數據 Name string,數據類型不是structres := Types.FieldByIndex([]int{0, 0})fmt.Println("FieldByIndex: ", res.Index, res.Name, res.Type)//struct to mapinfo := S{Name: "xsk", Age: 22, Address: "shanghai"}data := Struct2Map(info)fmt.Println("data: ", data, " ", "typeof(data): ", reflect.TypeOf(data))for k, v := range data {fmt.Println(k, v.(interface{}))}fmt.Println("---------")data1 := StructToMapViaJson(info)fmt.Println("data1: ", data1, " ", "typeof(data1): ", reflect.TypeOf(data1))for k, v := range data1 {fmt.Println(k, v.(interface{}))}fmt.Println("---------")//map to structdata2 := make(map[string]interface{})data2["Name"] = "xsk"data2["Age"] = 22data2["Address"] = "shanghai"result := &S{}err := FillStruct(data2, result)fmt.Println("err: ", err, " result: ", fmt.Sprintf("%+v", *result))fmt.Println("---------")//map[string]*Struct 下面幾種初始化都行//第一種//var info1 = map[string]*S{"info": &S{Name: "mtt", Age: 23, Address: "shanghai"}}//第二種var info1 = map[string]*S{"info": &S{}, "other": &S{}}info1["info"].Name = "mtt"info1["info"].Age = 23info1["info"].Address = "shanghai"fmt.Println("info1: ", *info1["info"])t := reflect.TypeOf(*info1["info"])v := reflect.ValueOf(*info1["info"])for k := 0; k < t.NumField(); k++ {fmt.Printf("%s: %v\n", t.Field(k).Name, v.Field(k).Interface())}fmt.Println("---------")//第三種var info2 = map[string]*S{}info2["info"] = &S{Name: "xly", Age: 1, Address: "shanghai"}fmt.Println("info2: ", *info2["info"])ty := reflect.TypeOf(*info2["info"])vl := reflect.ValueOf(*info2["info"])for k := 0; k < ty.NumField(); k++ {fmt.Printf("%s: %v\n", ty.Field(k).Name, vl.Field(k).Interface())}}

golang 中 map 轉 struct

package mainimport ("fmt""github.com/goinggo/mapstructure" )type Person struct {Name stringAge int }func MapToStruct() {mapInstance := make(map[string]interface{})mapInstance["Name"] = "liang637210"mapInstance["Age"] = 28var person Person//將 map 轉換為指定的結構體if err := mapstructure.Decode(mapInstance, &person); err != nil {fmt.Println(err)}fmt.Printf("map2struct后得到的 struct 內容為:%v", person) }func main(){MapToStruct() }

轉載于:https://www.cnblogs.com/nyist-xsk/p/11301468.html

總結

以上是生活随笔為你收集整理的golang struct 转map 及 map[string]*Struct 初始化和遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产sm调教一区二区 | 国产影视一区二区三区 | 激情文学欧美 | 操女人免费视频 | jizz日本免费 | 在线看一级片 | 精品人妻一区二区三 | 欧美精品一区二区三区四区五区 | 国产亚洲欧美在线精品 | 国产吞精囗交久久久 | 丰满女邻居的色诱4hd | 日本黄色一级视频 | 色撸撸在线 | 中国字幕一色哟哟 | 国产精品久久久久久久久久久久久久 | 色wwwwww| 性生交生活影碟片 | 精品成人无码久久久久久 | 亚洲91视频| 日本美女全裸 | 97碰| 欧美色噜噜 | 色九九| av图片在线观看 | 波多野结衣亚洲天堂 | 97精品国产露脸对白 | 欧美日韩极品 | 麻豆porn| 成人短视频在线免费观看 | 丝袜国产在线 | 亚洲国产无线乱码在线观看 | 国产精品视频在线播放 | 99视频网站 | 在线观看免费小视频 | 六月天综合网 | 一起操在线观看 | 青青操视频在线观看 | 国产一级片 | 一区二区三区黄色片 | 日韩欧美99 | 成人乱人乱一区二区三区一级视频 | 山村大伦淫第1部分阅读小说 | 不卡中文字幕在线 | a级无毛片 | 日韩草比| 欧美操老女人 | 黄瓜视频在线免费观看 | 肉丝美足丝袜一区二区三区四 | 午夜色大片 | 都市激情校园春色亚洲 | 久久综合视频网 | 日本男女啪啪 | 久久精品亚洲一区二区 | av电影网站在线观看 | 诱惑の诱惑筱田优在线播放 | 美女福利一区 | 午夜av福利| 免费看日产一区二区三区 | 国产成人精品亚洲 | 日韩免费在线 | 九九热精品视频在线播放 | 日韩精品视频中文字幕 | 一级中文字幕 | 中文字幕一区在线 | 国产超级av | 日韩91视频 | 啪免费视频 | 黄色aaa视频 | 亚洲天堂中文在线 | 人妻丰满熟妇av无码区免 | 久久久三级 | xxxxxxxx黄色片 | 色多多污污| 天天草夜夜 | 丰满圆润老女人hd | 午夜激情在线观看 | 91porn破解版 | av在线不卡免费观看 | 直接看毛片 | 五月天激情婷婷 | 成人极品| 国产一区在线观看免费 | 成人自拍av | 午夜精品久久久久久久99热黄桃 | 日日躁夜夜躁狠狠久久av | 任你躁av一区二区三区 | 看片在线观看 | 亚洲精品影院 | 香港台湾日本三级大全 | 夜夜嗨视频 | 精品久久久久久久久久久久久久 | 6699嫩草久久久精品影院 | 日韩乱码人妻无码中文字幕久久 | 中文在线观看高清视频 | 中文字幕在线一区 | 久久精品人人做人人爽 | 黄色在线播放 | 白丝女仆被免费网站 | 啪啪网站大全 |