2015-07-17 7 views
8

È una buona idea creare il proprio tipo da una sezione in Golang?Convenzioni di GoLang: crea un tipo personalizzato dalla sezione

Esempio:

type Trip struct { 
    From string 
    To  string 
    Length int 
} 

type Trips []Trip // <-- is this a good idea? 

func (trips *Trips) TotalLength() int { 
    ret := 0 
    for _, i := range *trips { 
     ret += i.Length 
    } 

    return ret 
} 

E 'in qualche modo un convegno a Golang per creare tipi come Trips nel mio esempio? Oppure è meglio usare []Trip nell'intero progetto? Eventuali pro e contro?

+0

Sì, se capirai che tali Viaggi. Gli esperti raccomandano di nominare i tipi nel contesto del problema da risolvere. –

risposta

6

Non c'è convenzione, per quanto ne so. È giusto creare un tipo di sezione se ne hai veramente bisogno. In effetti, se si desidera ordinare i dati, questo è praticamente l'unico modo: creare un tipo e definire i metodi su di esso.

Inoltre, nel tuo esempio non è necessario prendere l'indirizzo di Trips poiché slice è già un "fat pointer" di un tipo. Quindi puoi semplificare il tuo metodo per:

func (trips Trips) TotalLength() (tl int) { 
    for _, l := range trips { 
     tl += l.Length 
    } 
    return tl 
} 
4

Se questo è il tuo tipo (una sezione), va bene. Ti offre un facile accesso agli elementi sottostanti (e consente l'iterazione range) fornendo ulteriori metodi.

Naturalmente probabilmente dovrebbe tenere solo essenziale insieme di metodi su questo tipo e non gonfiore con tutto ciò che avrebbe preso []Trip come argomento. (Per esempio vorrei suggerire avere DrawTripsOnTheGlobe(t Trips) piuttosto che come metodo di un Trips'.)

per calmare la mente ci sono un sacco di tali fetta tipi di pacchetti standard:

http://golang.org/pkg/net/#IP

http://golang.org/pkg/sort/#Float64Slice

http://golang.org/pkg/sort/#IntSlice

http://golang.org/pkg/encoding/json/#RawMessage

Problemi correlati