Nilai Default dan Validasi
Tetapkan nilai default yang masuk akal
Nilai Default dan Validasi adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Tetapkan Nilai Bawaan yang Masuk Akal
Konstruktor yang tangguh dimulai dari nilai bawaan yang baik, lalu memungkinkan opsi menggantinya. Dengan demikian, jebakan nilai nol dapat dihindari sepenuhnya.
Inisialisasi Sebelum Menerapkan
Bangun konfigurasi dengan nilai bawaan terlebih dahulu, lalu terapkan opsi di atasnya.
package main
import "fmt"
type Server struct {
Port int
Timeout int
}
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer())
fmt.Printf("%+v\n", *NewServer(WithPort(9000)))
}Nilai Bawaan Berlaku hingga Diganti
Pemanggilan tanpa opsi menghasilkan nilai bawaan; sebuah opsi hanya mengganti atribut yang disentuhnya. Anda mendapatkan yang terbaik dari kedua pendekatan.
Memvalidasi Setelah Penerapan
Setelah menerapkan opsi, validasi konfigurasi akhir dan kembalikan galat jika konfigurasi tersebut tidak valid. Buat konstruktor mengembalikan (*T, error).
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.Port = p } }
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts { o(s) }
if s.Port < 1 || s.Port > 65535 {
return nil, errors.New("invalid port")
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(99999))
fmt.Println(err)
}Validasi di Dalam Opsi
Alternatifnya, opsi itu sendiri dapat mengembalikan galat. Tipe Option menjadi func(*Config) error.
package main
import (
"errors"
"fmt"
)
type Server struct{ Port int }
type Option func(*Server) error
func WithPort(p int) Option {
return func(s *Server) error {
if p < 1 {
return errors.New("port must be positive")
}
s.Port = p
return nil
}
}
func NewServer(opts ...Option) (*Server, error) {
s := &Server{Port: 8080}
for _, o := range opts {
if err := o(s); err != nil {
return nil, err
}
}
return s, nil
}
func main() {
_, err := NewServer(WithPort(-1))
fmt.Println(err)
}Gaya Validasi yang Mana
Validasi di dalam opsi untuk pemeriksaan setiap pengaturan; validasi setelah penerapan untuk aturan lintas atribut (misalnya, TLS memerlukan jalur sertifikat). Sering kali Anda menggunakan keduanya.
Mendokumentasikan Nilai Bawaan
Selalu dokumentasikan setiap nilai bawaan dalam komentar dokumentasi konstruktor agar pengguna mengetahui hasilnya saat mereka menghilangkan sebuah opsi.
Wajib vs Opsional
Pertahankan nilai yang benar-benar wajib sebagai parameter berdasarkan posisi; gunakan opsi hanya untuk nilai yang benar-benar opsional. Jangan menyembunyikan data wajib di balik sebuah opsi.
package main
import "fmt"
type Client struct {
BaseURL string
Retries int
}
type Option func(*Client)
func WithRetries(n int) Option { return func(c *Client) { c.Retries = n } }
func NewClient(baseURL string, opts ...Option) *Client {
c := &Client{BaseURL: baseURL, Retries: 3}
for _, o := range opts { o(c) }
return c
}
func main() {
fmt.Printf("%+v\n", *NewClient("https://api"))
}Menggabungkan Opsi
Anda dapat mengomposisikan beberapa opsi menjadi satu prasetel untuk konfigurasi yang umum.
package main
import "fmt"
type Server struct{ Port, Timeout int }
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 Production() Option {
return func(s *Server) {
WithPort(443)(s)
WithTimeout(60)(s)
}
}
func NewServer(opts ...Option) *Server {
s := &Server{Port: 8080, Timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
fmt.Printf("%+v\n", *NewServer(Production()))
}Praktik Terbaik
- Mulai dari nilai bawaan, lalu terapkan opsi
- Validasi setelah penerapan untuk aturan lintas atribut
- Pertahankan nilai wajib berdasarkan posisi
- Dokumentasikan setiap nilai bawaan
Antarmuka yang Lengkap dan Tangguh
Menggabungkan nilai bawaan, opsi, dan validasi memberi Anda konstruktor yang fleksibel, aman, menjelaskan dirinya sendiri, dan mudah diperluas.
Pemeriksaan Singkat
Uji pemahaman Anda tentang nilai bawaan dan validasi.
Ringkasan
Anda telah menyelesaikan pola opsi fungsional.
- Tetapkan nilai bawaan sebelum menerapkan opsi
- Validasi setelah penerapan, atau di dalam opsi untuk pemeriksaan per atribut
- Pertahankan nilai wajib berdasarkan posisi
- Komposisikan opsi menjadi prasetel dan dokumentasikan nilai bawaan
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 “Nilai Default dan Validasi” gratis?
Ya — teks lengkap “Nilai Default dan Validasi” 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 “Nilai Default dan Validasi”?
Tetapkan nilai default yang masuk akal 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 4 dari 4.
Berapa lama pelajaran “Nilai Default dan Validasi” 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