golang中级进阶(二):结构体目录
一、结构体详解
1. 结构体定义
2. 实例化结构体的7种方法
二、结构体方法
1. 结构体的方法定义
2. 结构体内自定义方法的引用
3. 任意类型添加方法
三、嵌套、继承
1. 匿名结构体
2. 结构体中可以定义任意类型的字段
3. 结构体嵌套结构体
4. 结构体嵌套匿名结构体
5. 结构体嵌套多个匿名结构体
6. 结构体继承
四、结构体和JSON相互转换
1. 结构体转化成json
2. json转化成结构体
3. 结构体标签 tag
4. 嵌套结构体和json的序列化反序列化
Golang 中没有“类”的概念,Golang 中的结构体和其他语言中的类有点相似 。和其他面向对 象语言中的类相比,Golang 中的结构体具有更高的扩展性和灵活性 。
Golang 中的基础数据类型可以表示一些事物的基本属性,但是当我们想表达一个事物的全 部或部分属性时,这时候再用单一的基本数据类型就无法满足需求了,Golang 提供了一种 自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体,英文名称 struct 。也就是我们可以通过 struct 来定义自己的类型了 。
使用 type 和 struct 关键字来定义结构体,具体代码格式如下:
type 类型名 struct {
字段名 字段类型
字段名 字段类型 …
}
其中:
? 类型名:表示自定义结构体的名称,在同一个包内不能重复 。
? 字段名:表示结构体字段名 。结构体中的字段名必须唯一 。
? 字段类型:表示结构体字段的具体类型 。
在 go 语言中,没有类的概念但是可以给类型(结构体,自定义类型)定义方法 。所谓方法 就是定义了接收者的函数 。接收者的概念就类似于其他语言中的 this 或者 self 。
方法的定义格式如下:
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
函数体
}
注意:想改变结构体内的值,必须先变成指针 。
在 Go 语言中,接收者的类型可以是任何类型,不仅仅是结构体 , 任何类型都可以拥有方法 。举个例子,我们基于内置的 int 类型使用 type 关键字可以定义新的自定义类型,然后为我们 的自定义类型添加方法 。
注意:匿名结构体中不允许出现多个重复的类型
注意:如果结构体里面有私有属性也就是小写定义的字段 , 则不会被json使用
Golang中的自定义json序列化后端开发人员跟前端对接接口go语言自定义类型的时候go语言自定义类型 , 或多或少都会面临一些沟通问题 , 比如说枚举字符的定义,比如有整形状态字段go语言自定义类型: state
通常给前端的时候 , 前段要做的是将1,2 , 3以及对应的中文释义存储为key/value的形式,key与value单看都无法知道对方的语义,
比如go语言自定义类型我只知道状态值为“1” , 是无法将其与“成功”对应起来的(当然这套状态的设计者肯定是知道的),后端通常给到前端的restful api
接口定义也是key/value的形式,这乍一看其实也没啥毛病,只要有key/value也没问题,后端定义通常会是
但数字的表现形式终归是不不太明确的,如果对状态的定义换成以下形式:
基本可以理解为中英文互译了,理解起来也会更清晰一些不是,如果这么做的话 , 后端给到前端的响应字段状态的类型就需要修改成字符器格式
后端还是要做一层字符串到整型的转换,从目的来讲,我们只是想返给前端的 state 字段是字符串而已 , 也就是在做json序列化的时候将整型与字符串做一层转换,有更优雅的做法如下所示
推荐阅读
- 儿童益智游戏答题闯关大全,儿童益智游戏答题闯关大全简单
- 新媒体运营面试如何拉新,推荐收藏!新媒体运营面试必问的5个问题
- 小米路由器靠什么赚钱的,小米路由赚钱好用吗
- 户外直播准备什么工具,户外直播准备什么工具好
- go语言设计怎么写 go语言教程
- pg279q安装插线,pg27uq接口
- 平板怎么升级ios14,平板怎么升级ios
- flutter初学简单笔记,flutter速成
- 怎么让mysql显示结果 mysql显示语句