РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
458 of 1593 menu

Value receiver

Value receiver (получатель-значение) в Go - это способ определения метода, при котором метод получает копию структуры, а не ссылку на нее. В первом параметре метода указывается переменная структуры без символа *. Такой подход гарантирует, что метод не изменит оригинальную структуру, а будет работать с ее копией.

Синтаксис

func (s StructType) MethodName() ReturnType { // тело метода }

Где s - это переменная-получатель типа StructType, а MethodName - имя метода.

Пример

Давайте создадим структуру Person с методом, который использует value receiver для вывода информации:

package main import "fmt" type Person struct { Name string Age int } // Value receiver - метод получает копию структуры func (p Person) PrintInfo() { fmt.Printf("Name: %s, Age: %d\n", p.Name, p.Age) } func main() { person := Person{Name: "John", Age: 30} person.PrintInfo() }

Результат выполнения кода:

"Name: John, Age: 30"

Пример

Продемонстрируем, что value receiver не изменяет оригинальную структуру:

package main import "fmt" type Counter struct { Value int } // Value receiver - изменение копии не влияет на оригинал func (c Counter) Increment() { c.Value++ fmt.Println("Inside method:", c.Value) } func main() { counter := Counter{Value: 5} fmt.Println("Before:", counter.Value) counter.Increment() fmt.Println("After:", counter.Value) }

Результат выполнения кода:

"Before: 5" "Inside method: 6" "After: 5"

Как видно из примера, изменение Value внутри метода не повлияло на оригинальную структуру.

Пример

Сравним поведение value receiver и pointer receiver:

package main import "fmt" type Number struct { Val int } // Value receiver func (n Number) AddValue(v int) { n.Val += v } // Pointer receiver func (n *Number) AddPointer(v int) { n.Val += v } func main() { num := Number{Val: 10} num.AddValue(5) fmt.Println("After value receiver:", num.Val) num.AddPointer(5) fmt.Println("After pointer receiver:", num.Val) }

Результат выполнения кода:

"After value receiver: 10" "After pointer receiver: 15"

Смотрите также

  • методы структур methods,
    которые позволяют добавлять поведение структурам
  • получатель-указатель pointer receiver,
    который позволяет изменять оригинальную структуру
  • сами структуры struct,
    которые объединяют связанные данные в один тип
  • доступ к полям структуры field access,
    который позволяет читать и изменять поля структуры
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить