type
status
date
slug
summary
tags
category
icon
password
空接口interface{}没有定义任何函数,因此Golang中所有类型都实现了空接口。当一个函数的形参interface{},那么在函数中,需要对形参进行断言,从而得到它的真实类型。
在学习接口断言之前,先了解一下类型断言,其实接口断言也是在判断类型。

类型断言

类型断言可以检查i是否为nil或者为某个类型,通常有两中方式
第一种:
这个表达式可以断言一个接口对象i里不是nil,并且接口对象i存储的值的类型是T,如果断言成功,就会返回值给t,如果断言失败,就会触发 panic。这个方式常用于 switch 结构。
第二种:
这个表达式也是可以断言一个接口对象t里不是nil,并且接口对象t存储的值的类型是T,如果断言成功,就会返回其类型给t,并且此时ok的值为true,表示断言成功。
如果接口值的类型,并不是我们所断言的T,就会断言失败,但和第一种表达式不同的事,这个不会触发panic,而是将ok的值设为false,表示断言失败,此时t为T的零值。这几种方式常用于if else结构。

接口断言

if else结构接口断言

输出:
可以看到,我们的断言成功了。

switch结构接口断言

断言其实还有另一种形式,就是用在利用switch语句判断接口的类型。
每一个case会被顺序地考虑。当命中一个case时,就会执行case中的语句,因此case语句的顺序是很重要的,因为很有可能会有多个case匹配的情况。
我们再封装一个switch逻辑的接口断言函数,逻辑和之前的一模一样,只是条件语句换成了switch....case:
输出:
可以看到switch断言也正常输出了。
下面附上源代码:
 
Go语言中结构体与json映射Go接口
Serendipity
Serendipity
From CCNU
Announcement
type
status
date
slug
summary
tags
category
icon
password
本网站部署于国外服务器,国内访问较慢。多刷新或挂梯子。