Go中的列表理解

Nic*_*vey 14 go

我有一系列结构.

var a = [] struct {
    f1 string
    f2 string
}{
    {"foo", "bar"},
    {"biz", "baz"},
}
Run Code Online (Sandbox Code Playgroud)

我想将一个f2字段数组传递给一个函数,就像这样

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

有没有比较惯用的方法呢?在Python中,我会这样做SomeFunc([s.f2 for s in a]).用功能语言我会这样做(SomeFunc (map (lambda (s) (s.f2)) a)).

Vol*_*ker 8

不,Go没有列表强制或类似.你的代码看起来很好.对于较长的切片,使用make分配适当的长度可能更好.

  • 啊,真可惜,不确定在这种情况下的清晰度是否值得冗长,但我想 Go 设计师会比我更了解 :) (2认同)

小智 5

不,真诚地,他们不会.

地图和列表理解是主流,足以被认为是任何现代语言的基础.

这是一个很好的语言和很棒的想法,但我仍然远远不舒服,而且我常常觉得我的代码很脏,即使它是Go的做事方式的惯用,结构良好的代码.

希望这会在未来发生变化.