ค่าเริ่มต้นและการตรวจสอบ
ตั้งค่าเริ่มต้นที่เหมาะสม
ค่าเริ่มต้นและการตรวจสอบ เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
กำหนดค่าเริ่มต้นที่เหมาะสม
ตัวสร้างที่แข็งแกร่งจะเริ่มจากค่าเริ่มต้นที่ดี แล้วให้ตัวเลือกเปลี่ยนค่าเหล่านั้น วิธีนี้หลีกเลี่ยงกับดักค่าศูนย์ได้ทั้งหมด
เริ่มต้นก่อนนำไปใช้
สร้างการกำหนดค่าด้วยค่าเริ่มต้นก่อน แล้วจึงนำตัวเลือกไปใช้ทับ
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)))
}ค่าเริ่มต้นมีผลจนกว่าจะถูกเปลี่ยน
การเรียกใช้โดยไม่มีตัวเลือกจะได้ค่าเริ่มต้น ส่วนตัวเลือกจะเปลี่ยนเฉพาะฟิลด์ที่ตนแตะต้อง เป็นข้อดีของทั้งสองแนวทาง
ตรวจสอบหลังนำไปใช้
หลังนำตัวเลือกไปใช้ ให้ตรวจสอบการกำหนดค่าขั้นสุดท้ายและคืนข้อผิดพลาดหากไม่ถูกต้อง ให้ตัวสร้างคืนค่า (*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)
}ตรวจสอบภายในตัวเลือก
อีกทางเลือกหนึ่งคือตัวเลือกเองสามารถคืนข้อผิดพลาดได้ ชนิด Option จะกลายเป็น 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)
}ควรใช้รูปแบบการตรวจสอบใด
ตรวจสอบในตัวเลือกสำหรับการตรวจสอบเฉพาะการตั้งค่า และตรวจสอบหลังนำไปใช้สำหรับกฎที่เกี่ยวข้องกันหลายฟิลด์ (เช่น TLS ต้องมีเส้นทางใบรับรอง) โดยบ่อยครั้งจะใช้ทั้งสองวิธี
การบันทึกค่าเริ่มต้นในเอกสาร
บันทึกค่าเริ่มต้นแต่ละรายการไว้ในคำอธิบายเอกสารของตัวสร้างเสมอ เพื่อให้ผู้ใช้ทราบว่าจะได้รับอะไรเมื่อไม่ระบุตัวเลือก
ค่าที่จำเป็นกับค่าเสริม
เก็บค่าที่จำเป็นอย่างแท้จริงไว้เป็นพารามิเตอร์ตามตำแหน่ง และใช้ตัวเลือกเฉพาะกับค่าที่เป็นตัวเลือกเสริมอย่างแท้จริง อย่าซ่อนข้อมูลที่จำเป็นไว้หลังตัวเลือก
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"))
}รวมตัวเลือก
คุณสามารถประกอบตัวเลือกหลายรายการเป็นค่าตั้งล่วงหน้ารายการเดียวสำหรับการกำหนดค่าที่ใช้บ่อย
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()))
}แนวทางปฏิบัติที่ดี
- เริ่มจากค่าเริ่มต้น แล้วนำตัวเลือกไปใช้
- ตรวจสอบหลังนำไปใช้สำหรับกฎที่เกี่ยวข้องกันหลายฟิลด์
- เก็บค่าที่จำเป็นไว้ตามตำแหน่ง
- บันทึกค่าเริ่มต้นทุกรายการไว้ในเอกสาร
ส่วนติดต่อที่สมบูรณ์และแข็งแกร่ง
การรวมค่าเริ่มต้น ตัวเลือก และการตรวจสอบความถูกต้องเข้าด้วยกัน ทำให้คุณมีตัวสร้างที่ยืดหยุ่น ปลอดภัย อธิบายตัวเองได้ และขยายต่อได้ง่าย
ตรวจสอบความเข้าใจ
ทดสอบความรู้เกี่ยวกับค่าเริ่มต้นและการตรวจสอบความถูกต้อง
สรุปทบทวน
คุณได้ทำรูปแบบตัวเลือกแบบฟังก์ชันจนเสร็จสมบูรณ์
- กำหนดค่าเริ่มต้นก่อนนำตัวเลือกไปใช้
- ตรวจสอบหลังนำไปใช้ หรือภายในตัวเลือกสำหรับการตรวจสอบแต่ละฟิลด์
- เก็บค่าที่จำเป็นไว้ตามตำแหน่ง
- ประกอบตัวเลือกเป็นค่าตั้งล่วงหน้าและบันทึกค่าเริ่มต้นไว้ในเอกสาร
คำถามที่พบบ่อย
บทเรียน “ค่าเริ่มต้นและการตรวจสอบ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ค่าเริ่มต้นและการตรวจสอบ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ค่าเริ่มต้นและการตรวจสอบ”
ตั้งค่าเริ่มต้นที่เหมาะสม คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ค่าเริ่มต้นและการตรวจสอบ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม
ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ปัญหาของพารามิเตอร์จำนวนมาก
- ฟังก์ชันตัวเลือก
- การสร้าง API ที่ยืดหยุ่น
- ค่าเริ่มต้นและการตรวจสอบ