Retorne o ponteiro para a estrutura local


85

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?


1
Uma pergunta semelhante (os links de resposta para a documentação): stackoverflow.com/questions/12098435/…
Denys Séguret

@DenysSéguret não é semelhante
mangusta

Respostas:


109

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).


13
Aqui está uma postagem de blog (isenção de responsabilidade: que eu escrevi) que examina a análise de fuga de Go um pouco mais de perto: scvalex.net/posts/29
scvalex

@LilyBallard não recebeu totalmente sua resposta. Você quer dizer que provar o fato de um ponteiro de escape é sempre possível, ao passo que provar o fato de NÃO escapar não é?
mangusta

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.