Back to questions
Касперский
Junior — Middle
146
Чем отличается использование указателя на структуру и передачей самой структуры в методе на языке программирования Go?
Companies where asked
Answer from AI
sobes.tech AI
В Go методы могут иметь приёмник либо по значению (структура), либо по указателю на структуру. Разница между ними:
-
Приёмник по значению: метод получает копию структуры. Изменения внутри метода не повлияют на оригинальный объект. Подходит, если структура небольшая и не нужно изменять состояние.
-
Приёмник по указателю: метод получает указатель на структуру, может изменять поля оригинального объекта. Также эффективнее для больших структур, так как не копируется вся структура.
Пример:
package main
import "fmt"
type User struct {
Name string
}
func (u User) RenameValue(newName string) {
u.Name = newName // изменится только копия
}
func (u *User) RenamePointer(newName string) {
u.Name = newName // изменится оригинал
}
func main() {
user := User{Name: "Alice"}
user.RenameValue("Bob")
fmt.Println(user.Name) // Alice
user.RenamePointer("Bob")
fmt.Println(user.Name) // Bob
}
Выбор зависит от задачи: если нужно изменить состояние объекта — используйте указатель, если нет — можно использовать значение.