### ok-pattern
```
if t, ok := X.(T); ok == true {
// 接口變量是該類型時處理
}
```
```
package main
import "fmt"
// 創建一個結構體
type Datalist struct {
Name string
Age int
}
func main() {
// 切片
s := make([]interface{}, 3)
s[0] = 1
s[1] = "abc"
s[2] = Datalist{"Pony", 20} //結構體
// 遍歷
for index, data := range s {
if t, ok := data.(int); ok == true {
fmt.Printf("s[%d] Type = int, Value = %d\n", index, t)
}
if t, ok := data.(string); ok == true {
fmt.Printf("s[%d] Type = string, Value = %s\n", index, t)
}
if t, ok := data.(Datalist); ok == true {
fmt.Printf("s[%d] Type = Datalist, Datalist.Name = %v, Datalist.Age = %d\n", index, t.Name, t.Age)
}
}
}
結果:
s[0] Type = int, Value = 1
s[1] Type = string, Value = abc
s[2] Type = Datalist, Datalist.Name = Pony, Datalist.Age = 20
```
### switch-type
```
switch t := X.(T){
case 類型1:
//接口類型是類型1時處理
case 類型2 :
// 接口類型是類型2時處理
...
default:
//當類型不是case中所列舉的類型時處理
}
```
```
package main
import "fmt"
// 創建一個結構體
type Datalist struct {
Name string
Age int
}
func main() {
// 切片
s := make([]interface{}, 3)
s[0] = 1
s[1] = "abc"
s[2] = Datalist{"Pony", 20} //結構體
// 遍歷
for index, data := range s {
switch t := data.(type) {
case int:
fmt.Printf("s[%d] Type = int, Value = %d\n", index, t)
case string:
fmt.Printf("s[%d] Type = string, Value = %s\n", index, t)
case Datalist:
fmt.Printf("s[%d] Type = Datalist, Datalist.Name = %v, Datalist.Age = %d\n", index, t.Name, t.Age)
}
}
}
結果:
s[0] Type = int, Value = 1
s[1] Type = string, Value = abc
s[2] Type = Datalist, Datalist.Name = Pony, Datalist.Age = 20
```
- 安裝開發環境
- 安裝開發環境
- 安裝詳細教程
- 引入包
- Go語言基礎
- 基本變量與數據類型
- 變量
- 數據類型
- 指針
- 字符串
- 代碼總結
- 常量與運算符
- 常量
- 運算符
- 流程控制
- if判斷
- for循環
- switch分支
- goto跳轉
- 斐波那契數列
- Go語言內置容器
- 數組
- 切片
- 映射
- 函數
- 函數(上)
- 函數(中)
- 函數(下)
- 小節
- 包管理
- 結構體
- 結構體(上)
- 結構體(中)
- 結構體(下)
- 小節
- 錯誤處理
- 錯誤處理
- 宕機
- 錯誤應用
- 小節
- 文件操作
- 獲取目錄
- 創建和刪除目錄
- 文件基本操作(上)
- 文件基本操作(中)
- 文件基本操作(下)
- 處理JSON文件
- 接口與類型
- 接口的創建與實現
- 接口賦值
- 接口嵌入
- 空接口
- 類型斷言(1)
- 類型斷言(2)
- 小節
- 并發與通道
- goroutine協程
- runtime包
- 通道channel
- 單向通道channel
- select
- 線程同步
- 多線程的深入學習
- http編程
- http簡介
- Client和Request
- get請求
- post請求
- 模塊函數方法
- 模塊
- fmt庫,模塊
- 項目練習
- 爬蟲:高三網
- 爬蟲:快代理
- 爬蟲:快代理2
- 多線程:通道思路
- 多線程爬蟲:快代理