1. 结构体的定义格式

在go语言中结果的定义格式如下:

1
2
3
type structName struct {
filedList
}

列子如下:

1
2
3
4
type Person struct {
Name string
age int
}

对上上述这种方式定义的结构体有如下几种初始化的方式

  • 默认的方式, 这种方式也是零值初始化方式

    1
    p := Person{}
  • 使用字面量进行初始化

    1
    2
    p := Person{"Joe", 19} // 注意此时必须按照顺序初始化
    pp := Person{age: 19, Name: "Joe"} // 指定fieldname方式赋值,不用按照顺序

2. 匿名结构体的使用

对于匿名结构体,可以在初始化变量的时定义,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
func main() {
user := struct {
Name string
Age int
} {Name: "joe", Age: 19 } fmt.Println(user)
} 或
user := struct {
Name string
Age int
}{"jor", 10}

同样在定义结构体时,也可以使用匿名结构体, 如下:

1
2
3
4
5
6
7
8
type User struct {
Name string
Age int
Content struct { // 匿名结构体
Tel string
Email string
}
}

对于在结构体中的匿名结构体,在初始化的时候,需要如下操作:

1
2
3
4
5
6
7
func main(){
user := {Name: 大专栏  6. Go 语言中结构体的使用"joe", Age: 10} // 对于结构体中的匿名结构体只能这样初始化
user.Content.Tel = "12306"
user.Content.Email = "214639811@qq.com"
}

注意:在GO中结构体,就是某些字段的集合,是值类型的,可以进行 ==比较的,注意必须是相同类型的结构体。

3. 结构体中的匿名字段

结构体中的匿名字段,可以是GO语言内置的,也可以是自定义的类型。GO内置的类型,例子如下:

1
2
3
4
type Person struct{
string
int
}

对于这种结构体,必须按照顺序进行初始化。

1
2
3
4
func main() {
p := Person{"joe", 10}
fmt.Println(p)
}

在go中没有继承机制,自定义类型的匿名字段在go中叫做组合继承,如下

1
2
3
4
5
6
7
8
9
type human struct{
Sex string
} type Person struct{
human // 注意:匿名字段,类型名和字段名是一致的
Name string
Age int
}

对于这种结构体的初始化,按照顺序初始化,如下

1
2
3
4
func main() {
p := Person{human{Sex: "f"}, "joe", 20}
fmt.Println(p)
}

指定字段名进行初始化

1
2
3
4
5
6
7
8
9
func main() {
p := Person{Name: "joe", Age: 10, human: human{Sex: "f"}}
p := Person{Name: "joe", Age: 10, human: human{Sex: "f"}} // 注意: 对于结构体中的匿名字段,在组合的时候,将所有的字段给了结构体
p.Sex = 'm'
p.human.Sex = 'f' // 这两种方式都可以访问。
}
// 这里就一个知识点,匿名字段的类型名和字段名称一致。

对于结构体指着的使用,就不在啰嗦了。

