Указатели — очень обширная и непростая тема, выходящая за рамки данного курса. В этом уроке будут рассмотрены только основы передачи указателей на аргументы в функции:
package main
import (
"fmt"
)
type User struct {
email string
password string
}
// при объявлении указываем,
// что переменная должна быть указателем.
// Для этого ставим звездочку * перед типом данных
func fillUserData(u *User, email string, pass string) {
u.email = email
u.password = pass
}
func main() {
u := User{}
// передаем указатель с помощью амперсанда
// & перед переменной
fillUserData(&u, "test@test.com", "qwerty")
fmt.Printf("points on func call %+v\n", u)
// points on func call {email:test@test.com password:qwerty}
// сразу инициализируем переменную с указателем
up := &User{}
fillUserData(up, "test@test.com", "qwerty")
fmt.Printf("points on init %+v\n", up)
// points on init {email:test@test.com password:qwerty}
}
Мапы по умолчанию передаются с указателем:
package main
import (
"fmt"
)
func main() {
m := map[string]int{}
fillMap(m)
fmt.Println(m) // map[random:1]
}
func fillMap(m map[string]int) {
m["random"] = 1
}
Разработчики, пришедшие из других языков, часто используют фразы "передача по ссылке" или "ссылка на переменную". Строго говоря, в Go нет ссылок, только указатели
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
- Статья «Как учиться и справляться с негативными мыслями»
- Статья «Ловушки обучения»
- Статья «Сложные простые задачи по программированию»
- Вебинар «Как самостоятельно учиться»