文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一篇文章带你了解Go语言基础之接口(下篇)

2024-12-03 15:37

关注

 前言

Hey,大家好呀,我是码农,星期八,上次咱们说的接口呀,还是没说完,还剩下了一些

下面就来看看叭!!

空接口含义

本篇介绍的就是存储类接口,存储接是我的命名,其实人家就叫空接口。

空接口的作用就是可以存储任何数据。

同理,空接口没有定义任何方法,也就是说任何接口都实现了空接口,所以空接口才能存任意数据。

空接口

空接口示例代码

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     //变量直接赋值为空接口 
  7.     var x interface{} 
  8.     x = 1 
  9.     x = 1.1 
  10.     x = "666" 
  11.     x = [3]int{1, 2, 3} //数组 
  12.     x = []int{6, 23}    //切片 
  13.     x = map[string]string{ 
  14.         "Name""张三", 
  15.         "Age":  "666", 
  16.     fmt.Println(x) 
  17.     //map中value类型为空接口 
  18.     var y = map[string]interface{}{ 
  19.         "Name":"张三", 
  20.         "Age":18, 
  21.     fmt.Println(y) 

执行结果


空接口确实是可以存储任何数据的,并且是直接可以使用的。

空接口在函数中的应用

不知道你有没有想过,如果函数的参数,也是一个空接口,那不是就可以随便传值了吗?

我还用个毛静态类型,以后都用空接口得了,嗯。。。这个按下不表,等会说。

函数参数为空接口代码

  1. package main 
  2. import "fmt" 
  3.  
  4. func say(x interface{}) { 
  5.     fmt.Println(x) 
  6. func main() { 
  7.     say(1) 
  8.     say("666"
  9.     say([]int{5, 1, 3}) 

确实是如上述所说,函数参数为空接口类类型,的确可以传任何数据。

但是仅限打印时可以随便打印。

假设我想让传入的值+1。

  1. func say(x interface{}) { 
  2.     fmt.Println(x) 
  3.     fmt.Println(x+1) 

报错信息

 

所以说,空接口并不是万能的。

类型断言

上述函数虽然可以接收任意类型。

但是我有个需求。

如果传入的是int类型,参数+100。

如果传入的是字符串类型,参数+"666"。

如果传入的是其他类型,返回不存在。

这该怎么办呢?这就要用到断言这个功能。

断言语法

  1. 空接口.(类型) 

示例代码

  1. func say(x interface{}) { 
  2.     value, ok := x.(int
  3.     if ok { 
  4.         //如果是ok表示断言成功,是int类型 
  5.         fmt.Println(value + 100) 
  6.     value2, ok := x.(string) 
  7.     if ok { 
  8.         //断言成功表示是字符串 
  9.         fmt.Println(value2 + "666"
  10.   } 

如果说有很多类型,断言起来比较麻烦,这时候用switch比较好。

  1. func say(x interface{}) { 
  2.     switch value := x.(type) { 
  3.     case int
  4.         fmt.Println(value + 10) 
  5.     case string: 
  6.         fmt.Println(value + "666"
  7.     default
  8.         fmt.Println("啥都不是"
  9.   } 
  10. //case可以继续写,可以写很多很多 

执行结果


总结

到此为止,Go语言的接口是全部都讲完了。

接口主要分为行为接口和存储接口。

行为接口主要用在面向对象这个方向,规定父类必须有哪些动作。

空接口时为了方便存值,可以存储任意类型。

 

来源: Go语言进阶学习内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