Rumah >pembangunan bahagian belakang >Golang >Bilakah Go mengembalikan nilai, mengembalikan rujukan atau tidak mengembalikan apa-apa?
Saya sedang menulis beberapa kod di mana beberapa fungsi mengemas kini item yang "dilalui melalui rujukan", sepanjang baris DoSomethingB
di bawah. Sebagai seorang pemula, ini agak tidak intuitif bagi saya. Saya lebih suka mempunyai fungsi mengembalikan hasilnya (melainkan ia mungkin kaedah dan mengemas kini penerima).
Soalan:
DoSomethingB
Oleh DoSomethingA
? DoSomethingB
(bukan kaedah struct)
Adakah ini dianggap gaya yang bagus atau boleh diterima dalam 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) }
Pergi ke Pautan Taman Permainan: https://play.golang.com/p/ELwljCaWDLg
Sudah tentu, mari pecahkan soalan anda:
DoSomethingB vs. DoSomethingA: Menggunakan corak seperti DoSomethingB
这样的模式会很有帮助,从而避免不必要的分配。但是,它可能会导致代码更难理解。使用 DoSomethingA
berguna jika anda ingin mengubah suai pembolehubah asal tanpa membuat salinan, sekali gus mengelakkan peruntukan yang tidak perlu. Walau bagaimanapun, ia mungkin menjadikan kod lebih sukar untuk difahami. Menggunakan
Adakah DoSomethingB dianggap gaya yang bagus dalam Go? DoSomethingB
: Walaupun bukan sesuatu yang luar biasa untuk melihat kod seperti
DoSomethingC
Contoh
DoSomethingA
这样的模式。如果您有充分的理由修改原始数据并且担心性能(例如大型数据结构),那么 DoSomethingB
Ringkasnya, jika anda ingin mengikuti idiomatik Go, lebih suka
Atas ialah kandungan terperinci Bilakah Go mengembalikan nilai, mengembalikan rujukan atau tidak mengembalikan apa-apa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!