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. 箭头函数,闭包函数中的this指向

    在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...

  2. 对Spring aware理解

    aware翻译过来时就是意识到,我对他的理解就是spring的感知器.是不是很诡异这个名字起得^_^ 先来看看aware接口的结构 spring提供了许多的aware,Aware.java也只是做一个 ...

  3. goweb-安装go及配置go

    安装go及配置go 安装go 写这篇博客时,我的电脑的windows已经安装过了go,用的是标准包安装,不过我的linux操作系统还没安装,可以考虑用第三方工具安装,因为看了goweb这本书,我才知道 ...

  4. Python——气象数据分析

    将对意大利北部沿海地区的气象数据进行分析与可视化.我们在实验过程中先会运用 Python 中 matplotlib 库的对数据进行图表化处理,然后调用 scikit-learn 库当中的的 SVM 库 ...

  5. python的稀疏矩阵计算

    尽量避免稀疏矩阵, 加快计算. 比如计算稀疏矩阵S的F范数 a = norm(S, 'fro'), 方法1效率比方法2高很多. 方法 1 import numpy as np a = np.linal ...

  6. Tidb go mac 上开发环境搭建

    1.安装golang 运行环境 2.安装lite ide 工具 3.安装dep 包管理工具 4.安装delve debuger 调试工具 我用的是mac hight sierra 10.13 版, 会 ...

  7. mysql创建视图和存储过程,变量

    创建视图 sql>create view 视图名 as select语句; 修改视图并添加别名 sql>create or replace view empvu10 (employee_n ...

  8. oracle 导入导出参数

  9. push 空内容push入数组会占位

    #!/usr/bin/perl use strict; use warnings; ==)?:'';my @arr; ==)?:''; '; my $line = join "|" ...

  10. Flume(三) —— 断点续传 与 事务

    断点续传 # Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe / ...