Golang将对象的元素复制到切片中

max*_*max 1 arrays go slice

有没有更好的方法将函数应用于对象的字段,然后将结果复制到新的切片?更好的我的意思是比for循环具有更好的性能.

var tmp []string
for _, value := range some_object.some_field {
    tmp = append(tmp, do_something(value))
}
Run Code Online (Sandbox Code Playgroud)

就像是:

tmp := map_copy(do_something(some_object.some_field))
Run Code Online (Sandbox Code Playgroud)

生成的切片为:

tmp[0] = do_something(some_object.some_value[0])
tmp[1] = do_something(some_object.some_value[1])
tmp[2] = do_something(some_object.some_value[2])
....
Run Code Online (Sandbox Code Playgroud)

Jim*_*imB 5

您可以添加的唯一性能增加是提前分配正确的切片容量.

您仍然可以通过从0长度切片开始添加附加值:

tmp := make([]string, 0, len(some_object.some_field))
for _, value := range some_object.some_field {
    tmp = append(tmp, do_something(value))
}
Run Code Online (Sandbox Code Playgroud)

或者直接索引切片:

tmp := make([]string, len(some_object.some_field))
for i := range some_object.some_field {
    tmp[i] = do_something(some_object.some_field[i])
}
Run Code Online (Sandbox Code Playgroud)