2013-07-09 62 views
2

如果你看看在File結構它有一個Read()Write()功能是完全一樣io.Writerio.Reader接口Read()Write()功能。但包io沒有在File包中找到(未導入)。這是否意味着接口根本不需要導入才能使用?只要Read()的定義與接口相同,那麼它就可以暗示它是接口的一部分,也就是io.Writerio.Reader接口的一部分。Golang接口不需要導入?

IO:http://golang.org/pkg/io/

OS:http://golang.org/pkg/os/

回答

10

包作爲io.Reader接口不包os使用os不會導入包io

*File類型碰巧執行io.Reader,因爲它有一個帶有正確簽名的Read方法。這實現的關係是隱含的並且既不需要也不可能使這個明確(例如像在Java中使用implements ISomeThing)。

您問:「這是否意味着接口根本不需要導入才能使用?」正式答案是:當然不是!如果你想使用io.Reader你必須import "io"

但執行/滿足的接口是一個採用此接口的:任何類型實現任何接口單單是正確的方法(甚至還沒有被髮明噴氣將來的)。

1

導出的實體是常量,變量和類型。要使用它們,即。要引用這些導出的實體,必須使用[限定]名稱,而限定符是導出它們的包的基本名稱。這也意味着使用這種包裝的進口聲明。 IOW,將文件範圍內的導出實體綁定爲[嚴格] 顯式。沒有導入==沒有訪問導出的東西。

OTOH,實現一個接口是specified

甲類型實現,其包括它的方法的任意子集的任何接口,因此可以實現幾個不同的接口。例如,所有類型都實現了空接口:

interface{}