go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型
Posted Locutus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型相关的知识,希望对你有一定的参考价值。
go的switch语句不仅可以实现数值、字符串的判断,还可以判断一个接口内保存或实现的类型。
1. 类型分支的格式
switch 接口变量.(type) {
case 类型1:
// 变量是类型1时的处理
case 类型2:
// 变量是类型2时的处理
...
default:
// 变量不是所有case中列举类型时的处理
}
接口变量:表示需要判断的接口类型变量。
类型1、类型2…:表示接口变量可能具有的类型列表,满足时,会指定case对应的分支进行处理。
2. 使用类型分支判断基本类型
把一个空接口类型interface{}的参数传递给printType函数,通过switch语句判断空接口v中包含的具体类型。
package main
import (
"fmt"
"testing"
)
func printType(v interface{}) {
switch v.(type) { // v.(type)是类型分支的典型写法,代码经过switch时,会判断空接口v中包含的具体类型,从而进行类型分支跳转
case int:
fmt.Println(v, "is int")
case string:
fmt.Println(v, "is string")
case bool:
fmt.Println(v, "is bool")
}
}
func mian() {
printType(1024)
printType("pig")
printType(true)
}
3. 使用类型分支判断接口类型
多个接口进行类型断言时,可以使用类型分支简化判断过程。
package main
import (
"fmt"
"testing"
)
// 接口实现
type Alipay struct{} // 电子支付方式
func (a *Alipay) CanUseFaceID() {} // 为Alipay添加CanUseFaceID方法,表示电子支付支持刷脸
type Cash struct{} // 现金支付方式
func (a *Cash) Stolen() {} // 为Cash类型添加Stolen方法,表示现金支付方式会出现偷窃现象
// 接口定义
type ContainCanUseFaceID interface { // 具备刷脸特性的接口
CanUseFaceID()
}
type ContainStolen interface { // 具备被偷特性的接口
Stolen()
}
// 接口调用方
func print(payMethod interface{}) { // 传入支付方式的接口
switch payMethod.(type) { // 判断一种支付方法具备哪些特性
case ContainCanUseFaceID:
fmt.Printf("%T can use faceid\\n", payMethod)
case ContainStolen:
fmt.Printf("%T may be stolen\\n", payMethod)
}
}
func main() {
print(new(Alipay))
print(new(Cash))
}
/*
*interface_test.Alipay can use faceid
*interface_test.Cash may be stolen
*/
以上是关于go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型的主要内容,如果未能解决你的问题,请参考以下文章
go语言学习笔记 — 进阶 — 接口(3.2):接口与类型的关系 —— 多个类型可以实现一个(相同)接口
go语言学习笔记 — 进阶 — 接口:空接口类型interface{} —— 能保存所有值
go语言学习笔记 — 进阶 — 接口(2.1):实现接口的条件 —— 接口的方法与实现接口的类型方法一致