### 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
- 多线程:通道思路
- 多线程爬虫:快代理