Array Reduce 或类似的

Array Reduce or similar

我有一个数组:

const assets = [{
  type: 'X',
  value: 322.12
}, {
  type: 'X',
  value: 413.21
}]

我想要值的总和 (735,33)

在node.js中我可以使用:const sum = assets.reduce((s, val) => ( s = s + val.value), 0)

我如何在 Go 中做同样的事情?

我会 Modf()

i = 0
f = 0
for _, asset := range assets {
    integer, frac := Modf(asset.value)
    i += integer
    f += math.Round(frac*100)/100))
}
fmt.Println(i, f)

Here 是一个不完整的实现,但它让您了解为什么这是一个坏主意和非惯用的 Go:

package main

import "fmt"

type Array []int

type ReducerFn func(prev int, next int) int

func (arr Array) Reduce(fn ReducerFn, i int) int {
    prev := i
    for _, v := range arr {
        prev = fn(prev, v)
    }
    return prev
}

func main() {
    i := Array([]int{1,2,4})
    fmt.Println(i.Reduce(func(prev int, next int) int { 
        return prev + next
    }, 10))
}

由于 Go 中没有泛型,您必须为每种 return 类型创建不同的 reducer 方法,这可能非常不切实际。

另见 Francesc Campoy's talk at dotGo2015, "Functional Go?"