Menguasai Fungsi Variadic dalam Go with With
Variadic Functions in Golang - The power of with()

Menguasai Fungsi Variadic dalam Go with With

Artikel ini diterjemahkan secara automatik oleh terjemahan mesin daripada bahasa Inggeris dan mungkin mengandungi ketidaktepatan. Ketahui lebih lanjut
Lihat asal

Dalam Go, fungsi variadik sering diperkenalkan menggunakan fmt. Cetakan() atau jumlah() Contoh. Tetapi dalam projek dunia sebenar, salah satu kegunaan fungsi variadik yang paling berkuasa ialah Corak Pilihan Berfungsi — menggunakan Dengan() pembantu gaya untuk penciptaan objek.

Corak ini menjadikan pembina anda:

  • Lebih mudah dibaca
  • Lebih mudah untuk dilanjutkan
  • Lebih selamat dengan pengesahan terbina dalam


Apakah Fungsi Variadik dalam Go?

Fungsi variadik ialah fungsi yang menerima bilangan hujah yang berubah-ubah. Anda mentakrifkannya menggunakan elipsis (...) sebelum jenis parameter terakhir.

func sum(numbers ...int) int {
    total := 0
    for _, num := range numbers {
        total += num
    }
    return total
}

fmt.Println(sum(1, 2, 3)) // 6
fmt.Println(sum(1,2))     // 3        

Dalam kes ini, nombor ialah kepingan ([]Int), membenarkan fleksibiliti dalam bilangan hujah yang anda luluskan.


Penggunaan Kehidupan Sebenar: Pilihan Berfungsi dengan Dengan()

Di dunia nyata, projek Go jarang kekal kecil. Dari masa ke masa, pembina cenderung untuk kembung dengan parameter — mungkin ia bermula sebagai alat kecil untuk memanggil API.

Pada mulanya, mencipta klien HTTP anda adalah mudah:

NewClient("https://api.example.com")        

Tetapi apabila keperluan bertimbun, pembina anda mula kembung:

  • Anda memerlukan URL asas.
  • Anda menambah tamat masa.
  • Anda lulus Token API untuk pengesahan.
  • Anda melemparkan masuk kiraan percubaan semula untuk kebolehpercayaan.
  • Mungkin pengangkutan HTTP tersuai untuk sokongan proksi.

Sekarang panggilan anda yang pernah bersih kelihatan seperti ini:

NewClient("https://api.example.com", 5*time.Second, "Bearer token", nil, true, 3)        

Pada pandangan pertama... Apakah maksud parameter ini?

  • Adakah nol untuk pengepala atau pengangkutan tersuai?
  • Adakah benar mendayakan percubaan semula atau penyahpepijatan?
  • Apa yang berlaku jika anda menambah satu lagi parameter di tengah?

Ia seperti cuba memasang perabot IKEA tanpa helaian arahan — kepingan semuanya ada, tetapi anda sentiasa menyelak manual untuk mengingati ke mana setiap satu pergi.


Penyelesaian

Sekarang, bayangkan pemfaktoran semula ini menggunakan With() corak pilihan berfungsi. Persediaan pelanggan anda secara tiba-tiba dibaca seperti ayat:

client := NewClient(
    WithBaseURL("https://api.example.com"),
    WithTimeout(5*time.Second),
    WithHeader("Authorization", "Bearer token"),
)        

Tiada lagi tekaan:

  • Pendokumentasian sendiri — Setiap pilihan memberitahu anda dengan tepat apa yang dilakukannya.
  • Bebas pesanan — Campur dan padankan tanpa memecahkan apa-apa.
  • Kalis masa depan — Tambah WithRetries baharu(3) tanpa menyentuh kod sedia ada.

Ia bukan hanya mengenai kod yang lebih bersih — ia mengenai kod yang terasa seperti perbualan, di mana anda boleh membaca persediaan dan memahami niat dengan serta-merta tanpa memburu tandatangan fungsi.

🔗 Ingin melihat contoh kerja yang lengkap?

👉 Lihat kod penuh di GitHub


Kelebihan dan Batasan Fungsi Variadic

Pro

  • Pembina yang lebih bersih dan lebih mudah dibaca
  • Menyokong hujah pilihan tanpa berbilang fungsi
  • Mudah dilanjutkan tanpa memutuskan panggilan sedia ada
  • Membenarkan pengesahan setiap pilihan

Kontra

  • Sedikit overhed daripada peruntukan kepingan tambahan
  • Boleh disalahgunakan jika terlalu banyak pilihan ditambah tanpa struktur


Amalan Terbaik

  1. Simpan parameter variadik pada Akhir daripada pembina.
  2. Buat setiap With() serba lengkap & disahkan.
  3. Elakkan membuang semua logik dalam Baru... — biarkan setiap pilihan mengendalikan bidangnya sendiri.
  4. Dokumen tersedia Dengan() pilihan jelas untuk pembangun lain.


Kesimpulan

Fungsi variadic dalam Go adalah lebih daripada helah pemula. Apabila dipasangkan dengan With() corak pilihan berfungsi, mereka menjadi Alat reka bentuk yang berkuasa untuk membina API Go yang boleh diselenggara, berskala dan bersih.

🔗 Ingin melihat contoh kerja yang lengkap? Saya telah mencipta Repositori GitHub Menunjukkan:

  • Pelanggan HTTP dengan percubaan semula
  • Pengendalian sijil TLS
  • Permintaan GET & POST dengan pengepala tersuai

👉 Lihat kod penuh di GitHub

💬 Adakah anda telah menggunakan Dengan() dalam projek Go anda? Kongsi pengalaman anda dalam komen!


Untuk melihat atau menambahkan komen, daftar masuk

Lagi artikel daripada Aslam Mulla

Orang lain turut melihat