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
 */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值