Например,
package main
import (
"fmt"
)
func main() {
s := make([]int, 5)
for i := range s {
s[i] = 42
}
fmt.Println(len(s), s)
}
Детская площадка: https://play.golang.org/p/GjTXruMsJ5h
Выход:
5 [42 42 42 42 42]
Некоторые тесты:
package main
import (
"fmt"
"testing"
)
func BenchmarkStack(b *testing.B) {
for N := 0; N < b.N; N++ {
s := make([]int, 5)
for i := range s {
s[i] = 42
}
}
}
func BenchmarkHeap(b *testing.B) {
var s []int
for N := 0; N < b.N; N++ {
s = make([]int, 5)
for i := range s {
s[i] = 42
}
}
}
func BenchmarkHygull(b *testing.B) {
for N := 0; N < b.N; N++ {
var s []int
for i := 0; i < 5; i++ {
s = append(s, 42)
}
}
}
Вывод:
$ go test slice42_test.go -bench=. -benchmem
BenchmarkStack-8 1000000000 2.05 ns/op 0 B/op 0 allocs/op
BenchmarkHeap-8 100000000 26.9 ns/op 48 B/op 1 allocs/op
BenchmarkHygull-8 10000000 123 ns/op 120 B/op 4 allocs/op
$
BenchmarkHygull
демонстрирует, насколько неэффективным является решение @ hygull.
«Однострочник»:
package main
import (
"fmt"
)
func newInts(n, v int) []int {
s := make([]int, n)
for i := range s {
s[i] = v
}
return s
}
func main() {
s := newInts(5, 42)
fmt.Println(len(s), s)
}
Детская площадка: https://play.golang.org/p/t8J-AjYQ72l
Вывод:
5 [42 42 42 42 42]