2013-07-02 17 views
13

Ich habe eine Reihe von Strukturen.List Verständnis in Go

var a = [] struct { 
    f1 string 
    f2 string 
}{ 
    {"foo", "bar"}, 
    {"biz", "baz"}, 
} 

Ich mag, wie

var f2s []string 
for _, s := range a { 
    f2s = append.f2s(s.f2) 
} 
// f2s = {"bar", "baz"} 
SomeFunc(f2s) 

so einen Array der f2 Felder an eine Funktion zu übergeben Gibt es einen idiomatischen Weg, dies zu tun? In Python würde ich SomeFunc([s.f2 for s in a]) tun. In einer funktionalen Sprache würde ich (SomeFunc (map (lambda (s) (s.f2)) a)) tun.

+0

(Ignorieren der verpfuschten Syntax in Ihrem Beispiel): Nein. Das ist so ziemlich wie Sie es tun. In Go gibt es weder Listenverständnis noch Map, und Loops sind sehr idiomatisch. –

+1

Das ist ein Stück Struktur, kein Array. In Go sind Arrays und Slices ganz anders! [Hier ist die definitive Quelle.] (Http://golang.org/doc/articles/slices_usage_and_internals.html) –

Antwort

7

Nein, Go hat keine Listenzwang oder so ähnlich. Dein Code sieht gut aus. Bei längeren Scheiben ist es besser, die richtige Länge mit make zu versehen.

+0

Ah das ist eine Schande, nicht sicher, dass die Klarheit in diesem Fall die Ausführlichkeit wert ist, aber ich nehme an, die Go-Designer würden es wissen besser als ich :) –

6

Nein, ehrlich gesagt würden sie nicht.

Karten und Listen Verständnis ist Mainstream genug, um als grundlegend in jeder modernen Sprache angesehen werden.

Es ist eine nette Sprache mit großartigen Ideen, aber ich bin immer noch weit davon entfernt, sich wohl zu fühlen, und oft fühle ich meinen Code dreckig, selbst wenn es idiomatischer, gut strukturierter Code im Go-Modus ist.

Hoffe, dass sich dies in der Zukunft ändert.