 2015-11-10 14:30

# 如何在Go中分配一个浮点数？

I'm learning `Go` programming and try to test the following `average` function:

``````func average(xs []float64) float64 {
total := 0.0
for _, v := range xs {
total += v
}
}
``````

I tried to generate a slice of random float numbers by:

``````var xs []float64
for n := 0; n < 10; n++ {
xs[n] = rand.Float64()
}
``````

however, I got

``````panic: runtime error: index out of range
``````

Question:

1. How to generate a slice of random number in Golang?
2. Is expression or function call, like `xs := []float64 { for ... }` allowed in slice literals?
• 点赞
• 写回答
• 关注问题
• 收藏
• 邀请回答

#### 2条回答默认 最新

• douqie6454 2015-11-10 14:34
已采纳

Your method of generating the random numbers is fine, however `xs` is empty, and Go doesn't automatically extend slices. You could use append, however since you know the size in advance, it's most efficient to replace

``````var xs []float64
``````

with

``````xs := make([]float64, 10)
``````

which will give it the right size initially.

点赞 评论
• dtzk85937 2015-11-10 15:30

@hobbs answered the part about your error, but still your solution will give you the same array every time you run it because you are not passing a random seed. I would do something like this:

``````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)
}
``````
点赞 评论