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值.但是由于结构体内容较多,都在一行,所以希望可以格式化输出结构体 ...
 
随机推荐
- VS  发布MVC网站缺少视图解决方案
			
VS 发布MVC网站缺少视图解决方案 mvc项目发布之后会有一些视图文件缺少,不包含在发布文件中,虽然可以直接从项目文件中直接拷贝过来,但还是想知道是什么原因,发布文件好像没有找到哪里有设置这个的地 ...
 - log(m+n)找第k大
			
递归 int find_kth(vector<int>& nums1, int begin1, int size1, vector<int>& nums2, i ...
 - opencv+opencv_contrib 人脸识别和检测 python开发环境快速搭建(30分钟)图文教程
			
很多朋友为了学习python.ML(机器学习).DL(深度学习).opencv等花费了大量时间配置安装环境(一个朋友花了4天时间才配置好)各种搜索.下载.安装配置,出问题等. 市面上的配置资料很多,选 ...
 - shell+crontab 实时服务进程监控重启
			
#!/bin/sh #filename: checkProcess.sh #示例:每分钟检测httpd是否在运行,不在运行则重启 #crontab -e # 加入:*/ * * * * checkPr ...
 - 将yum源更换为阿里的源(脚本)
			
#!/bin/bash ######################################### #Function: update source #Usage: bash update_s ...
 - BZOJ3510 首都
			
题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B国将永远从这个星球消失, ...
 - [ActionScript 3.0]  使用Embed在类中嵌入字体
			
package { import flash.display.Sprite; import flash.text.Font; import flash.text.TextField; import f ...
 - spring里面的ioc的理解?
			
spring里面的ioc就是控制反转,其实现核心是DI(依赖注入),控制反转不向以前java代码里面,通过new关键字来实现创建对象,这样每段代码之间的耦合度就比较高,为了降低每个小模块之间的耦合度, ...
 - Objective-C语法基础:面向对象编程特点的总结
			
1.类的声明与实现 Objective-C类的声明要写在@interface 与 @end之间,实现要写在@implementation 与 @end之间 2.类的-方法和+方法 类的-方法即类的实例 ...
 - svn 冲突Skipped ‘inm/inm/templates‘ -- Node remains in conflict
			
svn在删除后,提交,更新操作后可能会报, svn update inm/inm -r 1586 Updating ‘inm/inm‘: Password: Skipped ‘inm/inm/temp ...