type
status
date
slug
summary
tags
category
icon
password
AI summary

Go语言基础之结构体


1. 什么是结构体

结构体 (简称为 struct)是 Go 语言中的一种备有不同数据类型的字段集合。结构体可以作为一个备有复杂数据结构的类型。结构体相当于 C/C++ 语言中的结构。
结构体通常用来描述对象的属性。比如一个人属于的姓名,年龄和地址等。
语法格式:

2. 结构体的基本用法

2.1 结构体的声明

为了定义一个结构体,需要使用 type关键字,然后给出结构体的名称。
例子:
输出结果:

2.2 结构体的初始化

结构体可以通过不同方式来初始化:

方式一: 用结构体字段名进行初始化

方式二: 直接指定值的顺序

方式三: 用构造函数

经常使用构造函数来初始化结构体:

3. 指针与结构体

结构体可以被指针指向以提高性能:
例子:
输出结果:
注意:当指针指向结构体时,可以直接使用 p.Name这种访问方式,而不需要写 (*p).Name

4. 类型别名和自定义类型

类型别名

在Go语言中,类型别名用于给存在类型起一个别名,本质上仍是原始类型,但可以通过别名应用在不同场景。
语法格式:
例子:
输出:

自定义类型

自定义类型在Go中通常用于创建更复杂的数据结构,这通常使用 结构体实现。
例子:
输出:

5. 结构体嵌套

Go语言中的结构体支持内嵌叠合,即在一个结构体中嵌套另一个结构体,以实现嵌套关系。
例子:
输出:

6. 结构体中的“继承”

在Go中,实现继承一般是通过结构体内嵌来实现的。嵌套的结构体直接访问基底结构体中的字段和方法。
例子:
输出:

7. 结构体作为方法的出参和接收者

结构体可以作为方法的接收者,这样可以将方法定义在结构体上,实现涉及结构体属性的操作。
例子:
输出:

8. 总结

  1. 类型别名:给存在类型起别名,便于阅读和使用。
  1. 自定义类型:通过结构体定义复杂数据结构。
  1. 嵌套结构体:在结构体中嵌套其他结构体,实现嵌套关系和“继承”。
  1. 接收者方法:结构体可以作为方法的接收者,实现对结构体属性的操作。

9. 重要特性

  1. 字段名大写:结构体中的字段如果是大写字段名,则可以被其他包访问。
  1. 字段的默认值:字段如果未赋值,则会赋值为字段类型的默认值。
  1. 内嵌结构体:一个结构体可以内嵌另一个结构体,实现层级化数据。

10. 总结

  • 结构体是用来描述复杂数据结构的工具,能完美表示对象。
  • 了解如何初始化结构体对象、指针使用结构体,以及内嵌结构体。
  • 通过结构体提升应用程序的深度模型和可维护性。

练习题

  1. 定义一个结构体用于表示一个图书信息,属性包括名称(字符串)、价格(浮点类型)和作者(字符串)。完成一个初始化且输出的程序。
  1. 在结构体中定义内嵌结构体,创建一个“学生”对象,属性包括姓名和学位信息(内嵌结构体)。
  1. 通过指针操作结构体,完成修改结构体字段值的操作。
 
指针