W golangu wydaje się, że nie ma konstruktorów, ale sugeruje się, aby przydzielić obiekt typu struct za pomocą funkcji, zwykle nazywanej przez "New" + Type Type, na przykładUkład pamięci Golang w porównaniu do C++/C
func NewRect(x,y, width, height float) *Rect {
return &Rect(x,y,width, height)
}
Jednak nie jestem pewien co do układu pamięci urządzenia Go. W C/C++ ten rodzaj kodu oznacza, że zwracasz wskaźnik, który wskazuje obiekt tymczasowy, ponieważ zmienna jest przydzielana na stosie, a zmienna może być koszem po powrocie funkcji. W Golang, czy muszę się martwić takimi rzeczami? Ponieważ Wydaje się, że żaden standard nie pokazuje, jaki rodzaj danych zostanie przydzielony na stosie, a jakie dane zostaną przydzielone na stercie.
Tak jak w Javie, wydaje się, że istnieje określony punkt, w którym podstawowy typ, taki jak int, float zostanie przydzielony na stosie, inny obiekt pochodzący z obiektu zostanie przydzielony na stercie. Czy w golangu jest o tym mowa?
Zostanie przydzielona na stercie. Kompilator Go może wykryć, kiedy obiekt będzie żył poza stosem i automatycznie przydzieli go na stercie. Możesz go zobaczyć, jeśli skompilujesz komendę 'go build -gcflags '-m'', aby zobaczyć decyzje optymalizacyjne. – siritinga
@python: Twoja intuicja miała rację, że nie musisz się o to martwić. W praktyce jest prawdą, że zostanie przydzielony na stercie, ale model pamięci Go jest bardzo prosty i nie musisz w ogóle myśleć o stosach i stertach. Możesz po prostu myśleć o zmiennych. Jeśli weźmiesz adres, Go zagwarantuje, że ten adres jest zawsze ważny, o ile masz na to wskaźnik. Nie powinno mieć znaczenia, jako programista, jak to się dzieje. (oczywiście, może być ciekawie pomyśleć o tym, jak to jest zaimplementowane i jest tam kilka fajnych rzeczy) – joshlf
dziękuję za wszystkie twoje odpowiedzi – python