Я учусь и задал вопрос о некотором примере кода в документации.приемник указателя golang vs value приемник
Я узнал о приемниках указателей и приемниках значений и, насколько я понимаю, если вы хотите изменить сам объект, вам нужно использовать приемник указателя. Я читал больше о интерфейсах в go documentation и нашел этот кусок кода:
type Sequence []int
// Methods required by sort.Interface.
func (s Sequence) Len() int {
return len(s)
}
func (s Sequence) Less(i, j int) bool {
return s[i] < s[j]
}
func (s Sequence) Swap(i, j int) {
s[i], s[j] = s[j], s[i]
}
Less
и Len
метод с использованием значений приемников имеет смысл, потому что они возвращаются данными и не изменяя Sequence
состояния. Но в примере Swap
мне любопытно, почему он все еще использует приемник значений, когда он выглядит так, будто пытается изменить его состояние. Является ли это ошибкой или мое понимание того, что приемники ценности/указателя некорректны?
Спасибо заранее!
'Sequence' является ссылочным типом, поэтому функция Swap будет менять базовые значения среза. Хорошую статью о срезах можно увидеть здесь: https://blog.golang.org/go-slices-usage-and-internals – squiguy
Вы не изменяете 's'. Вы изменяете 's [i]' и 's [j]'. –