6. Go 语言中结构体的使用的更多相关文章

  1. C语言中结构体赋值问题的讨论

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  2. C语言中结构体对齐问题

    C语言中结构体对齐问题 收藏 关于C语言中的结构体对齐问题 1,比如: struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B; ...

  3. C语言中结构体赋值问题的讨论(转载)

    今天帮师姐调一个程序的BUG,师姐的程序中有个结构体直接赋值的语句,在我印象中结构体好像是不能直接赋值的,正如数组不能直接赋值那样,我怀疑这个地方有问题,但最后证明并不是这个问题.那么就总结一下C语言 ...

  4. Go语言中结构体的使用-第2部分OOP

    1 概述 结构体的基本语法请参见:Go语言中结构体的使用-第1部分结构体.结构体除了是一个复合数据之外,还用来做面向对象编程.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. ...

  5. Go语言中结构体的使用-第1部分结构体

    1 概述 结构体是由成员构成的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性.结构体成员,也可称之为成员变量,字段,属性.属性要满足唯一性.结构体的概念在软件工程上 ...

  6. 关于C语言中结构体中的结构体成员导致的字节对齐问题

    关于结构体的字节对齐是什么,就不赘述,再此附上一篇文章,介绍字节对齐:http://www.linuxsong.org/2010/09/c-byte-alignment/ 这里的结构体字节对齐的数据类 ...

  7. C语言中结构体參数变量的传递

    [文章摘要] 在C语言中,结构体參数变量常常作为函数的參数来进行传递.但假设參数设置不当.会出现内存问题. 本文以实际的程序代码为例.具体地介绍怎样正确地使用结构体參数变量.为相关的开发工作提供了參考 ...

  8. C语言中结构体的访问方法解读

    在C语言中,对结构体的访问一般有两种常规方式:"."访问和"->"访问.那么两者有什么区别呢?对C语言有一定了解的同学应该知道,我们新建一个结构体的时候, ...

  9. c语言中结构体指针

    1.指向结构体的指针变量: C 语言中->是一个总体,它是用于指向结构体,如果我们在程序中定义了一个结构体,然后声明一个指针变量指向这个结构体.那么我们要用指针取出结构体中的数据.就要用到指向运 ...

随机推荐

  1. nginx配置文件说明(包含IP黑名单、代理反射、负载均衡的配置)

    先看下nginx配置文件整体结构 图片来源51cto 配置文件及注解: #运行用户 主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nobody账号运行 user nobody; ...

  2. windows之anaconda导入torch失败和pip install命令执行read time out

    昨天用jupyter导入torch还好好的呢,今天用就不行了,先是ImportError: DLL load failed: 找不到指定的模块.再是No such comm target regist ...

  3. 进程间数据共享 (multiprocess.Manager)

    进程间数据共享 (multiprocess.Manager) 一.进程之间的数据共享 展望未来,基于消息传递的并发编程是大势所趋 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队 ...

  4. iOS中代理属性为什么要用Weak修饰?

    一.写在前面 代理设计模式,在iOS开发过程中,是一个非常常见的设计模式,可以说用的范围非常广泛,而对初学者来讲,常常对代理的属性修饰用weak存在疑惑,因此下面就解释一下其中非常简单的道理. 二.必 ...

  5. mac词典安装

    网上下载词典文件,比如https://www.xiaomac.com/2013121204.html,将朗道词典解压放入这里. $ ls /Library/Dictionaries/ langdao- ...

  6. 14)PHP,系统错误

    E_ERROR:系统严重错误 一发生,程序立即停止执行. 该错误一般希望马上. E_WARNING:系统警告 一发生,提示错误,并继续执行. 通常该错误希望能够在“下一工作日”去处理掉(解决). E_ ...

  7. UML-6.4-用例-准则

    1.以无用户界面约束的本质风格编写用例--目标的目标(根源目标 or 意图 ,二阶思维). 比如:“登录”,脑子里不仅想到了用户名/密码/验证码这些图形,而且,更关注为啥需要登录:如“系统根据身份id ...

  8. tensorflow(四)

    tensorflow数据处理方法, 1.输入数据集 小数据集,可一次性加载到内存处理. 大数据集,一般由大量数据文件组成,因为数据集的规模太大,无法一次性加载到内存,只能每一步训练时加载数据,可以采用 ...

  9. [ZJOI2019]开关(生成函数+背包DP)

    注:以下p[i]均表示概率 设F(x)为按i次开关后到达终止状态方案数的EGF,显然F(x)=π(ep[i]x/p+(-1)s[i]e-p[i]x/p)/2,然而方案包含一些多次到达合法方案的状态,需 ...

  10. 《VSTO开发入门教程》配套资源下载

    <VSTO开发入门教程> 刘永富 著 清华大学出版社 封面截图 购书网址 京东网 淘宝网 配套资源到如下页面寻找: https://www.cnblogs.com/ryueifu-VBA/ ...