一篇文章带你了解Go语言基础之接口(下篇)
空接口含义
本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。
空接口的作用就是可以存储任何数据。
同理,空接口没有定义任何方法,也就是说任何接口都实现了空接口,所以空接口才能存任意数据。
空接口
空接口示例代码
package main import "fmt" func main() { //变量直接赋值为空接口 var x interface{} x = 1 x = 1.1 x = "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 main import "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语言基础之接口(下篇)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

Go语言中字符串打印的区别:使用Println与string()函数的效果差异在Go...

Go语言中使用RedisStream实现消息队列时类型转换问题在使用Go语言与Redis...

Go语言中结构体定义的两种方式:var与type关键字的差异Go语言在定义结构体时,经常会看到两种不同的写法:一�...

GoLand中自定义结构体标签不显示怎么办?在使用GoLand进行Go语言开发时,很多开发者会遇到自定义结构体标签在�...

Go语言中哪些库是大公司开发或知名开源项目?在使用Go语言进行编程时,开发者常常会遇到一些常见的需求,�...
