golang中使用匿名结构体的方法
目录
- 转化为map
- 定义具名结构体
- 定义匿名结构体
{"opt": "left", "phoneinfo": [{"device_id": 64, "sn": "192.168.110.65:5555"},{"device_id": 68, "sn": "192.168.110.164:5555"}]}
当我们尝试使用
json.Unmarshal()
函数将json 字符串转为go中的数据结构时,我们可以有以下几种方式转化为map map 结构需要定义key 和value的类型, 对于key 好说, 可以都定义为string, 但是对于value, 从上面的json 结构可以看出, 有字符串,也有整型,这种就不太好定义,谁知道未来会不会有新的类型,所以我们可以无脑的将json 转化为
map[string]interface{}
import ( "encoding/json" "fmt")func main() { str := `{"opt": "left", "phoneinfo": [{"device_id": 64, "sn": "192.168.110.65:5555"},{"device_id": 68, "sn": "192.168.110.164:5555"}]}` var s map[string]interface{} json.Unmarshal([]byte(str), &s) fmt.Printf("%#v", s)}
这种是可以转换,但是如果要用到里面的数据就比较麻烦, 需要将
interface{}
做类型转换 如要获取到opt 参数opt := s["opt"].(string)fmt.Println(opt)
定义具名结构体 还有一种方式是定义一个结构体,用来接收参数 如想要接收上面的json 字符串, 可以定义下面的结构体
package mainimport ( "encoding/json" "fmt")type phoneinfo struct { Device_id int`json:"device_id"` Snstring `json:"sn"`}type params struct { Optstring`json:"opt"` Phoneinfo []phoneinfo `json:"phoneinfo"`}func main() { str := `{"opt": "left", "phoneinfo": [{"device_id": 64, "sn": "192.168.110.65:5555"},{"device_id": 68, "sn": "192.168.110.164:5555"}]}` var s params json.Unmarshal([]byte(str), &s) fmt.Printf("%#v\n", s) fmt.Println(s.Opt) //left fmt.Println(s.Phoneinfo[0].Sn) //192.168.110.65:5555}
定义匿名结构体 上面定义了两个结构体,但是很明显,这两个结构体只在这里使用一次, 别的地方是不会再用得到的, 所以这时我们也可以使用匿名结构体
func main() { str := `{"opt": "left", "phoneinfo": [{"device_id": 64, "sn": "192.168.110.65:5555"},{"device_id": 68, "sn": "192.168.110.164:5555"}]}` var s struct {Optstring `json:"opt"`Phoneinfo []struct {Device_id int`json:"device_id"`Snstring `json:"sn"`} `json:"phoneinfo"` } json.Unmarshal([]byte(str), &s) fmt.Printf("%#v\n", s) fmt.Println(s.Opt) fmt.Println(s.Phoneinfo[0].Sn)}
直接通过
var 变量名 struct {}
来初始化一个匿名结构体变量, 但是如果这种结构需要在多处使用,那还是单独定义一个具名结构体比较好.【golang中使用匿名结构体的方法】到此这篇关于golang中使用匿名结构体的文章就介绍到这了,更多相关golang匿名结构体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- EasyUI使用DataGrid实现动态列数据绑定
- Vue3中插槽(slot)的全部使用方法
- C#.NET|C#.NET ORM FreeSql 读取使用 US7ASCII 的 Oracle 数据库中文显示乱码问题
- 今夜独想
- 遵义毛石镇发现熬硝溶洞|遵义毛石镇发现熬硝溶洞 洞中屯兵遗址 政府高度重视
- java|java stream list 删除list中对象属性重复元素
- C语言游戏开发之消消乐3
- 泛员网-养老保险中断会影响退休后的待遇吗()
- 为什么中国大学生都喜欢坐最后一排()
- Git一些常用命令,工作中必须学会的几个命令!