Go语言中的接口怎么使用
来源:亿速云
时间:2023-03-10 13:44:43 347浏览 收藏
你在学习Golang相关的知识吗?本文《Go语言中的接口怎么使用》,主要介绍的内容就涉及到go语言,如果你想提升自己的开发能力,就不要错过这篇文章,大家要知道编程理论基础和实战操作都是不可或缺的哦!
今天小编给大家分享一下Go语言中的接口怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
接口
在 Go
语言中,接口是一种抽象的类型,是一组方法的集合。接口存在的目的是定义规范,而规范的细节由其他对象去实现。我们来看一个例子:
import "fmt" type Person struct { Name string } func main() { person := Person{Name: "cmy"} fmt.Println(person) // {cmy} }
上述代码定义了结构体 Person
,main
函数创建了此结构体的变量 person
,然后通过 fmt
包里的 Println
函数打印这个结构体,打印结果为 {cmy}
。在此基础上,我们改造一下代码:
import "fmt" type Person struct { Name string } func (p Person) String() string { return fmt.Sprintf("name: %s", p.Name) } func main() { person := Person{Name: "cmy"} fmt.Println(person) // name: cmy }
新改造的代码里为结构体 Person
添加一个结构体方法 String() string
,方法的返回结果是对 name
进行格式化,我们再打印一下结构体,观察结果发现是 String()
方法返回的值,而不是 {cmy}
。 为什么是这样呢?这是因为 fmt.Println(T)
函数的实现细节里,会对结构体进行判断,如果结构体实现了 Stringer
接口,则会直接打印 String()
方法的返回值。以下是 Stringer 接口的代码:
type Stringer interface { String() string }
结构体实现了这个接口,也就意味着遵守这个接口所定义的规范,fmt.Println(T)
函数发现结构体有这个规范,因此就会根据规范来打印信息。基于 Stringer
接口,我们来看看接口的语法格式:
type XXX interface { // methods }
1、type
接口的声明,必须以 type
关键字开头。
2、接口名
推荐驼峰式命名法,首字母大写的方法名可以在包外访问,小写的只能在包内访问。
3、interface
接口的标识。
4、接口体
大括号里面声明规范,也就是声明方法,方法必须具有名字。
接口的实现
在 Go
语言里,接口的实现不是基于接口,而是基于方法。如果一个自定义类型拥有了某个接口的所有方法,那么这个自定义类型就实现这个接口。接口的实现在上述的例子中有所体现,Person
结构体定义了 String() string
方法,拥有了 Stringer
接口的所有方法,因此实现了 Stringer
接口。
一个自定义类型可以实现多个接口
type A interface { a() } type B interface { b() } type Person struct { Name string } func (p Person) a() { } func (p Person) b() { }
A
接口声明了 a
方法, B
接口声明了 b
方法,Person
结构体定义了 a
和 b
两个方法,因此 Person
结构体实现了 A
和 B
两个接口。
接口类型变量
一旦接口被定义,它就可以用于声明变量。
import "fmt" type A interface { } func main() { var a A fmt.Println(a) //}
如果只声明接口变量,不初始化,变量的值默认为 nil
,因为接口类型实际上是一个指针。若为接口赋初值,需要选择一个合法的值,即被赋值的基类必须实现这个接口。
空接口
在 Go
语言里面可以认为所有类型实现了空接口,因为空接口没有任何的方法。
import "fmt" type EmptyInterface interface { } func main() { var a EmptyInterface = 1 var b EmptyInterface = true var c EmptyInterface = "hello" var d EmptyInterface = 3.14 var e EmptyInterface = 'c' fmt.Println(a, b, c, d, e) // 1 true hello 3.14 99 }
所有类型都实现空接口,因此空接口变量可以被赋初值为任意类型的值或变量。
类型断言
Go
语言支持类型断言操作,通过这个操作,可以还原接口变量的右值(被赋的初值)。类型断言的语法形式通常为:
v, ok := a.(T)
如果断言成功,那么 v
的值为接口变量的值,ok
的值为 true
;如果断言失败,v
的值为 T
类型的零值,ok
的值为 false
。
类型断言变种 type switch
通过 type switch
的方式,可以判断接口变量属于哪种动态类型。
import "fmt" type EmptyInterface interface { } func main() { var a EmptyInterface = 1 switch a.(type) { case string: fmt.Println("a 的右值类型为 string") case int: fmt.Println("a 的右值类型为 int") case bool: fmt.Println("a 的右值类型为 bool") case float64: fmt.Println("a 的右值类型为 float64") } }
以上就是“Go语言中的接口怎么使用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注golang学习网行业资讯频道。
好了,本文到此结束,带大家了解了《Go语言中的接口怎么使用》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!
-
185 收藏
-
460 收藏
-
430 收藏
-
450 收藏
-
320 收藏
-
202 收藏
-
199 收藏
-
145 收藏
-
168 收藏
-
165 收藏
-
473 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习