介绍
这篇文章将为大家详细讲解有关使用golang怎么对结构体的格式进行初始化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
golang在给结构体赋值初始值时,用:分割k、v值
,,x :=, ItemLog { ,,,,,,,GetUuid (), ,,,ItemId:, u.Id, ,,,UsrId:,,“123”, ,,,的名字:,,u.Name, ,,,价格:,,u.Price, ,,,描述:,,u.Desc, ,,,状态:,u.Status, ,,,DevArea:, u.DevArea, 以前,,}><强>补充:golang结构体作为地图的元素时,不能够直接赋值给结构体的某个字段强>
引入:错误报告直接分配到结构体字段的映射
1。问题的产生
这个问题在github上可以追溯到2012年提交的一个问题,链接为https://github.com/golang/go/issues/3117;如上图,结构体作为地图的元素时,不能够直接赋值给结构体的某个字段,也就是地图中的结构体中的字段不能够直接寻址。
2。问题产生的原因
关于golang中映射的这种古怪的特性有这样几个观点:
1)地图作为一个封装好的数据结构,由于它底层可能会由于数据扩张而进行迁移,所以拒绝直接寻址,避免产生野指针;
2)中映射的关键在不存在的时候,赋值语句其实会进行新的离子束进行值的插入,所以拒绝直接寻址结构体内的字段,以防结构体不存在的时候可能造成的错误;
3)这可能和地图的并发不安全性相关
3。问题的解决
1)迂回方式一:整体更新地图的价值部分
package main “fmt" import type Person 结构{ name 字符串 sex 字符串 age int } , func main () { :=,地图,m 使用uint人{ 人,0:{“张无忌”,,“男,,,18}, 人,1:{“周芷若,,,“女“,,17}, ,} , ,//m [0] .age +=1 ,//整体更新结构体 :=,m, temp  [0] temp.age +=, 1 ,m [0]=temp ,fmt.Println (m) }运行结果:
2)迂回方式二:把地图的价值部分定义为对应类型的指针类型或是片或是地图时,这样是可以更新v的内部字段的
package main “fmt" import type Person 结构{ name 字符串 sex 字符串 age int } , func main (), { ,//定义类映射的值型为指针类型 :=,地图,m  *人(单位){ ,0:和人{“张无忌”,,“男,,,18}, ,1:和人{“周芷若,,,“女“,,17}, }大敌; ,m [0] .age +=, 1, ,fmt.Println (* m [0]) }运行结果:
关于使用golang怎么对结构体的格式进行初始化就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。
使用golang怎么对结构体的格式进行初始化