首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于Go中的接口类型是什么类型,有官方的说法吗?

关于Go中的接口类型是什么类型,有官方的说法吗?
EN

Stack Overflow用户
提问于 2019-08-22 16:25:21
回答 1查看 203关注 0票数 1

这是一个Go语法问题,似乎是一个愚蠢的问题,但我一直在检查Go语言规范,以找到一些官方单词或定义来定义什么类型是xxx类型,例如,什么类型是接口类型?

举个例子,我看到这样的词:

的方法集(接口类型为)是它的接口。

嵌入字段必须指定为类型名称T或指向非接口类型名称*T的指针,而且T本身可能不是指针类型。

假设是一个结构类型的T,有两种方法.

代码语言:javascript
复制
type T struct {
  a int
}
....

struct {...}这样的类型文字是一个结构类型,那么type A struct {...}中的Atype B interface{...}中的B呢?A是结构类型,B是接口类型吗?

是的,从上面对struct类型T的示例中,我可以看出,给定类型是struct类型或接口类型的定义类型(通过“类型”声明)也是结构类型或接口类型。所以A是一种结构类型,B也是一种接口类型。但这条规则的官方定义在哪里呢?

对于定义的类型,我只能找到与类型类别相关的以下内容:

类型定义创建与给定类型相同的基础类型和操作的新的、不同的类型,并将标识符绑定到它。

因此,我的理解是,定义的类型与给定类型是一个新的、不同的类型,但它们属于相同的类型类别,例如,接口类型或结构类型。然而,并没有这样的定义。

EN

回答 1

Stack Overflow用户

发布于 2019-08-22 17:02:53

接口类型是由interface关键字引入的类型,或者是type name interface定义的此类类型的名称(当然,还要加上该接口的实际需求)。

任何类型,无论它是否接口类型,都实现一个接口类型,如果它有一组适当的命名方法。也就是说,struct类型可能足以与某些接口类型一起使用。即使是非struct类型也可能足够:

代码语言:javascript
复制
type foo int
func (receiver_arg foo) method1() { ... }

类型名称foo现在实现了任何需要名为method1的方法的接口(当然,它实现了其他所需的方法)。

..。通过type关键字定义的类型是一个与给定类型不同的新类型,但它们属于同一类型类别.

是的,就是这样。使用reflect,您会发现它们具有相同的Kind。类这个词不在规范中,但它非常有用,这里的链接列举了Go中的所有基本类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57613572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档