go语言接口的实现
接口可以很好的封装有同一类功能的方法
首先在具体实现里面定义自己的实现,这边定义了2个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | type Cat struct {} func (c *Cat) Call() { fmt.Println( "miao,miao..." ) } func (c *Cat) Eat() { fmt.Println( "fish" ) } /////// type Dog struct {} func (d *Dog) Call() { fmt.Println( "wang,wang..." ) } func (d *Dog) Eat() { fmt.Println( "meat" ) } |
然后定义接口
1 2 3 4 | type Animal interface { Call() Eat() } |
具体实现
1 2 3 4 5 6 7 8 9 | func TestReflect(t *testing.T) { d := Dog{} d.Call() d.Eat() c := Cat{} c.Call() c.Eat() } |
输出内容:
wang,wang...
meat
miao,miao...
fish
实际调用场景应该是这样的,会将多个实例放在字典映射里面,然后动态调用
1 2 3 4 5 6 7 | func TestReflect(t *testing.T) { animalMap := map [string]Animal{} animalMap[ "cat" ] = &Cat{} animalMap[ "dog" ] = &Dog{} animalMap[ "cat" ].Call() animalMap[ "cat" ].Eat() } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?