go语言接口断言

Posted ivy-blogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言接口断言相关的知识,希望对你有一定的参考价值。

接口断言

因为空接口 interface{}没有定义任何函数,因此 Go 中所有类型都实现了空接口。当一个函数的形参是interface{},那么在函数中,需要对形参进行断言,从而得到它的真实类型。

语法格式:

// 安全类型断言

<目标类型的值>,<布尔参数> := <表达式>.( 目标类型 )

//非安全类型断言

<目标类型的值> := <表达式>.( 目标类型 )

示例代码:

package main

import "fmt"

func main() {

   var i1 interface{} = new (Student)
   s := i1.(Student) //不安全,如果断言失败,会直接panic

   fmt.Println(s)


	var i2 interface{} = new(Student)
	s, ok := i2.(Student) //安全,断言失败,也不会panic,只是ok的值为false
	if ok {
		fmt.Println(s)
	}
}

type Student struct {

}

断言其实还有另一种形式,就是用在利用 switch语句判断接口的类型。每一个case会被顺序地考虑。当命中一个case 时,就会执行 case 中的语句,因此 case 语句的顺序是很重要的,因为很有可能会有多个 case匹配的情况。

示例代码:

switch ins:=s.(type) {
	case Triangle:
		fmt.Println("三角形。。。",ins.a,ins.b,ins.c)
	case Circle:
		fmt.Println("圆形。。。。",ins.radius)
	case int:
		fmt.Println("整型数据。。")
	}

以上是关于go语言接口断言的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 接口:在接口和类型之间转换

Go语言之面向对象-多态与类型断言

go语言基础包,接口

Go-动态类型与类型断言详解(含type-switch及全部代码)

类型转换和类型断言

Golang M 2023 6 topic