我正在尝试使用Go语言,并且对它很陌生。我已经成功地完成了教程,现在正在编写一个小程序来评估其通常执行的操作类型的性能。我有一个很长的float32类型切片,需要将其尽可能有效地转换为float64类型的切片。除了遍历slice的元素并通过output [i] = float64(data [i])显式转换单个元素的类型外,还有没有一种方法可以用来转换整个slice而无需迭代?我曾尝试寻找解决方案,但未发现任何直接相关的内容。
Go的级别很低,这意味着迭代切片 是 最有效的方法。其他语言可能具有内置功能,但它们所做的只是遍历切片,没有迭代就无法做到。但是有一些技巧,特别是使用范围,并避免对切片进行索引,因为越界检查会产生开销。这将是最有效的:
func convertTo64(ar []float32) []float64 { newar := make([]float64, len(ar)) var v float32 var i int for i, v = range ar { newar[i] = float64(v) } return newar } slice32 := make([]float32, 1000) slice64 := convertTo64(slice32)
请注意,:=在范围循环中使用in效率不高,因为在当前版本的Go中,变量每次都被丢弃并重新创建,而不是被重用。使用range代替for i=0; i<n; i++会更有效,因为它可以节省的边界检查ar。
:=
range
for i=0; i<n; i++
ar