GO语言基础教程17——结构体-结构体字段可见和JSON

简介: 结构体中字段大写开头表示可公开访问,小写表示私有(仅在定义当前结构体的包中可访问)。

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、姓名、年龄、分数等信息 ,程序提供展示学生列表、添加学生、编辑学生信息、删除学生等功能。(数据可以用切片保存)

相关文章
|
8天前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
5天前
|
Go
go语言map、实现set
go语言map、实现set
12 0
|
5天前
|
Go
go语言数组与切片
go语言数组与切片
14 0
|
1天前
|
JSON 算法 测试技术
在go语言中调试程序
【6月更文挑战第29天】Go语言内置`testing`包支持单元测试、基准测试和模糊测试。`go test`命令可执行测试,如`-run`选择特定测试,`-bench`运行基准测试,`-fuzz`进行模糊测试。
12 2
在go语言中调试程序
|
7天前
|
存储 中间件 Go
在go语言服务中封装路由和示例
【6月更文挑战第23天】本文介绍golang后端按协议处理、中间件(一次性与每次请求执行)划分、以及服务架构Controller、Logic/Service、DAO/Repository和Routers划分。代码仓库在GitHub上提供。使用框架简化了交互和处理。后续章节深入探讨服务构建。
105 5
在go语言服务中封装路由和示例
|
4天前
|
Devops Go 云计算
Go语言发展现状:历史、应用、优势与挑战
Go语言发展现状:历史、应用、优势与挑战
|
5天前
|
Go
go结构体的定义
go结构体的定义
10 1
|
5天前
|
Go
go语言的hello,world
go语言的hello,world
10 1
|
8天前
|
Unix Go 开发者
探索Go语言并发模型:原理与实践
本文深入探讨了Go语言的并发模型,包括其设计原理、Goroutine和Channel的基本使用,以及如何在实际项目中高效地应用这些概念来提高程序的性能和可维护性。
|
3天前
|
编译器 Go C++
必知的技术知识:go语言快速入门教程
必知的技术知识:go语言快速入门教程