来自 python 背景,刚从 Go 开始,我发现自己在 Go 中寻找 map() 和 reduce() 函数的等价物。我没有找到它们,所以又回到了 for 循环。例如,这是我使用的而不是 map(),其中 mapFunction 在其他地方定义:
data := make([]byte, 1024)
count, err := input.Read(data) // error handling removed from this snippet
for i:=0; i<count; i++ {
data[i] = mapFunction(data[i])
}
这就是我使用的而不是 reduce(),其中有 2 个状态变量用于跟踪 CSV 中字段的引用,因为代码在切片中的每个项目中移动:
data := make([]byte, 1024)
count, err := input.Read(data) // error handling removed from this snippet
for i:=0; i<count; i++ {
data[i], stateVariable1, stateVariable2 =
reduceFunction(data[i], stateVariable1, stateVariable2)
}
以下是我的问题:
- 是否有我错过的内置功能?
- 对每一个都使用可变切片是否合适?
- 为 map() 使用 goroutine 是个好主意吗?这是否允许将读取文件的 IO 操作与在每个项目上运行映射函数的进程解耦,从而允许并行化?
- 说 goroutine 不适合 reduce() 函数是否正确,因为 2 个状态变量是由所有前面的数据定义的,并且它必须按顺序进行。换句话说,这个顺序过程不能从并发架构中受益吗?
谢谢!
ps - 完整代码在这里:https ://github.com/dbro/csvquote/blob/go/csvquote.go