Подтвердить что ты не робот

Объявить срез или сделать срез?

В Голанге в чем разница между var s []int и s := make([]int, 0)?

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

4b9b3361

Ответ 1

В дополнение к fabriziom answer вы можете увидеть больше примеров на странице Go Slices: использование и внутренние параметры ", где упоминается использование для []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[] достаточно в качестве фрагмента для добавления.

Ответ 2

Простая декларация

var s []int

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

s := make([]int, 0)

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

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