2013-07-02 2 views
13

У меня есть массив структур.Учет списка в Go

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

Я хочу, чтобы передать массив из f2 полей в зависимости, например, так

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

Есть ли более идиоматических способ сделать это? В Python я бы сделал SomeFunc([s.f2 for s in a]). В функциональном языке я бы сделал (SomeFunc (map (lambda (s) (s.f2)) a)).

+0

(Игнорирование испорченного синтаксиса в вашем примере): Нет. Это почти так, как вы это делаете. В Go нет ни понимания списка, ни карты, и циклы очень идиоматичны. –

+1

Это фрагмент структур, а не массив. В go массивы и кусочки совершенно разные! [Вот окончательный источник.] (Http://golang.org/doc/articles/slices_usage_and_internals.html) –

ответ

7

Нет, у Go нет никакого списка принуждения или тому подобного. Ваш код выглядит отлично. Для более длинных фрагментов лучше выделить соответствующую длину с помощью make.

+0

Ах, это позор, не уверенный, что ясность стоит многословия в этом случае, но я полагаю, что дизайнеры Go будут знать лучше меня :) –

6

Нет, искренне, они не будут.

Понимание карт и списков является общепринятым, чтобы считаться базовым на любом современном языке.

Это хороший язык с прекрасными идеями, но я все еще далеко от того, чтобы быть удобным, и часто, когда я чувствую, что мой код грязный, даже когда это идиоматический, хорошо структурированный код в способе «Пойти».

Надеюсь, что это изменится в будущем.

Смежные вопросы