如何在Go中分配一片浮点数?

时间:2015-11-10 14:30:24

标签: go

我正在学习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

问题:

  1. 如何在Golang中生成一片随机数?
  2. 表达式或函数调用,如切片文字中允许xs := []float64 { for ... }吗?

2 个答案:

答案 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)
}