Указатель - тип данных, который показывает, где хранится объект в памяти.
Если ты передаёшь структуру функции, а не указатель на неё(для примера возьмём Player), то по факту создаётся копия этой структуры.
Если же ты передашь адрес структуры(&Player) в функцию, то те изменения, которые происходят в функции, будут изменять тот объект, который изначально передавался.
func EditPlayer(p Player) {
p.Name = "John"
}
func EditOriginalPlayer(p *Player) {
p.Name = "John"
}
func main() {
player := Player{Name: "Bob"}
EditPlayer(player)
fmt.Print(player.Name)//"Bob" Имя не изменяется т.к. передаётся копия
EditOriginalPlayer(&player)
fmt.Print(player.Name)//"John" Имя изменилось т.к. передаётся адрес структуры т.е. "оригинал"
}