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. 编程基础-servlet1

    1.Servelet是什么 sevlet是Server与Applet 的缩写,即服务端小程序.Sun公司提供的开发动态web资源的技术. servelet本质是java类,但遵循Servlet规范,没 ...

  2. Linux进程的引入

    1.什么是进程? (1).进程是一个动态过程而不是静态实物 (2).进程就是程序的一次运行过程,一个静态的可执行程序a.out的一次运行过程(./a.out从运行到结束)就是一个进程. (3).进程控 ...

  3. python-day3爬虫基础之下载网页

    今天主要学习了关于网页下载器的一些内容,下边做一下总结: 1.网页下载器,顾名思义,就是将URL所对应的网页以HTML的形式下载到本地,最终存储成本地文件或者还是本地内存字符串,然后进行后续的分析与处 ...

  4. 计量经济与时间序列_关于Box-Jenkins的ARMA模型的经济学意义(重要思路)

    1 很多人已经了解到AR(1)这种最简单的时间序列模型,ARMA模型包括AR模型和MA模型两个部分,这里要详细介绍Box-Jenkins模型的观念(有些资料中把ARMA模型叫做Box-Jenkins模 ...

  5. zeroc ice log4net 多进程log文件问题

    使用zeroc ice 中的icebox 的时候多服务会有多个服务实例,每个实例都要写日志文件,所以要配置多个日志文件区分开来, 类似这样  orderservice_1_20160101.log   ...

  6. day55-mysql-用户权限、修改秘密、忘记密码

    .用户权限:新创建的用户没有库,如果想让新用户访问我的库,必须给它授权才可以.我在使用的navicat要关闭新用户的连接才可以授权给它. .创建用户 '; -- 创建用户 .移除用户 drop use ...

  7. tensorflow(六)

    一.TensorBoard可视化工具 TensorBoard实现形式为web应用程序,这为提供分布式.跨系统的图形界面服务带来了便利. 1.使用流程 SummaryOps->Session--( ...

  8. 吴裕雄--天生自然python机器学习:使用Logistic回归从疝气病症预测病马的死亡率

    ,除了部分指标主观和难以测量外,该数据还存在一个问题,数据集中有 30%的值是缺失的.下面将首先介绍如何处理数据集中的数据缺失问题,然 后 再 利 用 Logistic回 归 和随机梯度上升算法来预测 ...

  9. samtools faidx

    $ samtools faidx t1.fa && echo "faidx built" $ cat t1.fa.fai scaffold332 scaffold3 ...

  10. tomcat端口占用异常

    错误记录--更改tomcat端口号方法,Several ports (8005, 8080, 8009) 2011年01月18日 01:34:00 阅读数:202700 启动Tomcat服务器报错: ...