一篇文章带你了解Go语言基础之接口(下篇)
mb6066e504cce6f · · 507 次点击 · · 开始浏览前言
Hey,大家好呀,我是码农,星期八,上次咱们说的接口呀,还是没说完,还剩下了一些
下面就来看看叭!!
空接口含义
本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。
空接口的作用就是可以存储任何数据。
同理,空接口没有定义任何方法,也就是说任何接口都实现了空接口,所以空接口才能存任意数据。
空接口
空接口示例代码
package mainimport "fmt"func main() {//变量直接赋值为空接口var x interface{}x = 1x = 1.1x = "666"x = [3]int{1, 2, 3} //数组x = []int{6, 23} //切片x = map[string]string{"Name": "张三","Age": "666",}fmt.Println(x)//map中value类型为空接口var y = map[string]interface{}{"Name":"张三","Age":18,}fmt.Println(y)}
执行结果
图片
空接口确实是可以存储任何数据的,并且是直接可以使用的。
空接口在函数中的应用
不知道你有没有想过,如果函数的参数,也是一个空接口,那不是就可以随便传值了吗?
我还用个毛静态类型,以后都用空接口得了,嗯。。。这个按下不表,等会说。
函数参数为空接口代码
package mainimport "fmt"func say(x interface{}) {fmt.Println(x)}func main() {say(1)say("666")say([]int{5, 1, 3})}
确实是如上述所说,函数参数为空接口类类型,的确可以传任何数据。
但是仅限打印时可以随便打印。
假设我想让传入的值+1。
func say(x interface{}) { fmt.Println(x) fmt.Println(x+1)}报错信息
图片
所以说,空接口并不是万能的。
类型断言
上述函数虽然可以接收任意类型。
但是我有个需求。
如果传入的是int类型,参数+100。
如果传入的是字符串类型,参数+"666"。
如果传入的是其他类型,返回不存在。
这该怎么办呢?这就要用到断言这个功能。
断言语法
空接口.(类型)
示例代码
func say(x interface{}) { value, ok := x.(int) if ok { //如果是ok表示断言成功,是int类型 fmt.Println(value + 100)} value2, ok := x.(string) if ok { //断言成功表示是字符串 fmt.Println(value2 + "666") }}如果说有很多类型,断言起来比较麻烦,这时候用switch比较好。
func say(x interface{}) { switch value := x.(type) { case int: fmt.Println(value + 10) case string: fmt.Println(value + "666") default: fmt.Println("啥都不是") }}//case可以继续写,可以写很多很多执行结果
图片
总结
到此为止,Go语言的接口是全部都讲完了。
接口主要分为行为接口和存储接口。
行为接口主要用在面向对象这个方向,规定父类必须有哪些动作。
空接口时为了方便存值,可以存储任意类型。
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
加油!!!我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
前言
Hey,大家好呀,我是码农,星期八,上次咱们说的接口呀,还是没说完,还剩下了一些
下面就来看看叭!!
空接口含义
本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。
空接口的作用就是可以存储任何数据。
同理,空接口没有定义任何方法,也就是说任何接口都实现了空接口,所以空接口才能存任意数据。
空接口
空接口示例代码
package mainimport "fmt"func main() {//变量直接赋值为空接口var x interface{}x = 1x = 1.1x = "666"x = [3]int{1, 2, 3} //数组x = []int{6, 23} //切片x = map[string]string{"Name": "张三","Age": "666",}fmt.Println(x)//map中value类型为空接口var y = map[string]interface{}{"Name":"张三","Age":18,}fmt.Println(y)}
执行结果
图片
空接口确实是可以存储任何数据的,并且是直接可以使用的。
空接口在函数中的应用
不知道你有没有想过,如果函数的参数,也是一个空接口,那不是就可以随便传值了吗?
我还用个毛静态类型,以后都用空接口得了,嗯。。。这个按下不表,等会说。
函数参数为空接口代码
package mainimport "fmt"func say(x interface{}) {fmt.Println(x)}func main() {say(1)say("666")say([]int{5, 1, 3})}
确实是如上述所说,函数参数为空接口类类型,的确可以传任何数据。
但是仅限打印时可以随便打印。
假设我想让传入的值+1。
func say(x interface{}) { fmt.Println(x) fmt.Println(x+1)}报错信息
图片
所以说,空接口并不是万能的。
类型断言
上述函数虽然可以接收任意类型。
但是我有个需求。
如果传入的是int类型,参数+100。
如果传入的是字符串类型,参数+"666"。
如果传入的是其他类型,返回不存在。
这该怎么办呢?这就要用到断言这个功能。
断言语法
空接口.(类型)
示例代码
func say(x interface{}) { value, ok := x.(int) if ok { //如果是ok表示断言成功,是int类型 fmt.Println(value + 100)} value2, ok := x.(string) if ok { //断言成功表示是字符串 fmt.Println(value2 + "666") }}如果说有很多类型,断言起来比较麻烦,这时候用switch比较好。
func say(x interface{}) { switch value := x.(type) { case int: fmt.Println(value + 10) case string: fmt.Println(value + "666") default: fmt.Println("啥都不是") }}//case可以继续写,可以写很多很多执行结果
图片
总结
到此为止,Go语言的接口是全部都讲完了。
接口主要分为行为接口和存储接口。
行为接口主要用在面向对象这个方向,规定父类必须有哪些动作。
空接口时为了方便存值,可以存储任意类型。
如果在操作过程中有任何问题,记得下面留言,我们看到会第一时间解决问题。
加油!!!我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。