2015-07-17 12 views
8

Ist es eine gute Idee, einen eigenen Typ aus einem Stück in Golang zu erstellen?GoLang-Konventionen - Erstellen Sie benutzerdefinierte Art von Slice

Beispiel:

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 
} 

Ist es irgendwie eine Konvention in Golang zu Typen wie Trips in meinem Beispiel zu erstellen? Oder ist es besser, []Trip im gesamten Projekt zu verwenden? Irgendwelche Vor- und Nachteile?

+0

Ja, wenn Sie solche Reisen verstehen. Experten empfehlen, die Typen im Kontext des zu lösenden Problems zu benennen. –

Antwort

6

Es gibt keine Konvention, soweit mir bekannt ist. Es ist in Ordnung, einen Slice-Typ zu erstellen, wenn Sie ihn wirklich brauchen. In der Tat, wenn Sie jemals Ihre Daten sortieren möchten, ist dies so ziemlich die einzige Möglichkeit: Erstellen Sie einen Typ und definieren Sie die sort.Interface Methoden darauf.

Auch in Ihrem Beispiel ist es nicht notwendig, die Adresse Trips zu nehmen, da Slice bereits ein "dicker Zeiger" einer Art ist. So können Sie Ihre Methode zu vereinfachen:

4

Wenn dies ist, was Ihr Typ ist (eine Scheibe), ist es in Ordnung. Es bietet Ihnen einen einfachen Zugang zu den zugrunde liegenden Elementen (und ermöglicht range Iteration) und bietet zusätzliche Methoden.

Natürlich sollten Sie wahrscheinlich nur essentielle Reihe von Methoden auf diesem Typ und nicht aufgebläht es mit allem, was []Trip als Argument dauern würde. (Zum Beispiel würde ich vorschlagen, DrawTripsOnTheGlobe(t Trips) mit anstatt es als Trips' Verfahren mit.)

Zur Beruhigung Ihres Geistes gibt es viele solche Slice-Typen in Standardpaketen:

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

Verwandte Themen