2013-07-02 16 views
13

Mam tablicę struktur.Zrozumienie listy w Go

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

Chcę przekazać tablicę f2 pól do funkcji, tak jak

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

Czy istnieje bardziej idiomatycznych sposób to zrobić? W Pythonie zrobiłbym SomeFunc([s.f2 for s in a]). W języku funkcjonalnym zrobiłbym (SomeFunc (map (lambda (s) (s.f2)) a)).

+0

(Ignorowanie nieudanej składni w twoim przykładzie): Nie. To prawie jak to robisz. W Go nie ma ani spisu, ani mapy, a pętle są bardzo idiomatyczne. –

+1

To jest kawałek struktury, a nie tablicy. W go tablice i plasterki są zupełnie inne! [Tutaj jest ostateczne źródło.] (Http://golang.org/doc/articles/slices_usage_and_internals.html) –

Odpowiedz

7

Nie, Go nie ma przymusu listy lub tym podobnego. Twój kod wygląda dobrze. W przypadku dłuższych plasterków lepiej jest przydzielić prawidłową długość za pomocą make.

+0

Ach, szkoda, nie jestem pewien, czy jasność jest warta gadatliwości w tym przypadku, ale przypuszczam, że projektanci Go znają lepiej niż ja :) –

6

Nie, szczerze, nie zrobiliby tego.

Zrozumienie map i list jest na tyle powszechne, że można je uznać za podstawowe w każdym nowoczesnym języku.

To fajny język z doskonałymi pomysłami, ale wciąż daleko mi do tego, że czuję się komfortowo i często czuję, że mój kod jest brudny, nawet jeśli jest to idiomatyczny, dobrze skonstruowany kod w sposobie robienia rzeczy.

Nadzieję na te zmiany w przyszłości.