Avatar ·

Alocação de structs na stack e heap em Go: como isso se relaciona com a coleta de lixo?

Olá a todos! Comecei a estudar Go depois de C++ e Java, e estou muito confuso sobre a alocação de memória para structs. Em C++, eu estava acostumado a controlar explicitamente se criava um objeto na stack (`MyClass obj;`) ou no heap (`MyClass* obj = new MyClass();`). Em Java, tudo está sempre no heap, e as referências na stack. Mas em Go, vejo que structs podem ser criadas como `myStruct := MyStruct{}` (aparentemente na stack) e como `myStruct := &MyStruct{}` (aparentemente no heap). Além disso, Go tem um garbage collector. Estou completamente confuso. Por exemplo, tenho este código: ```go type User struct { Name string Age int } func createUser(name string, age int) *User { u := User{Name: name, Age: age} return &u // Retornando um ponteiro para uma variável local! } ``` Em C++, isso seria um comportamento indefinido (ponteiro pendente). Em Go, funciona. Isso significa que `u` é sempre alocado no heap? Ou o compilador é inteligente e decide por conta própria? Como isso se relaciona com a coleta de lixo? Por que às vezes dizem que em Go é melhor...

No answers yet.

Faça login para deixar uma resposta

Blogs