Golang教程:结构体
结构体(struct)是用户自定义的类型,它代表若干字段的集合。有些时候将多个数据看做一个整体要比单独使用这些数据更有意义,这种情况下就适合使用结构体。
比如将一个员工的 firstName, lastName 和 age 三个属性打包在一起成为一个 employee 结构就是很有意义的。
结构体的声明
type Employee struct {
firstName string
lastName string
age int
}
上面的代码片段声明了一个名为 Employee 的结构体类型,它拥有 firstName, lastName 和 age 三个字段。同一类型的多个字段可以合并到一行(用逗号分隔),并将类型放在后面。上面的结构体中 firstName 与 lastName 都是 string 类型,因此可以将它们写在一起。
type Employee struct {
firstName, lastName string
age, salary int
}
上面的结构体 Employee 是一个具名结构体(named structure),因为它创建了一个具有名字的结构体类型: Employee。我们可以定义具名结构体类型的变量。
我们也可以定义一个没有类型名称的结构体,这种结构体叫做匿名结构体(anonymous structures)。
var employee struct {
firstName, lastName string
age int
}
定义具名结构体变量
下面的程序说明了如何定义一个具名结构体 Employee 的变量。
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() { //creating structure using field names
emp1 := Employee{
firstName: "Sam",
age: ,
salary: ,
lastName: "Anderson",
} //creating structure without using field names
emp2 := Employee{"Thomas", "Paul", , } fmt.Println("Employee 1", emp1)
fmt.Println("Employee 2", emp2)
}
在上面的程序中,我们定义了一个名为 Employee 的结构体类型。我们可以通过指定字段的名称和对应的值来创建一个结构体变量,比如在第15行,我们就是通过这种方式定义了 Employee 类型的一个结构体变量 empl。这里字段名称的顺序没必要和声明结构体类型时的一致。例如这里我们将 lastName 放在了最后,程序同样正确运行。
在定义结构体变量时也可以忽略字段名称,例如在第 23 行,我们定义 emp2 时没有指定字段名称。但是通过这种方式定义的结构体变量时,字段值的顺序必须与声明结构体类型时字段的顺序保持一致。
上面的程序输出如下:
Employee {Sam Anderson }
Employee {Thomas Paul }
定义匿名结构体变量
package main import (
"fmt"
) func main() {
emp3 := struct {
firstName, lastName string
age, salary int
}{
firstName: "Andreah",
lastName: "Nikola",
age: ,
salary: ,
} fmt.Println("Employee 3", emp3)
}
在上面的程序中,第3行定义了一个 匿名结构体变量 emp3。正如我们提到的一样,这种结构体成为匿名结构体,因为它只创建了一个新的结构体变量 emp3,而没有定义新的结构体类型。
程序的输出为:
Employee {Andreah Nikola }
访问结构体中的字段
使用点 . 操作符来访问结构体中的字段。
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() {
emp6 := Employee{"Sam", "Anderson", , }
fmt.Println("First Name:", emp6.firstName)
fmt.Println("Last Name:", emp6.lastName)
fmt.Println("Age:", emp6.age)
fmt.Printf("Salary: $%d", emp6.salary)
}
在上面的程序中,通过 emp6.firstName 访问 emp6 中的字段 firstName。程序的输出为:
First Name: Sam
Last Name: Anderson
Age:
Salary: $
结构体指针
可以定义指向结构体的指针。
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() {
emp8 := &Employee{"Sam", "Anderson", , }
fmt.Println("First Name:", (*emp8).firstName)
fmt.Println("Age:", (*emp8).age)
}
在上面的程序中 emp8 是一个指向结构体 Employee 的指针。(*emp8).firstName 是访问 emp8 中 firstName 字段的语法。程序的输出为:
First Name: Sam
Age:
在 Go 中我们可以使用 emp8.firstName 替代显示解引用 (*emp8).firstName 来访问 firstName 字段。
package main import (
"fmt"
) type Employee struct {
firstName, lastName string
age, salary int
} func main() {
emp8 := &Employee{"Sam", "Anderson", , }
fmt.Println("First Name:", emp8.firstName)
fmt.Println("Age:", emp8.age)
}
在上面的程序中,我们使用了 emp8.firstName 访问 firstName,程序的输出如下:
First Name: Sam
Age:
本文摘自:https://blog.csdn.net/u011304970/article/details/75030994
Golang教程:结构体的更多相关文章
- golang | Go语言入门教程——结构体初始化与继承
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分. 在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么 ...
- Golang 入门 : 结构体(struct)
Go 通过类型别名(alias types)和结构体的形式支持用户自定义类型,或者叫定制类型.试图表示一个现实世界中的实体. 结构体由一系列命名的元素组成,这些元素又被称为字段,每个字段都有一个名称和 ...
- 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct
https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...
- Golang操作结构体、Map转化为JSON
结构体生成Json package main import ( "encoding/json" "fmt" ) type IT struct { Company ...
- golang初始化结构体数组
最近组里新项目要求用go来写,没办法只能边看文档边写代码,今天遇到郁闷的问题,查了好久最终发现居然是一个标点符号的导致的,遂纪录之 刚刚给一个接口写单元测试时想初始化一个结构体数组,然后遍历该数组并建 ...
- [Objective-C语言教程]结构体(17)
Objective-C数组可定义包含多个相同类型的数据项的变量类型,但结构体是Objective-C编程中的另一个用户定义数据类型,它可组合不同类型的数据项. 结构体用于表示记录,假设要图书馆中跟踪书 ...
- golang之结构体使用注意事项和细节
1. 结构体的所有字段在内在中是连续的 2. 结构体是用户单独定义的类型,和其它类型进行转换时需要有完全相同的字段(名字.个数和类型) 3. 结构体进行type重新定义(相当于取别名),Golang认 ...
- golang(07)结构体介绍
golang支持面向对象的设计,一般支持面向对象的语言都会有class的设计,但是golang没有class关键字,只有struct结构体.通过结构体达到类的效果,这叫做大成若缺,其用不弊. stru ...
- Golang通过结构体解析和封装XML
Golang解析和封装XML 解析XML成结构体Demo package main import ( "encoding/xml" "fmt" ) //我们通过 ...
- golang 对结构体进行格式化输出
可以使用 `return fmt.Sprintf("%+v", *conf) ` 来打印结构体,包括结构体的key值.但是由于结构体内容较多,都在一行,所以希望可以格式化输出结构体 ...
随机推荐
- djangorestframework接口文档自动生成
参考: https://blog.csdn.net/ros_donggua/article/details/81007814 pip install coreapi
- SQL Server 2008R2 附件数据库问题记录
在Sql Server 2008 R2里附加数据库时弹出xxx.mdf拒绝访问的错误 详细错误信息如下: TITLE: Microsoft SQL Server Management Studio-- ...
- python学习之路 七 :生成器、迭代器
本节重点: 掌握列表生成式.生成器.迭代器 一.生成式 现在有个需求,把[1,2,3,4,5,6,7,8,9,10]中的每个值加1. # 二逼青年版 a = [0,1,2,3,4,5,6,7,8,9 ...
- 这些混账的开源库在煞笔Windows系统上的编译方法
母语不就是用来吐槽的么!!!!!说母语我不骂人难道还用英语么!!!!!!!!!! 说什么什么开源库好的狗日的,尼玛有种先搞定编译啊卧槽!!!!!!!!! 是的!!!!!你可以吐槽老子智商低用弱智煞笔W ...
- 二十六、Nodejs 操作 MongoDb 数据库
一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...
- 代理服务器和NAT技术
一.代理服务器 所谓“代理”,就是代而劳之的意思.代理服务器就是代理网络用户去取得网络信息,形象的说:它是网络信息的中转站,使得一个网络终端和另一个网络终端不直接进行相连,代理网络用户去取得信息.主要 ...
- [ActionScript 3.0] 翻牌效果,运用语法rotationY,PerspectiveProjection
package { import com.tweener.transitions.Tweener; import flash.display.Bitmap; import flash.display. ...
- mysql 快照读MVCC
mysql的读分快照读和当前读 快照读 是指写的同时,读不阻塞,达到并发的作用 这时候的读 是 记录的历史版本,存在于undo里,当然回滚时就的也是这个undo 当执行一条update语句时,记录本身 ...
- 微信智能机器人助手,基于hook技术,自动聊天机器人
下载地址: 链接:https://pan.baidu.com/s/1N5uQ3gaG2IZu7f6EGUmBxA 提取码:md7z 复制这段内容后打开百度网盘手机App,操作更方便哦 微信智能助手说明 ...
- 浅谈SLAM的回环检测技术
什么是回环检测? 在讲解回环检测前,我们先来了解下回环的概念.在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说 ...