Ikuti garis panduan ini untuk menulis fungsi Go yang cekap: Elakkan menggunakan pembolehubah global. Pass by value untuk jenis nilai kecil; pass by pointer untuk jenis nilai besar. Berikan nilai hanya apabila perlu. Gunakan fungsi sebaris. Kurangkan bilangan parameter.
Panduan Menulis Fungsi Cekap dalam Go
Fungsi yang cekap adalah kunci untuk menulis program Go yang cekap. Dengan mengikuti garis panduan ini, anda boleh menulis fungsi yang cekap dan boleh dibaca.
1. Elakkan pembolehubah global
Pembolehubah global menjadikan kod sukar untuk diselenggara dan diuji kerana ia boleh diubah suai dari mana-mana dalam program. Sebaliknya, hadkan pembolehubah kepada fungsi atau jenis tertentu.
2. Gunakan hantaran nilai
Fungsi dalam Go dihantar secara nilai secara lalai. Ini bermakna salinan pembolehubah yang dihantar ke fungsi akan dihantar ke fungsi. Ini lebih cekap untuk jenis nilai kecil seperti int, float atau rentetan. Untuk jenis nilai yang besar (seperti tatasusunan atau kepingan), hantaran penunjuk harus digunakan sebaliknya.
3. Gunakan hantaran penunjuk
Melalui nilai besar melalui penunjuk membolehkan fungsi mengubah suai nilai asal secara langsung, dengan itu mengelakkan overhed menyalin keseluruhan nilai. Apabila nilai perlu diubah suai dalam fungsi, gunakan hantaran penunjuk. . Jika fungsi memerlukan berbilang parameter, pertimbangkan untuk mencipta struktur atau menggabungkan parameter berkaitan menjadi satu nilai.
5. Elakkan peruntukan yang tidak perlu
Peruntukan nilai baharu akan menyebabkan overhed prestasi. Berikan nilai hanya apabila perlu. Sebagai contoh, gunakan penimbal dalam gelung dan bukannya memberikan nilai baharu untuk setiap lelaran.
6. Gunakan fungsi sebaris
Fungsi sebaris memasukkan badan fungsi terus ke titik panggilan. Ini boleh mengurangkan overhed panggilan fungsi, terutamanya apabila badan fungsi kecil.
Kes praktikal:
Contoh berikut membandingkan prestasi lulus dengan nilai dan lulus dengan penunjuk:
package main import "testing" type Data struct { Value int } func passByValue(d Data) { d.Value += 1 } func passByPointer(d *Data) { d.Value += 1 } func BenchmarkPassByValue(b *testing.B) { d := Data{Value: 0} for i := 0; i < b.N; i++ { passByValue(d) } } func BenchmarkPassByPointer(b *testing.B) { d := Data{Value: 0} for i := 0; i < b.N; i++ { passByPointer(&d) } }
Hasil penanda aras menunjukkan bahawa lulus melalui penunjuk adalah lebih cepat daripada lulus dengan nilai: Atas ialah kandungan terperinci Panduan menulis fungsi cekap Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!BenchmarkPassByValue-8 10000000 148 ns/op
BenchmarkPassByPointer-8 100000000 24.2 ns/op