GO语言基础教程17——结构体-结构体字段可见和JSON
GO语言基础教程17——结构体-结构体字段可见和JSON
结构体字段的可见性
结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)。
结构体与JSON序列化与反序列化
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。JSON键值对是用来保存JS对象的一种方式,键/值对组合中的键名写在前面并用双引号""
包裹,使用冒号:
分隔,然后紧接着值;多个键值之间使用英文,
分隔。
type Student struct { ID int Gender string Name string } func main() { s := Student{ ID : 1, Gender : "男", Name " "likuis", } data,err := JSON.Marshal(s) if err != nil { fmt.println("json marshal failed") return } fmt.printf("json : %s\n",data) json1 := {ID : 1,Name : "likuis"} s1 := Student{} err := json.Unmarshal([]byte(json1),s1) if err != nil { fmt.println("json marshal failed") return } fmt.printf("json : %s\n",s1) }
结构体标签(Tag)
Tag
是结构体的元信息,可以在运行的时候通过反射的机制读取出来。 Tag
在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下
`key1:"value1" key2:"value2"`
例如我们为Student
结构体的每个字段定义json序列化时使用的Tag:
type Student struct { ID int `json:"id"` //通过指定tag实现json序列化该字段时的key Gender string //json序列化是默认使用字段名作为key name string //首字母小写为私有不能被json包访问 }
因为slice和map这两种数据类型都包含了指向底层数据的指针,因此我们在需要复制它们时要特别注意。
func (p *Person) SetDreams(dreams []string) { p.dreams = dreams } // 上面为不正确的 func (p *Person) SetDreams(dreams []string) { p.dreams = make([]string, len(dreams)) copy(p.dreams, dreams) } // 见此示例
结构体课后作业
1、使用“面向对象”的思维方式编写一个学生信息管理系统。学生有id、姓名、年龄、分数等信息 ,程序提供展示学生列表、添加学生、编辑学生信息、删除学生等功能。(数据可以用切片保存)