2014-07-02 17 views
5

W "Effective Go" Zjednoczone:Czy idiomatyczne niemającego interfejsów zwanych jak „* er”

Umownie, interfejsy jednej metody są nazywane przez nazwę metody Plus -er przyrostek lub podobnych modyfikacji do skonstruowania rzecz agent: Reader, Writer, Formatter, CloseNotifier itp

bufio.io to opakowanie zawiera:

// Reader implements buffering for an io.Reader object. 
type Reader struct { 
    buf   []byte 
    rd   io.Reader 
    r, w   int 
    err   error 
    lastByte  int 
    lastRuneSize int 
} 

Czy to jest idiomatyczne o strukturze o nazwie "* er"? Szczególnie w tym przypadku jest to struct o tej samej nazwie co io.Reader, który jest interfejsem.

+0

Nigdy nie czytałem niczego sugerującego, że 'struct's z jedną metodą powinno mieć nazwę kończącą się na' -er'. Być może w przypadku pakietu 'bufio.io' nazwa była właściwym wyborem, ponieważ była prosta i miała sens ... ale nie sądzę, że jest to konieczne. –

+1

Osobiście uważam, że będzie to mylące. przy okazji jest czytnik buforujący w stdlib. – fabrizioM

Odpowiedz

2

Jeśli nie jest to w Effective Go lub specyfikacjach, to naprawdę jest to kwestia opinii, powiedziałbym, że jest w porządku, o ile ma to sens.

Jako przykład, mają one doskonały sens, aby zostać nazwanym w ten sposób.

2

Komentarz type bufio.Reader struct są ważne:

// Reader implementuje buforowania dla obiektu io.Reader.

bufio packages adds:

to owija się io.Reader lub io.Writer obiekt, tworząc kolejny przedmiot (Reader lub Writer) które również realizuje interfejs ale zapewnia buforowanie i pomoc dla tekstowe I/O.

bufio.Reader Ponieważ nie ma żadnej dodać nową usługę, ale tylko realizuje io.Reader w buforowanej sposób, ma to sens, aby zachować nazwę i po prostu realizować funkcje: a struct wystarczy.

Z punktu widzenia użytkownika jest to Reader, który może używać wszędzie tam, gdzie wymagany jest io.Reader.

Powiązane problemy