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

ปัญหาของพารามิเตอร์จำนวนมาก

เหตุใดคอนสตรักเตอร์จึงซับซ้อน

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

เหตุใดตัวสร้างจึงยุ่งยาก

Go ไม่มีอาร์กิวเมนต์เริ่มต้นหรือพารามิเตอร์แบบมีชื่อ เมื่อชนิดมีตัวเลือกเพิ่มขึ้น ลายเซ็นของตัวสร้างจะยาวและยุ่งยากจนเกิดข้อผิดพลาดได้ง่าย

ตัวสร้างที่เพิ่มขึ้นจนยุ่งเหยิง

ลองนึกถึงเซิร์ฟเวอร์ที่มีโฮสต์ พอร์ต ระยะหมดเวลา TLS และการลองใหม่ ตัวสร้างเพียงตัวเดียวต้องรับค่าทั้งหมด

package main

import "fmt"

func NewServer(host string, port, timeout, retries int, tls bool) {
	fmt.Println(host, port, timeout, retries, tls)
}

func main() {
	NewServer("localhost", 8080, 30, 3, false)
}

ปัญหาด้านความอ่านง่าย

จุดเรียกใช้จะกลายเป็นแถวของค่าตามตำแหน่งที่อ่านได้ยาก NewServer("localhost", 8080, 30, 3, false) — ตัวเลขใดคือระยะหมดเวลา ตัวเลขใดคือจำนวนการลองใหม่

สลับกันได้ง่าย

พารามิเตอร์ int สองตัวที่อยู่ติดกันสามารถสลับกันได้ง่ายมาก และคอมไพเลอร์จะตรวจจับไม่ได้

package main

import "fmt"

func connect(timeout, retries int) { fmt.Println("timeout", timeout, "retries", retries) }

func main() {
	connect(3, 30)
}

แนวทางใช้สตรักต์การกำหนดค่า

ทางเลือกหนึ่งคือส่งสตรักต์การกำหนดค่าเข้าไป ซึ่งดีกว่าเดิม แต่ทุกฟิลด์จะมีค่าเริ่มต้นเป็นค่าศูนย์ ซึ่งอาจไม่ถูกต้อง (เช่น ระยะหมดเวลาเป็น 0)

package main

import "fmt"

type Config struct {
	Host    string
	Port    int
	Timeout int
}

func NewServer(c Config) { fmt.Printf("%+v\n", c) }

func main() {
	NewServer(Config{Host: "localhost", Port: 8080})
}

กับดักค่าศูนย์

เมื่อใช้สตรักต์การกำหนดค่า การไม่ระบุ Timeout จะกำหนดค่าเป็น 0 โดยไม่มีการแจ้งเตือน คุณจึงแยก «ใช้ค่าเริ่มต้น» ออกจาก «กำหนดเป็นศูนย์โดยเจตนา» ไม่ได้

ตัวสร้างหลายตัว

อีกแนวทางหนึ่งคือสร้างตัวสร้างจำนวนมาก — NewServer, NewServerWithTLS, NewServerWithTimeout — ซึ่งจะเพิ่มจำนวนขึ้นอย่างทวีคูณตามชุดผสม

ความเข้ากันได้ย้อนหลัง

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

สิ่งที่เราต้องการ

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

เริ่มใช้ตัวเลือกแบบฟังก์ชัน

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

ภาพตัวอย่าง

เป้าหมายคือการเรียกใช้แบบ NewServer("localhost", WithPort(9000), WithTLS()) ซึ่งชัดเจน เป็นตัวเลือก และขยายต่อได้

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

ทดสอบความเข้าใจเกี่ยวกับปัญหานี้

สรุปทบทวน

คุณได้เห็นแล้วว่าเหตุใดตัวสร้างที่มีพารามิเตอร์จำนวนมากจึงเป็นปัญหา

  • อาร์กิวเมนต์ตามตำแหน่งอ่านได้ยากและสลับกันได้
  • สตรักต์การกำหนดค่าติดกับดักค่าศูนย์
  • ตัวสร้างจำนวนมากเพิ่มจำนวนขึ้นอย่างทวีคูณตามชุดผสม
  • การเพิ่มพารามิเตอร์ทำให้ผู้เรียกใช้ไม่ได้

ตัวเลือกแบบฟังก์ชันแก้ปัญหาเหล่านี้ทั้งหมด

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

บทเรียน “ปัญหาของพารามิเตอร์จำนวนมาก” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ปัญหาของพารามิเตอร์จำนวนมาก”

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

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

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

บทเรียน “ปัญหาของพารามิเตอร์จำนวนมาก” ใช้เวลานานแค่ไหน

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

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

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

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

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