我正在学习Go
编程并尝试测试以下average
函数:
func average(xs []float64) float64 {
total := 0.0
for _, v := range xs {
total += v
}
return total / float64(len(xs))
}
我试图通过以下方式生成一片随机浮点数:
var xs []float64
for n := 0; n < 10; n++ {
xs[n] = rand.Float64()
}
然而,我得到了
panic: runtime error: index out of range
问题:
xs := []float64 { for ... }
吗?答案 0 :(得分:7)
您生成随机数的方法很好,但是xs
为空,并且Go不会自动扩展切片。您可以使用append,但由于您事先知道尺寸,因此替换效率最高
var xs []float64
与
xs := make([]float64, 10)
最初会给它正确的尺寸。
答案 1 :(得分:2)
@hobbs回答了有关您的错误的部分,但是每次运行时,您的解决方案仍会为您提供相同的数组,因为您没有传递随机种子。我会做这样的事情:
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
s := rand.NewSource(time.Now().UnixNano())
r := rand.New(s)
xn := make([]float64, 10)
for n := 0; n < 10; n++ {
xn[n] = r.Float64()
}
fmt.Println(xn)
}