### 結構體方法
**指針類型接收者**
> **為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
- 多線程:通道思路
- 多線程爬蟲:快代理