Golang 接口
2023-09-14 08:56:53 时间
结构体通过实现接口中定义的方法来实现接口。
简单入门
package main import "fmt" type Phone interface { call(name string) } type Person struct { Name string } //方法 func (p *Person) Test2(newName string) string { p.Name = newName return p.Name }
//接口 func (p Person) call(name string) string { return p.Name + "打电话给" + name } func main() { p1 := Person{"abc"} str := p1.call("xyz") fmt.Println(str) //abc打电话给xyz }
结构体赋值接口
package main import "fmt" type Person struct { Name string } type notifier interface { notice() } //实现接口 func (p Person) notice() { fmt.Println(p.Name, "noticing") } func main() { var p notifier //注意类型 p = Person{"abc"} p.notice() //abc noticing }
如果一个struct实现了interface中的所有方法,那么可以将一个struct的变量赋值给一个interface,只实现一部分方法,那么就不能赋值操作。
这个例子中,如果notifier中还有一个demo()方法,但是person没有实现这个demo(),那么在主函数中执行赋值就会出错,提示没有实现notifier的所有接口。
接口组合
package main import "fmt" type Person struct { Name string } type notifier interface { notice() } type informer interface { inform() } //type tell interface { // notifier // informer //} //或者 type tell interface { notice() inform() } func (p Person) notice() { fmt.Println(p.Name, "noticing") } func (p Person) inform() { fmt.Println(p.Name, "informing") } func main() { var p tell //注意p是组合接口的类型 p = Person{"abc"} p.notice() //abc noticing }
只要两个接口的拥有相同的方法列表,方法的次序可以不同,那么这两个接口是等价的,可以相互赋值。
所以说上面tell组合接口的两种形式是一样的。
多态
package main import "fmt" type Teacher struct { Name string } type Student struct { Name string } type notifier interface { notice() } func (t Teacher) notice() { fmt.Println(t.Name, "noticing") } func (s Student) notice() { fmt.Println(s.Name, "informing") } //sendMsg接收一个实现了notifier接口的struct func sendMsg(n notifier) { n.notice() } func main() { t := Teacher{"abx"} s := Student{"xyz"} sendMsg(t) //abx noticing sendMsg(s) //xyz informing }
其实多态最主要的就是接受的那个参数类型是一个接口类型,并且是多个结构体实现了的接口,结合前面一个示例,那么实现了接口的结构体实例可以赋值给接口类型的变量,从而调用接口中定义的方法。
这里会涉及一个空接口,因为空接口内部什么都没有,一个方法都没有,那么皆可以认为所有的结构体都实现了这个空接口。那么所有结构体都可以赋值给这个空接口的实例。
接口查询
相关文章
- spring boot:给接口增加签名验证(spring boot 2.3.1)
- 微信第三方登录接口
- C++虚函数之接口 最简单的功能
- 微信企业给用户付款接口,golang版
- Java动态代理代码案例:使用jdk自带的Proxy只能对有接口的类进行动态代理
- Java之Serializable接口实现序列化和反序列化实例以及部分序列化的四种方法
- pytest接口自动化测试框架 | 跳过模块
- Go语言自学系列 | golang接口
- 接口测试学习路线图 (上)
- 接口测试 — 接口自动化框架的发送邮件实现
- 接口响应断言神器---Json Schema
- 要做接口并发性能测试,总得先学会分析吧!
- 如何做接口测试呢?接口测试有哪些工具【小白都会系列】
- golang继承与接口
- Golang的面向对象编程【结构体、方法、继承、接口】
- msata、mini pcie 、pcie x4接口引脚定义及原理图方案设计
- C/C++编程操作Redis数据库,hiredis包装redis数据库操作接口及测试(增删改查与连接)
- Java8新特性-----接口中的默认方法和静态方法
- 【DDR3 控制器设计】(6)DDR3 的读写模块添加 FIFO 接口设计
- 从0到1实现接口自动化测试平台【1700字保姆级教程】