golang中级进阶(二):结构体

author author     2023-03-08     620

关键词:

参考技术A 目录

一、结构体详解

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入门到项目实战golang结构体指针

参考技术A结构体指针和普通的变量指针相同,我先来回顾一下普通变量的指针,例如:运行结果实例运行结果我们还可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址,例如:运行结果从运行结果,我们发现p_... 查看详情

golang结构体嵌套和用结构体实现模拟“继承”(代码片段)

什么是结构体嵌套一个结构体中可以嵌套包含另一个结构体或结构体指针结构体嵌套packagemainimport"fmt"//桌子结构体typetablestruct materialstring shapeint comcommon//嵌套结构体//被嵌套的结构体定义typecommonstruct yearintfuncmain() //嵌套结... 查看详情

c语言进阶——结构体总结(位段枚举公用体)

@toc⌛一、结构体1.结构的基础知识2.结构体的声明//结构体的声明structtag{member_list;}variable_list;例如描述一个学生:包括学生的姓名、学号、年龄、性别structStudent{charname[20];//姓名charid[20];//学号intage;//年龄charsex[5];//性别};//分号不... 查看详情

go语言的进阶之路-golang高级数据结构定义

...                 GO语言的进阶之路-Golang高级数据结构定义                                              作者:尹正杰版权声明:原创作品,谢绝转... 查看详情

golang学习笔记4——结构体(代码片段)

结构体格式golang中的结构体格式如下:type结构体名称struct 字段名字段类型 字段名字段类型下面定义一个结构体Point,有坐标x,y两个整型字段:typePointstruct xint yint同种类型的字段可以写在一行,如下代码:typeC... 查看详情

Golang 嵌入式结构体类型

】Golang嵌入式结构体类型【英文标题】:Golangembeddedstructtype【发布时间】:2017-12-2416:03:13【问题描述】:我有这些类型:typeValueinterfacetypeNamedValuestructNamestringValueValuetypeErrorValuestructNamedValueErrorerror我可以使用v:=NamedValueName:"fine... 查看详情

golang复制结构体

参考技术AGolang中复制结构体,可以使用赋值语句执行结果可以看出,roger跟mydog在内存中的地址不同。并且对mydog修改属性,对roger没有影响。但是注意,这里的Dog结构体中的属性,都是值类型。如果是引用类型的话,复制的是指... 查看详情

golang复制结构体

参考技术AGolang中复制结构体,可以使用赋值语句执行结果可以看出,roger跟mydog在内存中的地址不同。并且对mydog修改属性,对roger没有影响。但是注意,这里的Dog结构体中的属性,都是值类型。如果是引用类型的话,复制的是指... 查看详情

golang指针和结构体

参考技术A于c语言相同,go中也有指针和结构体的概念。指针表示变量的内存地址,结构体用来存储同一类型的数据。定义一个指针变量,将变量a的地址赋给指针变量p。这样,指针变量p也就指向了变量a所在的内容空间。new函数返... 查看详情

golang✔️走进go语言✔️第十二课结构体&切片(代码片段)

【Golang】✔️走进Go语言✔️第十二课结构体&切片概述结构体定义结构体切片切片初始化概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第12课)结构体结构体(Struct)指的是一种数据结构,由... 查看详情

golang✔️走进go语言✔️第十二课结构体&切片(代码片段)

【Golang】✔️走进Go语言✔️第十二课结构体&切片概述结构体定义结构体切片切片初始化概述Golang是一个跨平台的新生编程语言.今天小白就带大家一起携手走进Golang的世界.(第12课)结构体结构体(Struct)指的是一种数据结构,由... 查看详情

golang-利用反射给结构体赋值

由于想给一个结构体的部分成员赋值,但是有不知道具体名字,故将tag的json名字作为索引,按照json名字来一一赋值//将结构体里的成员按照json名字来赋值funcSetStructFieldByJsonName(ptrinterface{},fieldsmap[string]interface{}){logger.Debug("fields:",... 查看详情

golang中返回空结构体可以返回nil吗

参考技术A不可以,但是结构体指针可以返回nil 查看详情

golang碎片整理之结构体(代码片段)

...集合,可以用于描述一个实体对象,类似Java中的class,是golang面向对象编程的基础。结构体的概念在软件工程上的旧术语是ADT(抽象数据类型:AbstractDatetype)。在c++它也是存在,并且名字也是struct,在面向对象的编程语言中,跟一... 查看详情

结构体进阶知识struct内存对齐(笔试面试常考)(代码片段)

结构体内存对齐什么是结构体?结构体定义及声明举个例子:结构体的声明typedefstruct结构体变量的定义及初始化结构体内存对齐为什么存在内存对齐?对齐规则如何计算内存大小修改默认对齐数 什么是结构体?  ... 查看详情

golang使用匿名结构体的问题

golang允许使用匿名结构体,形如typeTeststruct  param1struct    param2string   一般在使用的时候可以直接这样初始化a:=Testparam1:structparam2stringparam2:"test",  或者b:=new(Test)b.param1.param2="test"  但今天遇到一种情况匿名结构体... 查看详情

golang之继承,多重继承(struct)

热乎的代码来了packagemainimport"fmt"/*继承一个结构体嵌到另一个结构体,称作组合匿名和组合的区别如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问匿名结构体的方法,从而实现继承如果一个struct嵌套了另一个... 查看详情

golang入门:结构体(struct)(代码片段)

...些数据。结构体的概念在C语言里很常见,被称为struct。Golang中的结构体也是struct。Go语言中没有类的概念,因此在Go中结构体有着更为重要的地位。结构体是复合类型(compositetypes),当需要定义一个类型,它由一系列属性组成,每... 查看详情