Heim >Backend-Entwicklung >Golang >Wann gibt Go einen Wert, eine Referenz oder nichts zurück?
Ich schreibe Code, in dem eine Reihe von Funktionen Elemente aktualisieren, die „als Referenz übergeben“ werden, ähnlich wie in DoSomethingB
unten. Für mich als Neuling ist das eher unintuitiv. Ich möchte lieber, dass eine Funktion ihr Ergebnis zurückgibt (es sei denn, es handelt sich um eine Methode und aktualisiert den Empfänger).
Frage:
DoSomethingB
?
Von DoSomethingA
? DoSomethingB
(keine Strukturmethode)
Wird dies in Go als guter oder akzeptabler Stil angesehen? package main import ( "fmt" ) func DoSomethingA(someData int) int { return someData + 23 } func DoSomethingB(someData *int) { *someData = *someData + 23 } func DoSomethingC(someData *int) *int { tmp := *someData + 23 return &tmp } func main() { someDataA := 19 someDataB := 19 someDataC := 19 fmt.Printf("1) someDataA=%d, someDataB=%d, someDataC=%d\n", someDataA, someDataB, someDataC) someDataA = DoSomethingA(someDataA) DoSomethingB(&someDataB) someDataC = *DoSomethingC(&someDataC) fmt.Printf("2) someDataA=%d, someDataB=%d, someDataC=%d\n", someDataA, someDataB, someDataC) }
Gehe zum Playground-Link: https://play.golang.com/p/ELwljCaWDLg
Natürlich schlüsseln wir deine Frage auf:
DoSomethingB vs. DoSomethingA: Es ist hilfreich, ein Muster wie DoSomethingB
这样的模式会很有帮助,从而避免不必要的分配。但是,它可能会导致代码更难理解。使用 DoSomethingA
zu verwenden, wenn Sie die Originalvariable ändern möchten, ohne eine Kopie zu erstellen, und so unnötige Zuweisungen vermeiden möchten. Allerdings kann es sein, dass der Code dadurch schwieriger zu verstehen ist. Die Verwendung von
Gilt DoSomethingB als guter Stil in Go? DoSomethingB
: Während es in Go nicht ungewöhnlich ist, Code wie
DoSomethingC
Beispiel
DoSomethingA
这样的模式。如果您有充分的理由修改原始数据并且担心性能(例如大型数据结构),那么 DoSomethingB
Zusammenfassend: Wenn Sie dem idiomatischen Go folgen möchten, bevorzugen
Das obige ist der detaillierte Inhalt vonWann gibt Go einen Wert, eine Referenz oder nichts zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!