Reputation: 9041
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
}
return total / float64(len(xs))
}
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:
xs := []float64 { for ... }
allowed in slice literals?Upvotes: 3
Views: 5091
Reputation: 86168
@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)
}
Upvotes: 5
Reputation: 239781
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.
Upvotes: 9