Masalah dengan Banyak Parameter
Mengapa konstruktor menjadi rumit
Masalah dengan Banyak Parameter adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Mengapa Konstruktor Menjadi Rumit
Go tidak memiliki argumen bawaan atau parameter bernama. Saat sebuah tipe memperoleh lebih banyak pilihan, tanda tangan konstruktornya menjadi sulit dikelola dan rentan terhadap kesalahan.
Ledakan Konstruktor
Bayangkan sebuah server dengan nama mesin, port, batas waktu, TLS, dan percobaan ulang. Satu konstruktor harus menerima semuanya.
package main
import "fmt"
func NewServer(host string, port, timeout, retries int, tls bool) {
fmt.Println(host, port, timeout, retries, tls)
}
func main() {
NewServer("localhost", 8080, 30, 3, false)
}Masalah Keterbacaan
Lokasi pemanggilan menjadi deretan panjang nilai berdasarkan posisi. NewServer("localhost", 8080, 30, 3, false) — angka mana yang merupakan batas waktu? Mana yang merupakan percobaan ulang?
Mudah Tertukar
Dua parameter int yang bersebelahan dapat tertukar begitu saja, dan kompilator tidak akan mendeteksi kesalahan tersebut.
package main
import "fmt"
func connect(timeout, retries int) { fmt.Println("timeout", timeout, "retries", retries) }
func main() {
connect(3, 30)
}Pendekatan Struktur Konfigurasi
Salah satu alternatifnya adalah meneruskan struktur konfigurasi. Ini lebih baik, tetapi setiap atribut mendapatkan nilai nolnya, yang mungkin keliru (misalnya, batas waktu 0).
package main
import "fmt"
type Config struct {
Host string
Port int
Timeout int
}
func NewServer(c Config) { fmt.Printf("%+v\n", c) }
func main() {
NewServer(Config{Host: "localhost", Port: 8080})
}Jebakan Nilai Nol
Dengan struktur konfigurasi, tidak mencantumkan Timeout akan diam-diam menetapkannya ke 0. Anda tidak dapat membedakan antara "gunakan bawaan" dan "nol secara eksplisit".
Beberapa Konstruktor
Alternatif lainnya adalah membuat banyak konstruktor — NewServer, NewServerWithTLS, NewServerWithTimeout — yang jumlah kombinasinya meledak.
Kompatibilitas Mundur
Menambahkan parameter ke konstruktor yang sudah ada akan merusak setiap pemanggilnya. Anda ingin menambahkan pilihan tanpa mengubah lokasi pemanggilan yang sudah ada.
Yang Kita Inginkan
- Nilai bawaan yang masuk akal
- Ganti hanya yang diperlukan
- Lokasi pemanggilan yang menjelaskan dirinya sendiri
- Tambahkan pilihan nanti tanpa merusak pemanggil
Memperkenalkan Opsi Fungsional
Pola opsi fungsional menyelesaikan semua masalah ini: teruskan daftar variadik fungsi konfigurasi. Pelajaran berikutnya akan membangunnya langkah demi langkah.
Pratinjau
Tujuannya adalah pemanggilan seperti NewServer("localhost", WithPort(9000), WithTLS()) — jelas, opsional, dan mudah diperluas.
Pemeriksaan Singkat
Uji pemahaman Anda tentang masalah ini.
Ringkasan
Anda telah melihat mengapa konstruktor dengan banyak parameter bermasalah.
- Argumen berdasarkan posisi sulit dibaca dan mudah tertukar
- Struktur konfigurasi menghadapi jebakan nilai nol
- Banyak konstruktor mengalami ledakan jumlah kombinasi
- Penambahan parameter merusak pemanggil
Opsi fungsional memperbaiki semua masalah tersebut.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Masalah dengan Banyak Parameter” gratis?
Ya — teks lengkap “Masalah dengan Banyak Parameter” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Masalah dengan Banyak Parameter”?
Mengapa konstruktor menjadi rumit Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Masalah dengan Banyak Parameter” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Masalah dengan Banyak Parameter
- Fungsi Opsi
- Membangun API yang Fleksibel
- Nilai Default dan Validasi