Membangun API yang Fleksibel
Terapkan pola tersebut
Membangun API yang Fleksibel adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.
Terapkan Polanya
Sekarang susun pola lengkapnya: konstruktor yang menerima argumen wajib serta daftar variadik opsi.
Konstruktor Variadik
Parameter wajib diletakkan terlebih dahulu; opsi mengikuti setelahnya sebagai ...Option.
package main
import "fmt"
type Server struct {
Host string
Port int
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(host string, opts ...Option) *Server {
s := &Server{Host: host}
for _, opt := range opts {
opt(s)
}
return s
}
func main() {
s := NewServer("localhost", WithPort(8080))
fmt.Printf("%+v\n", *s)
}Memanggil Tanpa Opsi
Karena opsinya variadik, pemanggil dapat menghilangkannya sepenuhnya dan mengandalkan apa pun yang disiapkan oleh konstruktor.
package main
import "fmt"
type Server struct{ Host string; Port int }
type Option func(*Server)
func NewServer(host string, opts ...Option) *Server {
s := &Server{Host: host}
for _, o := range opts { o(s) }
return s
}
func main() {
s := NewServer("localhost")
fmt.Printf("%+v\n", *s)
}Memanggil dengan Beberapa Opsi
Susun opsi sebanyak yang Anda inginkan; masing-masing terbaca jelas di lokasi pemanggilan.
package main
import "fmt"
type Server struct {
Host string
Port int
Timeout int
TLS bool
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func WithTimeout(t int) Option { return func(s *Server) { s.Timeout = t } }
func WithTLS() Option { return func(s *Server) { s.TLS = true } }
func NewServer(host string, opts ...Option) *Server {
s := &Server{Host: host}
for _, o := range opts { o(s) }
return s
}
func main() {
s := NewServer("localhost", WithPort(9000), WithTimeout(60), WithTLS())
fmt.Printf("%+v\n", *s)
}Pemanggilan yang Menjelaskan Dirinya Sendiri
Bandingkan NewServer("localhost", WithPort(9000), WithTLS()) dengan pemanggilan berdasarkan posisi. Tujuannya sudah jelas tanpa perlu memeriksa tanda tangan.
Menambahkan Opsi Nanti
Memerlukan pengaturan baru? Tambahkan fungsi WithX. Semua lokasi pemanggilan yang sudah ada akan tetap berhasil dikompilasi tanpa perubahan — kompatibilitas mundur yang sesungguhnya.
package main
import "fmt"
type Server struct{ Host string; Retries int }
type Option func(*Server)
func WithRetries(n int) Option { return func(s *Server) { s.Retries = n } }
func NewServer(host string, opts ...Option) *Server {
s := &Server{Host: host}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer("h", WithRetries(5)))
}Meneruskan Opsi
Karena opsi adalah nilai, Anda dapat membuat daftar di tempat lain lalu meneruskannya ke konstruktor.
package main
import "fmt"
type Server struct{ Host string; Port int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(host string, opts ...Option) *Server {
s := &Server{Host: host}
for _, o := range opts { o(s) }
return s
}
func main() {
common := []Option{WithPort(443)}
s := NewServer("api", common...)
fmt.Printf("%+v\n", *s)
}Opsi sebagai Antarmuka Publik
Ekspor tipe Option dan fungsi WithX agar pengguna pustaka dapat mengonfigurasi tipe Anda tanpa menyentuh bagian dalamnya.
Menjaga Atribut Tetap Tersembunyi
Atribut konfigurasi dapat tetap tidak diekspor; opsi adalah satu-satunya cara yang disahkan untuk menetapkannya sehingga invarian tetap terlindungi.
Saat Pola Ini Paling Berguna
- Konstruktor pustaka dengan banyak pengaturan opsional
- Antarmuka yang harus tetap stabil saat berkembang
- Klien, server, pencatat log, dan pembangun
Jejak di Pustaka Standar
Anda akan melihat gaya ini di seluruh ekosistem Go (gRPC dan banyak penggerak). Dengan mengenalinya, antarmuka tersebut akan terasa familier.
Pemeriksaan Singkat
Uji pemahaman Anda tentang antarmuka yang fleksibel.
Ringkasan
Anda telah membangun antarmuka fleksibel dengan opsi fungsional.
- Argumen wajib terlebih dahulu, lalu
...Option - Ulangi opsi dan terapkan masing-masing
- Pemanggil dapat meneruskan nol atau banyak opsi dengan jelas
- Tambahkan opsi nanti tanpa merusak pemanggil
Belajar Go dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Membangun API yang Fleksibel” gratis?
Ya — teks lengkap “Membangun API yang Fleksibel” 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 “Membangun API yang Fleksibel”?
Terapkan pola tersebut 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 3 dari 4.
Berapa lama pelajaran “Membangun API yang Fleksibel” 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