### 结构体方法
**指针类型接收者**
> **为Box结构体构造了一个 User的方法,修改name的值为 Tom,接收者类型为指针**
```
package main
import "fmt"
// 定义一个结构体
type Box struct {
name string
data string
}
// 指针类型接收者
func (u *Box) User() {
u.name = "Tom"
}
func main() {
// 指针型结构体
box := &Box{
"Tony",
"学习go语言",
}
// 非指针型结构体
// box := Box{
// "Tony",
// "学习go语言",
// }
fmt.Println("name", box.name, "data", box.data)
box.User()
fmt.Println("name", box.name, "data", box.data)
}
结果:
name Tony data 学习go语言
name Tom data 学习go语言
```
**值类型接收者**
> **当接收者为值类型时,没办法像上面一样修改成员变量**
```
package main
import "fmt"
// 定义一个结构体
type Box struct {
name string
data string
}
// 指针类型接收者
func (u Box) User() {
u.name = "Tom"
}
func main() {
// 指针型结构体
box := &Box{
"Tony",
"学习go语言",
}
fmt.Println("name", box.name, "data", box.data)
box.User()
fmt.Println("name", box.name, "data", box.data)
}
结果:
name Tony data 学习go语言
name Tony data 学习go语言
```
### 结构体内嵌
```
type 结构体名1 struct {
成员变量1 类型1
成员变量2 类型2
}
type 结构体名2 struct {
结构体名1
成员变量3 类型3
}
// main()内
结构体实例 := &结构体名2{
结构体名1:结构体名1{
成员变量1:值1,
成员变量2:值2,
},
成员变量3:值3,
}
```
```
package main
import "fmt"
// 定义一个结构体
type Box struct {
name string
data string
}
type Boxs struct {
Box
age int
}
func main() {
// 指针型结构体
boxs := &Boxs{
Box: Box{
"Tony",
"学习go语言",
},
age: 10,
}
fmt.Println(boxs)
// &{{Tony 学习go语言} 10}
// 修改
boxs.age = 18
fmt.Println(boxs)
// &{{Tony 学习go语言} 18}
}
```
**内嵌匿名结构体**
```
type 结构体名1 struct {
成员变量1 类型1
成员变量2 类型2
结构体名2 struct{
成员变量3 类型3
}
}
// main() 函数内
结构体实例 := &结构体名1{
成员变量1:值1,
成员变量2:值2,
结构体名2: struct{
成员变量3 类型3
}{
成员变量3:值3,
}
}
```
```
package main
import "fmt"
// 定义一个结构体
type Box struct {
name string
data string
Boxs struct {
age int
}
}
func main() {
// 指针型结构体
box := &Box{
name: "Tony",
data: "学习go语言",
Boxs: struct {
age int
}{
age: 10,
},
}
fmt.Println(box)
// &{Tony 学习go语言 {10}}
}
```
其实也还简单,就是有点绕
- 安装开发环境
- 安装开发环境
- 安装详细教程
- 引入包
- Go语言基础
- 基本变量与数据类型
- 变量
- 数据类型
- 指针
- 字符串
- 代码总结
- 常量与运算符
- 常量
- 运算符
- 流程控制
- if判断
- for循环
- switch分支
- goto跳转
- 斐波那契数列
- Go语言内置容器
- 数组
- 切片
- 映射
- 函数
- 函数(上)
- 函数(中)
- 函数(下)
- 小节
- 包管理
- 结构体
- 结构体(上)
- 结构体(中)
- 结构体(下)
- 小节
- 错误处理
- 错误处理
- 宕机
- 错误应用
- 小节
- 文件操作
- 获取目录
- 创建和删除目录
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 处理JSON文件
- 接口与类型
- 接口的创建与实现
- 接口赋值
- 接口嵌入
- 空接口
- 类型断言(1)
- 类型断言(2)
- 小节
- 并发与通道
- goroutine协程
- runtime包
- 通道channel
- 单向通道channel
- select
- 线程同步
- 多线程的深入学习
- http编程
- http简介
- Client和Request
- get请求
- post请求
- 模块函数方法
- 模块
- fmt库,模块
- 项目练习
- 爬虫:高三网
- 爬虫:快代理
- 爬虫:快代理2
- 多线程:通道思路
- 多线程爬虫:快代理