Siemano,
piszę taki programik w go i zastanawiam się, czy lepiej żeby funkcja zwracała wartość czy pointer. W ogóle zastanawia jaka jest najlepsza praktyka odnośnie kiedy zwracać pointer, a kiedy value.
A więc jest tak, mam strukture, przykładowo
type Person struct {
imie, nazwisko string
}
dalej funkcje która ją tworzy z podstawowymi danymi
func makePerson() *Person {
p := Person{"marian", "kowalski"}
return &p
}
i teraz mogę ją zwrócić jak wyżej, albo zwrócić po prostu Person. Kolejne funkcje ją modyfikują np.
func changePersonName(p *Person) {
p.imie = "Janusz"
}
func changePersonSurname(p *Person) {
p.nazwisko = "Nowak"
}
a ostatnia funkcja formatuje te dane i je wypisuje np.
func printPerson(p *Person) {
fmt.Println("Imie " + p.imie)
fmt.Println("Nazwisko " + p.nazwisko)
}
no i dobra, wszystko działa super, ale równie dobrze zamiast *Person w pierwszej funkcji, mógłbym zwrócić po prostu Person, a do funkcji modyfikujących przekazywać po prostu &p
Uznałem jednak, że skoro struktura będzie kilka razy modyfikowana, lepie zwrócić od razu wskaźnik, ale czy takie podejście jest dobre? Bo w ostatni funkcji ze struktury pobierane są tylko dane, a przykładowo mogłaby zostać tam omyłkowo zmieniona. Natomiast zwracając wartość, zachodzi potrzeba przekazywania za każdym razem &, co może jest mniej ergonomiczne, ale za to, wydaje mi się, bezpieczniejsze. I jak to wygląda pod względem wydajności? Z tego co wiem, to nie zawsze zwracanie pointera jest wydajniejsze.