golang接口细节和注意事项
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | package main import "fmt" /* interface类型可以定义一组方法,但是这些不需要实现 并且interface不能包含任何变量 到某个自定义类型要使用的时候,再根据具体情况把这些方法写出来 基本语法 type 接口名 interface{ method1(参数列表)返回值列表 method2(参数列表)返回值列表 } func(t 自定义类型)method1(参数列表)返回值列表{ //方法实现 } func(t 自定义类型)method2(参数列表)返回值列表{ //方法实现 } 接口里的所有方法都没有方法体,即接口的方法都是没有实现的方法。接口体现了程序设计的多态和高内聚低耦合的思想 Golang中的接口不需要显示的实现,只要一个变量,含有接口类型中的所有方法,那么这个变量就实现这个接口 */ /* 注意事项 1.接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量 2.接口中所有的方法都没有方法体,即都是没有实现的方法 3.在golang中一个自定义类型需将某个接口的所有方法都实现,我们说这个自定义类型实现了该接口 4.只要是自定义数据类型,就可以实现接口,不仅仅是结构体类型 5.一个自定义类型可以实现多个接口 6.Golang接口中不能有任何变量 7.一个接口A可以继承多个别的接口BC,这时如果要实现A接口,也必须将BC接口的方法全部实现 8.interface类型默认是一个指针(),如果没有对interface初始化就使用,那么会输出nil 9.空接口interface{}没有任何方法,所以所有类型都实现了空接口,可以把任何一个变量赋给空接口 */ type AInterface interface { Say() } //定义A接口 type BInterface interface { Hello() } //定义B接口 type Stu struct { Name string } func (stu Stu) Say() { fmt.Println( "Stu Say()" ) } type integer int func (i integer) Say() { fmt.Println( "integer Say i=" , i) } type Monster struct { } func (monster Monster) Hello() { fmt.Println( "Monster Hello()" ) } func (monster Monster) Say() { fmt.Println( "Monster Say()" ) } type employ interface { } //空接口 func main() { var stu Stu //结构体变量,实现了Say() 实现了AInterface var a AInterface = stu a.Say() var i integer = 10 var b AInterface = i b.Say() //Monster实现了AInterface和BInterface var monster Monster var a2 AInterface = monster var b2 BInterface = monster a2.Say() b2.Hello() //任何变量都可以赋给空接口 var em employ = stu fmt.Println(em) var num1 float64 = 8.8 em = num1 fmt.Println(em) } |
__EOF__

本文作者:StarGazer
本文链接:https://www.cnblogs.com/PatrickStarGazer/p/15990127.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/PatrickStarGazer/p/15990127.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?