2013-07-09 2 views
2

당신이 File에서 살펴 경우 정확히 io.Writerio.Reader 인터페이스 Read()Write() 기능과 동일한 Read()Write() 기능이 구조체. 그러나 io 패키지는 File 패키지 (가져 오지 않음)에서 찾을 수 없습니다. 인터페이스를 사용하기 위해 가져올 필요가 전혀 없다는 뜻입니까? Read() 정의가 인터페이스와 동일하면이 인터페이스가 io.Writer 또는 io.Reader 인터페이스의 일부임을 암시 할 수 있습니까?Golang 인터페이스를 가져올 필요가 없습니다?

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

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

답변

10

패키지 : 예를 들어, 모든 유형의 빈 인터페이스를 구현합니다.

유형 *File는 올바른 서명과 함께 Read 방법을 가지고 있기 때문에 io.Reader을 구현하기 위해 발생합니다. 이 관계는 암시 적이며 구현할 필요도없고 가능하지도 않습니다. 설명집 (예 : implements ISomeThing의 Java와 같습니다.)

당신은 물었습니다 : "인터페이스를 전혀 가져 오지 않아도된다는 의미입니까?" 그리고 공식적인 대답은 : 물론 이 아니라! io.Reader을 사용하려면 import "io"해야합니다.

그러나 구현/인터페이스를 만족하는 하지이 인터페이스의 사용이다는 : 모든 유형은 인터페이스 딱 맞는 방법을함으로써 (제트를 발명되지 않은, 심지어 미래의 것들)을 구현합니다.

1

수출 실체는 상수, 변수 및 유형입니다. 그들을 사용하려면, 즉. 그런 수출 된 실재물을 언급하기 위하여는, 그들 한정자는 그들을 수출하는 포장의 기본 이름 인 그러나, 그들의 [자격이 된] 이름을 사용해야한다. 이는 또한 그러한 패키지의 import 문을 사용한다는 것을 의미합니다. IOW, 파일 범위에서 내 보낸 바인딩 된 엔터티는 [strictly] 명시 적입니다. 가져 오기 없음 == 내 보낸 항목에 액세스 할 수 없음

OTOH이 인터페이스를 구현하는 specified암시하여야한다 :

유형은 그 방법 중 일부를 포함하는 임의의 인터페이스를 구현하고 따라서 몇몇 별개의 인터페이스를 구현할 수있다. io.Reader 인터페이스 패키지 os에서 사용되지 않는 패키지 io를 가져 오지 않습니다 os

interface{} 
관련 문제