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. NWERC 2015

    2015-2016 Northwestern European Regional Contest (NWERC 2015) F H没做 似乎只有 B 题有点意思 D:数论分块枚举所有上取整区间,只需要 ...

  2. 17.3.13---join函数

    1-----Python中有join()和os.path.join()两个函数,具体作用如下:     join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成 ...

  3. Django路由层与视图层

    表与表之间建关系 图书管理系统为例 书籍表 出版社表 作者表 三个表之间的关系: 考虑表之间的关系:换位思考 1.书籍和出版社是一对多,外键字段建立在书籍表中 2.书籍和作者是多对多, 需要建立第三方 ...

  4. Codeforces 1293A - ConneR and the A.R.C. Markland-N

    题目大意: ConneR老师想吃东西,他现在在大楼的第s层,大楼总共有n层,但是其中有k层的餐厅关门了. 然后给了这k层关门的餐厅分别所在的楼层. 所以问ConneR老师最少得往上(或者往下)走几层楼 ...

  5. 传统方式接口测试返回值json验证

    1.返回值 2.验证方式: public void check200_N(Object obj, int ret_num) throws UnsupportedEncodingException, E ...

  6. Python运维中常用的_脚本

    前言 file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件. ...

  7. HBase单机安装及Phoenix JDBC连接

    HBase是建立在Hadoop文件系统之上的分布式面向列的数据库,它是横向扩展的.它利用了Hadoop的文件系统(HDFS)提供的容错能力. HBase提供对数据的随机实时读/写访问,可以直接HBas ...

  8. shared zone "SSL" has no equal addresses: 011F0000 vs 03460000

    在windows上配置nginx的https域名的安全证书时出现的问题. 搜索了一下,都说是因为 Nginx 缓存模块或其他使用共享缓存的模块不能在Windows Vista及以上的window上运行 ...

  9. 实战_3:新建产品配置(product)并导出项目

    产品配置Product 产品配置用于定义和管理RCP应用的多个方面特征.并支持将RCP项目导出为部署包(类似eclipse压缩包),可以直接部署到其他环境上使用. 产品配置必须新建一个 扩展名为 .p ...

  10. Create Collection Type with Class Type Constraints

    Create Collection Type with Class Type Constraints: new TypeToken<ArrayList<ClassType>>( ...