```
docs(day03): 更新第三天课程内容包含结构体和错误处理 - 在README.md中添加了Go语言函数、defer与异常、Go语言结构体的链接 - 在error目录下添加了defer与异常课件链接 - 在struct目录下完善了结构体相关文档,包括: - 添加了课件地址 - 详细介绍了数据结构概念 - 提供了结构体定义和初始化的完整示例 - 展示了结构体的使用方法和指针操作 - 新增struct/main.go文件,包含完整的结构体演示代码 ```
This commit is contained in:
parent
2e443239a1
commit
fef15daccb
@ -6,6 +6,6 @@
|
|||||||
|
|
||||||
+ [Go语言函数](./function/README.md)
|
+ [Go语言函数](./function/README.md)
|
||||||
+ [defer与异常](./error/README.md)
|
+ [defer与异常](./error/README.md)
|
||||||
+ Go语言结构体
|
+ [Go语言结构体](./struct/README.md)
|
||||||
+ Go语言指针
|
+ Go语言指针
|
||||||
+ 扩展反射与内存对齐
|
+ 扩展反射与内存对齐
|
||||||
@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
程序运行过程中,可能会有异常,比如: 输入参数错误,文件不存在,数据库连接失败等等
|
程序运行过程中,可能会有异常,比如: 输入参数错误,文件不存在,数据库连接失败等等
|
||||||
|
|
||||||
|
[defer与异常课件](https://gitee.com/infraboard/go-course/blob/master/zh-cn/base/error.md#defer%E7%9A%84%E5%BA%94%E7%94%A8)
|
||||||
|
|
||||||
## error (程序异常)
|
## error (程序异常)
|
||||||
|
|
||||||
### 处理 error
|
### 处理 error
|
||||||
|
|||||||
@ -6,26 +6,134 @@
|
|||||||
|
|
||||||
结构体就是用于解决这个问题的, 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合, 方便容量我们的任意类型的数据
|
结构体就是用于解决这个问题的, 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合, 方便容量我们的任意类型的数据
|
||||||
|
|
||||||
|
[课件地址](https://gitee.com/infraboard/go-course/blob/master/zh-cn/base/struct.md)
|
||||||
## 结构体的定义
|
|
||||||
|
|
||||||
|
|
||||||
|
## 数据结构
|
||||||
|
|
||||||
|
+ 基础数据结构: int, float, bool, string, byte(int8), rune
|
||||||
|
+ 复合数据结构: array, sice, map
|
||||||
|
|
||||||
## 指针数组(重要: 95%)
|
处理人员相关信息
|
||||||
|
```sh
|
||||||
指针数组: 创建一个数组,里面存放指针,指针指向数组的某一个元素
|
单独变量方式:
|
||||||
|
├── name (string) - 姓名
|
||||||
盒子(数组)里面的插槽,嵌套盒子(指针)的模式
|
├── age (int) - 年龄
|
||||||
|
├── gender (string) - 性别
|
||||||
|
├── weight (uint) - 体重
|
||||||
```go
|
└── favoriteColor ([]string) - 喜欢的颜色
|
||||||
type Person struct {}
|
|
||||||
|
|
||||||
//
|
|
||||||
[]*Person{}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
```go
|
||||||
|
var (
|
||||||
|
name string
|
||||||
|
age int
|
||||||
|
gender string
|
||||||
|
weight uint
|
||||||
|
favoriteColor []string
|
||||||
|
)
|
||||||
|
|
||||||
## 指针数组的拷贝
|
func handlePerson(name string, age int, gender string, weight uint, favoriteColor []string) error
|
||||||
|
```
|
||||||
|
|
||||||
|
根据业务需要自己进行 数据定义,这就是结构体(struct)
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Person struct {
|
||||||
|
Name string
|
||||||
|
Age int
|
||||||
|
Gender string
|
||||||
|
Weight uint
|
||||||
|
FavoriteColor []string
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func handlePerson(*Person) error
|
||||||
|
```
|
||||||
|
|
||||||
|
```go
|
||||||
|
// person 结构体类型的初始化
|
||||||
|
// 把struct上这些变量 赋值的过程 就叫实例化
|
||||||
|
p1 := Person{
|
||||||
|
Name: "张三",
|
||||||
|
Age: 18,
|
||||||
|
Gender: GenderMale,
|
||||||
|
Weight: 150,
|
||||||
|
FavoriteColor: []string{
|
||||||
|
"红色",
|
||||||
|
"绿色",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 声明与初始化
|
||||||
|
|
||||||
|
```go
|
||||||
|
// 定义类型(struct)
|
||||||
|
type Person struct {
|
||||||
|
Name string
|
||||||
|
Age int
|
||||||
|
Gender string
|
||||||
|
Weight uint
|
||||||
|
FavoriteColor []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// 声明并初始化
|
||||||
|
// var Person
|
||||||
|
p2 := Person{
|
||||||
|
Name: "李四",
|
||||||
|
Age: 20,
|
||||||
|
Gender: GenderFemale,
|
||||||
|
Weight: 120,
|
||||||
|
FavoriteColor: []string{
|
||||||
|
"蓝色",
|
||||||
|
"黑色",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// var *Person
|
||||||
|
p3 := &Person{
|
||||||
|
Name: "李四",
|
||||||
|
Age: 20,
|
||||||
|
Gender: GenderFemale,
|
||||||
|
Weight: 120,
|
||||||
|
FavoriteColor: []string{
|
||||||
|
"蓝色",
|
||||||
|
"黑色",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 使用结构体
|
||||||
|
|
||||||
|
可以参考map的使用方式, 或者一组带名称空间的变量
|
||||||
|
|
||||||
|
```go
|
||||||
|
// 访问结构体字段
|
||||||
|
fmt.Println(p2.age)
|
||||||
|
// 修改结构体字段
|
||||||
|
p2.age = 22
|
||||||
|
fmt.Println(p2.age)
|
||||||
|
```
|
||||||
|
|
||||||
|
## 指针
|
||||||
|
|
||||||
|
自动解开引用
|
||||||
|
```go
|
||||||
|
// ChangePersonAge 修改Person的年龄
|
||||||
|
func ChangePersonAge(p *Person, newAge int) {
|
||||||
|
// 自动解开引用(*p)
|
||||||
|
// * -> 解引用(Unbox)
|
||||||
|
// (*p).age = newAge
|
||||||
|
// p 指针类型, 自动解引用
|
||||||
|
// . 访问字段
|
||||||
|
// 自动解引用
|
||||||
|
// p.age == (*p).age
|
||||||
|
// 所以可以直接写成下面这样
|
||||||
|
p.age = newAge
|
||||||
|
}
|
||||||
|
|
||||||
|
// func ChangeAge(age *int, newAge int) {
|
||||||
|
// *age = newAge
|
||||||
|
// }
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
94
day03/struct/main.go
Normal file
94
day03/struct/main.go
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
// slice 类型的初始化
|
||||||
|
arr := []int{1, 2, 3}
|
||||||
|
fmt.Println(arr)
|
||||||
|
|
||||||
|
// map类型的初始化
|
||||||
|
m1 := map[string]int{
|
||||||
|
"张三": 18,
|
||||||
|
"李四": 20,
|
||||||
|
}
|
||||||
|
fmt.Println(m1)
|
||||||
|
|
||||||
|
// person 结构体类型的初始化
|
||||||
|
p1 := Person{
|
||||||
|
Name: "张三",
|
||||||
|
age: 18,
|
||||||
|
Gender: GenderMale,
|
||||||
|
Weight: 150,
|
||||||
|
FavoriteColor: []string{
|
||||||
|
"红色",
|
||||||
|
"绿色",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
fmt.Println(p1)
|
||||||
|
|
||||||
|
p2 := Person{
|
||||||
|
Name: "李四",
|
||||||
|
age: 20,
|
||||||
|
Gender: GenderFemale,
|
||||||
|
Weight: 120,
|
||||||
|
FavoriteColor: []string{
|
||||||
|
"蓝色",
|
||||||
|
"黑色",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
// p3 := Person{}
|
||||||
|
// p3 := new(Person)
|
||||||
|
fmt.Println(p2)
|
||||||
|
|
||||||
|
// 访问结构体字段
|
||||||
|
fmt.Println(p2.age)
|
||||||
|
// 修改结构体字段
|
||||||
|
p2.age = 22
|
||||||
|
fmt.Println(p2.age)
|
||||||
|
|
||||||
|
ChangePersonAge(&p2, 30)
|
||||||
|
fmt.Println("ChangePersonAge", p2.age)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Person 是一个表示人的结构体,包含姓名、年龄、性别、体重和喜欢的颜色等字段。
|
||||||
|
// 也是一个复合数据类型。
|
||||||
|
type Person struct {
|
||||||
|
Name string
|
||||||
|
// 不对外暴露的字段
|
||||||
|
age int
|
||||||
|
Gender Gender
|
||||||
|
Weight uint
|
||||||
|
FavoriteColor []string
|
||||||
|
}
|
||||||
|
|
||||||
|
// GenderXXX 表示枚举值
|
||||||
|
// Gender 是一种自定义类型,底层类型是 int
|
||||||
|
// Gender != int
|
||||||
|
type Gender int
|
||||||
|
|
||||||
|
// Sex == Gender
|
||||||
|
type Sex = Gender
|
||||||
|
|
||||||
|
const (
|
||||||
|
GenderMale Gender = iota
|
||||||
|
GenderFemale
|
||||||
|
)
|
||||||
|
|
||||||
|
// ChangePersonAge 修改Person的年龄
|
||||||
|
func ChangePersonAge(p *Person, newAge int) {
|
||||||
|
// 自动解开引用(*p)
|
||||||
|
// * -> 解引用(Unbox)
|
||||||
|
// (*p).age = newAge
|
||||||
|
// p 指针类型, 自动解引用
|
||||||
|
// . 访问字段
|
||||||
|
// 自动解引用
|
||||||
|
// p.age == (*p).age
|
||||||
|
// 所以可以直接写成下面这样
|
||||||
|
p.age = newAge
|
||||||
|
}
|
||||||
|
|
||||||
|
// func ChangeAge(age *int, newAge int) {
|
||||||
|
// *age = newAge
|
||||||
|
// }
|
||||||
Loading…
x
Reference in New Issue
Block a user