Я думаю, что это будет немного очевидно после того, как оно будет вызвано мне, но сейчас следующее не щелкает.Ссылка на указатель и срез - приемник
type Stack []interface{}
func (stack *Stack) Push(x interface{}) {
*stack = append(*stack, x)
}
У меня есть тип под названием Stack, который представляет собой кусок пустых интерфейсов. Учитывая, что он пуст, метод Push удовлетворяет интерфейсу. Учитывая, что срез является ссылочным типом, почему «приемник стека» не может быть передан по значению? Более того, в приведенном выше примере приемник передается в качестве указателя, почему добавление встроенного компонента необходимо снова передать указателем?
IE почему бы не работать, учитывая, что срез является ссылочным указателем на базовый массив?
func (stack Stack) Push(x interface{}) {
stack = append(stack, x)
}
Параметр 'struct' делает его легче понять, но' size' поле здесь совершенно лишними и требует лишней работы, чтобы сохранить ее, как вы можете просто получить его с помощью len (data) '. – icza
Согласен. Это было главным образом продемонстрировать преимущество перед сырым срезом, поскольку вы можете добавить дополнительные данные по мере необходимости. – captncraig