Объявить нарезать или кусочком?


в Golang, какая разница между var s []int и s := make([]int, 0)?

Я считаю, что обе работы, но какой из них лучше?

2 62

2 ответа:

кроме fabriziom ' s ответ, вы можете увидеть больше примеров на "Go ломтики: использование и внутренности", где используется для []int указано:

так как нулевое значение среза (nil) действует как нулевой длины среза, вы можете объявить переменную среза и затем добавить к ней в цикле:

// Filter returns a new slice holding only
// the elements of s that satisfy f()
func Filter(s []int, fn func(int) bool) []int {
    var p []int // == nil
    for _, v := range s {
        if fn(v) {
            p = append(p, v)
        }
    }
    return p
}

это означает, что для добавления к срезу вам не нужно выделять память во-первых:nil slice p int[] достаточно как ломтик, чтобы добавить.

декларации

var s []int

не выделяет память и s указывает на nil, в то время как

s := make([]int, 0)

выделяет память и s указывает на память среза с 0 элементами.

обычно первый из них более идиоматичен, если вы не знаете точный размер вашего варианта использования.