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

ฟังก์ชันตัวเลือก

กำหนดค่าด้วยฟังก์ชัน

ฟังก์ชันตัวเลือก เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

กำหนดค่าด้วยฟังก์ชัน

แนวคิดหลักคือ แทนการตั้งค่าเสริมแต่ละรายการด้วยฟังก์ชันที่เปลี่ยนแปลงการกำหนดค่า ฟังก์ชันเหล่านี้เรียกว่า «ฟังก์ชันตัวเลือก»

ชนิดตัวเลือก

กำหนด Option ให้เป็นฟังก์ชันที่รับตัวชี้ไปยังสตรักต์การกำหนดค่า

package main

import "fmt"

type Config struct {
	Port    int
	Timeout int
}

type Option func(*Config)

func main() {
	var o Option
	fmt.Println(o == nil)
}

การเขียนตัวเลือก

ตัวเลือกคืนค่าโคลเชอร์ที่กำหนดค่าฟิลด์หนึ่งรายการ WithPort(9000) จะสร้างฟังก์ชันที่กำหนดค่า Port = 9000

package main

import "fmt"

type Config struct{ Port int }
type Option func(*Config)

func WithPort(p int) Option {
	return func(c *Config) { c.Port = p }
}

func main() {
	c := &Config{}
	WithPort(9000)(c)
	fmt.Println(c.Port)
}

โคลเชอร์เก็บค่าที่รับไว้

ฟังก์ชันที่คืนค่าจะปิดครอบอาร์กิวเมนต์ไว้ WithPort(9000) จะจดจำค่า 9000 ไว้จนกว่าจะถูกนำไปใช้ภายหลัง

ตัวเลือกหลายรายการ

การตั้งค่าแต่ละรายการจะมีฟังก์ชันตัวเลือกของตนเอง และทั้งหมดใช้ชนิด Option ร่วมกัน

package main

import "fmt"

type Config struct {
	Port    int
	Timeout int
}
type Option func(*Config)

func WithPort(p int) Option    { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }

func main() {
	c := &Config{}
	WithPort(80)(c)
	WithTimeout(15)(c)
	fmt.Printf("%+v\n", *c)
}

ตัวเลือกแบบแฟล็กบูลีน

ตัวเลือกที่ไม่มีพารามิเตอร์สามารถเปิดหรือปิดแฟล็กได้

package main

import "fmt"

type Config struct{ TLS bool }
type Option func(*Config)

func WithTLS() Option { return func(c *Config) { c.TLS = true } }

func main() {
	c := &Config{}
	WithTLS()(c)
	fmt.Println(c.TLS)
}

นำสไลซ์ของตัวเลือกไปใช้

รวบรวมตัวเลือกไว้ในสไลซ์ แล้วนำแต่ละรายการไปใช้ในลูป ซึ่งเป็นหัวใจของตัวสร้างที่คุณจะสร้างต่อไป

package main

import "fmt"

type Config struct{ Port, Timeout int }
type Option func(*Config)

func WithPort(p int) Option    { return func(c *Config) { c.Port = p } }
func WithTimeout(t int) Option { return func(c *Config) { c.Timeout = t } }

func main() {
	c := &Config{}
	opts := []Option{WithPort(8080), WithTimeout(30)}
	for _, opt := range opts {
		opt(c)
	}
	fmt.Printf("%+v\n", *c)
}

ลำดับมีความสำคัญ

ตัวเลือกจะถูกนำไปใช้ตามลำดับ หากตัวเลือกสองรายการกำหนดค่าฟิลด์เดียวกัน รายการสุดท้ายจะมีผล ซึ่งบางครั้งมีประโยชน์ แต่บางครั้งก็เป็นกับดักที่ควรบันทึกคำอธิบายไว้

ธรรมเนียมการตั้งชื่อ

ตามธรรมเนียม ตัวสร้างตัวเลือกจะตั้งชื่อเป็น With... (เช่น WithPort, WithTLS) เพื่อให้จุดเรียกใช้อ่านคล้ายภาษาอังกฤษ

ตัวเลือกเก็บตรรกะได้

ตัวเลือกเป็นเพียงฟังก์ชัน จึงสามารถตรวจสอบความถูกต้อง คำนวณ หรือรวมค่าได้ ไม่ใช่แค่กำหนดค่าเท่านั้น

เหตุใดฟังก์ชันจึงดีกว่าสตรักต์ในกรณีนี้

  • กำหนดเฉพาะฟิลด์ที่คุณระบุ
  • ชื่อที่อธิบายตัวเองได้ตรงจุดเรียกใช้
  • เพิ่มตัวเลือกใหม่โดยไม่ทำให้ผู้เรียกใช้ไม่ได้

ตรวจสอบความเข้าใจ

ทดสอบความรู้เกี่ยวกับฟังก์ชันตัวเลือกของคุณ

สรุปทบทวน

คุณได้เรียนรู้การสร้างฟังก์ชันตัวเลือก

  • กำหนด type Option func(*Config)
  • ตัวสร้าง WithX คืนค่าโคลเชอร์ที่เปลี่ยนแปลงการกำหนดค่า
  • นำสไลซ์ของตัวเลือกไปใช้ในลูป
  • ลำดับมีความสำคัญ การเขียนค่าครั้งสุดท้ายมีผล

คำถามที่พบบ่อย

บทเรียน “ฟังก์ชันตัวเลือก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ฟังก์ชันตัวเลือก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Go Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันตัวเลือก”

กำหนดค่าด้วยฟังก์ชัน คุณปฏิบัติ Go Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Go Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Go Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ฟังก์ชันตัวเลือก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Go Academy นี้ได้ไหม

ได้ บทเรียน Go Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

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