Back to questions
Senior
4
Чем отличается функция от метода в Go? В чём техническая разница с точки зрения работы с памятью?
Companies where asked
техвил
Answer from AI
sobes.tech AI
В Go функция — это независимый блок кода, который вызывается по имени и может принимать параметры и возвращать значения. Метод — это функция, связанная с конкретным типом (receiver), которая вызывается через экземпляр этого типа.
Технически метод — это функция с дополнительным неявным параметром — receiver, который может быть значением или указателем. Это влияет на работу с памятью:
- Если receiver — значение, метод получает копию объекта, изменения внутри метода не влияют на оригинал.
- Если receiver — указатель, метод работает с оригинальным объектом, изменения отражаются на нём.
Пример:
package main
import "fmt"
type Counter struct {
count int
}
// Метод с receiver по значению
func (c Counter) IncrementValue() {
c.count++
}
// Метод с receiver по указателю
func (c *Counter) IncrementPointer() {
c.count++
}
func main() {
c := Counter{count: 0}
c.IncrementValue()
fmt.Println(c.count) // 0, т.к. копия
c.IncrementPointer()
fmt.Println(c.count) // 1, т.к. изменён оригинал
}
Таким образом, метод — это функция с дополнительным параметром receiver, что влияет на передачу данных и управление памятью.