前言
Hey,大家好呀,我是码农,星期八,上次咱们说的接口呀,还是没说完,还剩下了一些
下面就来看看叭!!
空接口含义
本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。
空接口的作用就是可以存储任何数据。
同理,空接口没有定义任何方法,也就是说任何接口都实现了空接口,所以空接口才能存任意数据。
空接口
空接口示例代码
- 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语言的接口是全部都讲完了。
接口主要分为行为接口和存储接口。
行为接口主要用在面向对象这个方向,规定父类必须有哪些动作。
空接口时为了方便存值,可以存储任意类型。
在现实中做好数据中心资源平衡需要注意哪些问题呢? 当资源在机器间达到平衡,虚...
之前给大家介绍过,利用Excel内置的SQL查询引擎,来执行查询操作。通过编写SQL查...
产品介绍 武汉利楚商务服务有限公司(以下简称“利楚扫呗”)成立于2011年,是国...
我们在选择 虚拟主机租用 或 服务器租用 时不经要考虑服务器本身的质量等问题。...
说明: 您可前往 与云服务器 CVM 对比 了解轻量应用服务器与云服务器 CVM 的区别...
操作场景 用户可以通过伸缩策略对伸缩组中的实例进行管理。本章节介绍如何创建伸...
对视频元数据的分析和使用为当前安全性方面许多令人振奋的发展奠定了基...
TOP云 (west.cn)12月1日消息,刚刚我们报道了两字母 域名 DO.COM由国外经纪公...
A Access Key 鉴权密钥(Access Key)与鉴权 ID(Access ID)共同验证 API 调用...
【51CTO.com快译】通常,人们会使用两种速度来衡量某种编程语言的优劣,即:开发...