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,实现接口是隐式的:

类型实现包含其方法的任何子集的任何接口,因此可以实现几个不同的接口。例如,所有类型都实现空接口:


Package
os
不会将Package
io导入为
io。Package
os
中未使用Reader
接口

类型
*File
碰巧实现了
io.Reader
,因为它有一个具有正确签名的
Read
方法。此implements关系是隐式的,不需要也不可能进行此显式化(例如,类似于Java中的
implements ISomeThing

您问:“这是否意味着接口根本不需要导入才能使用?”正式答案是:当然不!如果要使用
io.Reader
,必须
导入“io”

但是实现/满足一个接口并不是这个接口的用途:任何类型实现任何接口(甚至是未来还没有发明的接口)都只是通过使用正确的方法

interface{}