关于Go语言中的接口类型判断问题

作为一款面向对象的编程语言,Go语言的接口同样也存在多态这项特性。任何类型,如果其实现了某个接口所定义约束的函数,那么就说该类型实现了此接口。所以,就需要判断此时这个接口变量到底是什么类型的。具体见下:

package main

import "fmt"
//定义接口
type phone interface {
	call()
}
//利用两个子类型来实现该接口(实现其方法就ok,并无类似于implament等关键字)
type apple struct{}

type nokia struct {}

func (na nokia)call()  {
	fmt.Println("this is nokia!")
}

func (ae apple)call()  {
	fmt.Println("this is apple!")
}

func main() {
	//多态的体现
	var phone1 phone = nokia{}
	var phone2 phone = apple{}
	//判断该接口到底是哪种类型的
	if value, ok := phone1.(apple); ok {
		value.call()
	}
	if value, ok := phone2.(apple); ok {
		value.call()
	}
}

输出的结果为:

this is apple!

其中关键的api为:

value, ok := obj.(struct)

obj为某种接口变量,struct为实现其接口约定的某一类型,返回两个值value以及ok。其中value为该struct类型的值,而ok是一个boolean值,如果该接口变量是该struct类型,则返回true,反之返回flase。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值