Interface Golang接口不需要导入?
如果查看Interface Golang接口不需要导入?,interface,go,Interface,Go,如果查看文件结构,它有一个Read()和Write()函数,与io.Writer和io.Reader接口Read()和Write()函数完全相同。但是包io在文件包(未导入)中找不到。这是否意味着使用接口根本不需要导入?只要Read()定义与接口相同,就可以暗示它是io.Writer或io.Reader接口的一部分 io: os:导出的实体是常量、变量和类型。要使用它们,即引用这些导出的实体,必须使用它们的[限定]名称,而限定符是导出它们的包的基本名称。这也意味着使用此类包的导入语句。照此,在文
文件
结构,它有一个Read()
和Write()
函数,与io.Writer和io.Reader
接口Read()
和Write()
函数完全相同。但是包io
在文件
包(未导入)中找不到。这是否意味着使用接口根本不需要导入?只要Read()
定义与接口相同,就可以暗示它是io.Writer
或io.Reader
接口的一部分
io:
os:导出的实体是常量、变量和类型。要使用它们,即引用这些导出的实体,必须使用它们的[限定]名称,而限定符是导出它们的包的基本名称。这也意味着使用此类包的导入语句。照此,在文件作用域中绑定导出的实体是[严格地]显式的。无导入==无法访问导出的内容
OTOH,实现接口是隐式的:
类型实现包含其方法的任何子集的任何接口,因此可以实现几个不同的接口。例如,所有类型都实现空接口:
Packageos
不会将Packageio导入为io。Packageos
中未使用Reader
接口
类型*File
碰巧实现了io.Reader
,因为它有一个具有正确签名的Read
方法。此implements关系是隐式的,不需要也不可能进行此显式化(例如,类似于Java中的implements ISomeThing
)
您问:“这是否意味着接口根本不需要导入才能使用?”正式答案是:当然不!如果要使用io.Reader
,必须导入“io”
但是实现/满足一个接口并不是这个接口的用途:任何类型实现任何接口(甚至是未来还没有发明的接口)都只是通过使用正确的方法
interface{}