本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。
空接口的作用就是可以存储任何数据。
同理,空接口没有定义任何方法,也就是说任何接口都实现了空接口,所以空接口才能存任意数据。
空接口示例代码
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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号