Vejo alguns exemplos de código com construções como esta:
type point struct {
x, y int
}
func newPoint() *point {
return &point{10, 20}
}
Tenho experiência em C ++ e parece um erro para mim. Quais são as semânticas de tal construção? O novo ponto está alocado na pilha ou heap?
Respostas:
Go realiza análise de escape de ponteiro. Se o ponteiro escapar da pilha local, o que acontece neste caso, o objeto é alocado na pilha. Se ele não escapar da função local, o compilador estará livre para alocá-lo na pilha (embora não ofereça garantias; depende se a análise de escape do ponteiro pode provar que o ponteiro permanece local para esta função).
fonte
O Golang "A documentação afirma que é perfeitamente legal retornar um ponteiro para uma variável local." Como eu li aqui
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY
Parece que o compilador vê você retornar o endereço e apenas o coloca no heap para você. Este é um idioma comum em Go.
fonte