Использовать фрагмент составной литерал : []int{1}
, например,
package main
import (
"fmt"
)
func main() {
var x []int
for i := 2; i < 10; i += 2 {
x = append(x, i)
}
fmt.Println(x)
x = append([]int{1}, x...)
fmt.Println(x)
}
Детская площадка: https://play.golang.org/p/Yc87gO7gJlD
Выход:
[2 4 6 8]
[1 2 4 6 8]
Однако эта более эффективная версия может выделять меньше ресурсов. Распределение необходимо только в том случае, если нет свободных резервных срезов.
package main
import (
"fmt"
)
func main() {
var x []int
for i := 2; i < 10; i += 2 {
x = append(x, i)
}
fmt.Println(x)
x = append(x, 0)
copy(x[1:], x)
x[0] = 1
fmt.Println(x)
}
Детская площадка: https://play.golang.org/p/fswXul_YfvD
Вывод:
[2 4 6 8]
[1 2 4 6 8]
Хороший код должен быть читаемым.В Go мы часто скрываем детали реализации внутри функции.Компиляторы Go оптимизируют компиляторы, небольшие простые функции (например, prependInt
) встроены.
package main
import (
"fmt"
)
func prependInt(x []int, y int) []int {
x = append(x, 0)
copy(x[1:], x)
x[0] = y
return x
}
func main() {
var x []int
for i := 2; i < 10; i += 2 {
x = append(x, i)
}
fmt.Println(len(x), cap(x), x)
x = prependInt(x, 1)
fmt.Println(len(x), cap(x), x)
}
Детская площадка: https://play.golang.org/p/wl6gvoXraKH
Вывод:
4 4 [2 4 6 8]
5 8 [1 2 4 6 8]
См. Go SliceTricks .