2016-09-03 1 views
-2

Je suis en mesure de le faire:Comment os.File implémente-t-il io.Writer?

f, err := os.Create("file") 
if err != nil { 
    .... 
} 
by := bufio.NewWriter(f) 

Et ceci:

var _ io.Writer = &os.File{} 

La documentation du paquet pour os.File conduit à this source file qui ne contient une désexporter fonction d'écriture mais j'obtiens une erreur lorsque J'essaye d'implémenter une interface avec une fonction non exportée.

var _ Disease = &Scratch{} // *Scratch doesn't implement Disease have spread() want Spread() 
type Disease interface { 
    Spread() 
} 
type Scratch struct { 
    .... 
} 
func (s* Scratch) spread() { 
    .... 
} 

Que manque-t-il?

Mise à jour: os.File did need cleaning up

+1

Je ne sais pas ce que vous demandez en fait, mais 'met en œuvre os.File' [Write] (https://golang.org/src/os/file.go#L138) – tkausl

+0

Ah, ça peut être un [mauvais lien] (https://golang.org/pkg/os/#File) parce que ce lien de fichier va à [file_unix.go] (https://golang.org/src/os/file_unix.go?s=597:624#L17) pas à file.go et je n'ai pas regardé le nom de fichier de près – Sridhar

+0

Ok ce n'est pas un mauvais lien. Le type de fichier est redéfini dans plusieurs fichiers sous src/os mais les méthodes exportées sont toutes dans un fichier différent. Maintenant, la question qui se pose est de savoir comment la redéfinition dans le même paquet est autorisée? – Sridhar

Répondre