【GO】JSON:结构体转json

简介: 【GO】JSON:结构体转json

在这一节我们将会介绍几个新的知识点


interface{}

init()

案例


在这里会发现我们的类型是打印出来了,但是没有值,这是怎么个回事

image.png

那我们在来看一下这个案例

发现这个时候就会把值打印出来了,并且是一个json

那么上边那个案例为什么没哟打印出来呢!

那是因为在结构体里边定义的属性如果是首写字母是小写的话就代表的是私有属性。只有改变为大写后,别的方法才可以读取到

image.png

package main
import (
  "encoding/json"
  "fmt"
)
type Person struct {
  Name string
  Age  int
  Like []string
}
func main() {
  person := Person{Name: "咔咔", Age: 24, Like: []string{"咔咔博客", "咔咔手赚网"}}
  bytes, e := json.Marshal(person)
  if e != nil {
    fmt.Println("结构体转json失败,错误err是", e)
  } else {
    jsonStr := string(bytes)
    fmt.Printf("type:%T,value:%v", jsonStr, jsonStr)
  }
}

interface 讲解

使用了interface{}代表可以使用任意类型

屏幕快照 2022-05-18 下午11.09.52.png

package main
import (
  "encoding/json"
  "fmt"
)
type Person struct {
  Name string
  Age  int
  Like []string
}
func init() {
  fmt.Printf("我是初始化函数")
}
func main() {
}
/**
结构体转json
*/
func main0() {
  person := Person{Name: "咔咔", Age: 24, Like: []string{"咔咔博客", "咔咔手赚网"}}
  bytes, e := json.Marshal(person)
  if e != nil {
    fmt.Println("结构体转json失败,错误err是", e)
  } else {
    jsonStr := string(bytes)
    fmt.Printf("type:%T,value:%v", jsonStr, jsonStr)
  }
}
/**
interface讲解
*/
func main1() {
  // 定义了interface 后边就可以跟任意类型了
  mMap := make(map[string]interface{})
  mMap["博客地址"] = "blog.fangkang.top"
  mMap["age"] = 21
  fmt.Println(mMap)
}
相关文章
|
6月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
433 3
|
编译器 Go
揭秘 Go 语言中空结构体的强大用法
Go 语言中的空结构体 `struct{}` 不包含任何字段,不占用内存空间。它在实际编程中有多种典型用法:1) 结合 map 实现集合(set)类型;2) 与 channel 搭配用于信号通知;3) 申请超大容量的 Slice 和 Array 以节省内存;4) 作为接口实现时明确表示不关注值。此外,需要注意的是,空结构体作为字段时可能会因内存对齐原因占用额外空间。建议将空结构体放在外层结构体的第一个字段以优化内存使用。
|
11月前
|
JSON Go C语言
Go语言之定义结构体(Struct)-《Go语言实战指南》
Go 语言中的结构体(`struct`)是一种复合数据类型,可将多个不同类型的字段组合成一个类型。本文介绍了结构体的基本定义、实例创建方式、字段访问与修改、零值特性、比较规则、嵌套使用及标签功能。通过示例代码详细讲解了如何定义和操作结构体,以及其在 JSON 编码等场景的应用。
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
421 71
|
11月前
|
JSON JavaScript 前端开发
Go语言JSON 序列化与反序列化 -《Go语言实战指南》
本文介绍了 Go 语言中使用 `encoding/json` 包实现 JSON 与数据结构之间的转换。内容涵盖序列化(`Marshal`)和反序列化(`Unmarshal`),包括基本示例、结构体字段标签的使用、控制字段行为的标签(如 `omitempty` 和 `-`)、处理 `map` 和切片、嵌套结构体序列化、反序列化未知结构(使用 `map[string]interface{}`)以及 JSON 数组的解析。最后通过表格总结了序列化与反序列化的方法及类型要求,帮助开发者快速掌握 JSON 数据处理技巧。
|
存储 Rust Go
Go nil 空结构体 空接口有什么区别?
本文介绍了Go语言中的`nil`、空结构体和空接口的区别。`nil`是预定义的零值变量,适用于指针、管道等类型;空结构体大小为0,多个空结构体实例指向同一地址;空接口由`_type`和`data`字段组成,仅当两者均为`nil`时,空接口才为`nil`。
338 1
Go nil 空结构体 空接口有什么区别?
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
542 7
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
457 4
|
编译器 Go
探索 Go 语言中的内存对齐:为什么结构体大小会有所不同?
在 Go 语言中,内存对齐是优化内存访问速度的重要概念。通过调整数据在内存中的位置,编译器确保不同类型的数据能够高效访问。本文通过示例代码展示了两个结构体 `A` 和 `B`,尽管字段相同但排列不同,导致内存占用分别为 40 字节和 48 字节。通过分析内存布局,解释了内存对齐的原因,并提供了优化结构体字段顺序的方法,以减少内存填充,提高性能。
225 3
Go to Learn Go之结构体
Go to Learn Go之结构体
174 5

热门文章

最新文章