Я обнаружил, что следующий код в Golang работает:
type user struct {
name *string
email *string
}
func foo() (*user, error) {
var myname string
var myemail string
// Some code here to fetch myname and myemail
u := user{}
u.name = &myname
u.email = &myemail
return &u, nil
}
Я знаю, что безопасно - возвращать указатель на локальную переменную, поскольку локальная переменная переживет область действия функции, поэтому меня не беспокоит возвращение &u
из функции foo()
.
Меня интересуют следующие задания:
u.name = &myname
u.email = &myemail
Это просто случайно что компилятор Go назначает u.name
и u.email
в куче, чтобы я мог получить к нему доступ вне функции, или есть некоторая гарантия, что она всегда будет работать (через механизм анализа указателя)?
если приведенный выше код небезопасен, я бы вернулся к следующему:
u.name = new(string)
*u.name = myname
...