Взять этот пример:
type Foo struct {
num int
}
// func NewFoo() *Foo { // returning a pointer
// return &Foo{33}
// }
func NewFoo() Foo { // NOT returning a pointer
return Foo{33}
}
func main() {
fff := NewFoo()
fmt.Printf("%d\n", fff.num)
}
Если NewFoo
возвращает указатель, я понимаю, что объект хранится в куче, а fff
получает указатель на тот же объект, выделенный в куче.
Теперь со второй реализацией NewFoo
, которая не будет возвращать указатель, Go вернет копию структуры, размещенной в стеке, или что-то вроде C ++ 'RVO происходит?