Вебинар: Безопасная разработка и сертификация: практика, инструменты, перспективы - 03.12
Анализатор обнаружил метод, который изменяет поле получателя, передаваемого по значению. Такие изменения затрагивают только копию структуры и не оказывают никакого влияния на исходный объект.
Рассмотрим пример:
type Buffer struct {
data []byte
}
func (b Buffer) Append(value byte) {
b.data = append(b.data, value)
}
Метод Append объявлен с получателем Buffer, который передаётся по значению. При каждом вызове метода будет создана копия объекта, поэтому выражение b.data = append(b.data, value) только изменяет поле этой копии. После завершения работы метода исходный объект остаётся неизменным.
Если метод должен изменять объект, следует использовать получатель-указатель:
func (b *Buffer) Append(value byte) {
b.data = append(b.data, value)
}
Была ли полезна эта страница документации?