J'écris du code dans lequel un certain nombre de fonctions mettent à jour des éléments qui sont "passés par référence", dans le sens de DoSomethingB
ci-dessous. En tant que débutant, cela me semble plutôt peu intuitif. Je préfère qu'une fonction renvoie son résultat (sauf s'il s'agit d'une méthode et met à jour le récepteur).
Question :
DoSomethingB
Par DoSomethingA
? DoSomethingB
(pas une méthode struct)
Est-ce considéré comme un style bon ou acceptable au Go ? 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) }
Allez sur le lien Playground : https://play.golang.com/p/ELwljCaWDLg
Bien sûr, décomposons votre question :
DoSomethingB vs DoSomethingA : Utiliser un modèle comme DoSomethingB
这样的模式会很有帮助,从而避免不必要的分配。但是,它可能会导致代码更难理解。使用 DoSomethingA
est utile si vous souhaitez modifier la variable d'origine sans créer de copie, évitant ainsi les allocations inutiles. Cependant, cela peut rendre le code plus difficile à comprendre. L'utilisation de
DoSomethingB est-il considéré comme un bon style au Go ? DoSomethingB
: Bien qu'il ne soit pas rare de voir du code comme
DoSomethingC
Exemple
DoSomethingA
这样的模式。如果您有充分的理由修改原始数据并且担心性能(例如大型数据结构),那么 DoSomethingB
En résumé, si vous souhaitez suivre le Go idiomatique, préférez
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!