关于Go接口继承问题的问题

boz14676 · · 1537 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

最近在学习Go语言,其中遇到了一个关于go接口继承问题,希望可以得到大家的解答。 正常继承interface的代码段如下: ```go package main import ( "fmt" ) //定义interface type VowelsFinder interface { FindVowels() []rune } type MyString string //实现接口 func (ms MyString) FindVowels() []rune { return 'ok' } func main() { name := MyString("Sam Anderson") // 类型转换 var v VowelsFinder // 定义一个接口类型的变量 v = name fmt.Printf("Vowels are %c", v.FindVowels()) } ``` 其中 `main` 方法中的 `name` 变量为 `MyString` 类型( `MyString` 的结构体函数实现了 `VowelsFinder` 接口),然后将 `name` 转换为 `VowelsFinder` 类型,说明继承完成。 但是我的疑问点是:即使不进行 `v=name`的 类型转码,变量 `name` 本来就是`VowelsFinder` 类型,已经继承完成。如下改动代码: ```go func findType(i interface{}) { switch v := i.(type) { case VowelsFinder: fmt.Println("VowelsFinder type.", v); default: fmt.Printf("unknown type\n") } } func main() { name := MyString("Sam Anderson") findType(name) // VowelsFinder type. } ``` 通过 `findType` 函数得到变量 `name` 已经是接口 `VowelsFinder` 的类型了,那么是上面main函数的代码是否实现了Go语法中标准的继承呢?

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1537 次点击  
加入收藏 微博
6 回复  |  直到 2019-07-23 18:12:52
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传