0Pricing
Go Academy · บทเรียน

ค่าเริ่มต้นและการตรวจสอบ

ตั้งค่าเริ่มต้นที่เหมาะสม

ค่าเริ่มต้นและการตรวจสอบ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ปัญหาของพารามิเตอร์จำนวนมาก
  2. ฟังก์ชันตัวเลือก
  3. การสร้าง API ที่ยืดหยุ่น
  4. ค่าเริ่มต้นและการตรวจสอบ
← กลับไปที่ Go Academy