ค่าที่ส่งคืนหลายค่า
ส่งคืนทูเพิลและรูปแบบการจัดการข้อผิดพลาด
ค่าที่ส่งคืนหลายค่า เป็นบทเรียน Go Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Go Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Go Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงต้องคืนค่าหลายค่า
ฟังก์ชันใน Go สามารถคืนค่าหลายค่าได้ จึงไม่จำเป็นต้องใช้พารามิเตอร์สำหรับส่งค่ากลับหรือข้อยกเว้น รูปแบบที่พบบ่อยที่สุดคือการคืนค่าผลลัพธ์และข้อผิดพลาด:
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}การจัดการค่าที่คืนกลับหลายค่า
ผู้เรียกจะได้รับค่าที่คืนกลับทั้งหมดเป็นทูเพิล ใช้ _ เพื่อทิ้งค่าที่ไม่ต้องการ:
result, err := divide(10, 3)
if err != nil {
log.Fatal(err)
}
fmt.Println(result)
value, _ := divide(8, 2) // discard errorค่าที่คืนกลับแบบมีชื่อ
สามารถตั้งชื่อค่าที่คืนกลับได้ ทำให้ค่าเหล่านั้นกลายเป็นตัวแปรภายในฟังก์ชัน:
func minMax(nums []int) (min, max int) {
min, max = nums[0], nums[0]
for _, n := range nums[1:] {
if n < min { min = n }
if n > max { max = n }
}
return // naked return
}การคืนค่าแบบไม่ระบุค่า
การใช้ return โดยไม่มีอาร์กิวเมนต์จะคืนค่าตัวแปรผลลัพธ์ที่มีชื่อกำกับไว้ โปรดใช้เท่าที่จำเป็น โดยใช้เฉพาะในฟังก์ชันสั้น ๆ ที่ชื่อสื่อความหมายได้ชัดเจนในตัวเอง:
- ฟังก์ชันสั้น ๆ: ใช้ได้
- ฟังก์ชันยาว: ทำให้อ่านยากขึ้น ควรใช้การคืนค่าแบบระบุค่าอย่างชัดเจน
รูปแบบ (ค่า, ข้อผิดพลาด)
รูปแบบมาตรฐานสำหรับจัดการข้อผิดพลาดใน Go:
func readConfig(path string) (Config, error) {
data, err := os.ReadFile(path)
if err != nil {
return Config{}, fmt.Errorf("read config: %w", err)
}
var cfg Config
return cfg, json.Unmarshal(data, &cfg)
}อย่าเพิกเฉยต่อข้อผิดพลาด
การเพิกเฉยต่อข้อผิดพลาดด้วย _ เป็นอันตราย แนวทางปฏิบัติที่ดีมีดังนี้:
- ตรวจสอบข้อผิดพลาดทุกครั้ง เว้นแต่จะมีเหตุผลเฉพาะที่ไม่ต้องตรวจสอบ
- ห่อข้อผิดพลาดพร้อมบริบทโดยใช้
fmt.Errorf("op: %w", err) - ใช้
log.Fatalหรือ panic เฉพาะที่ขอบเขตของโปรแกรม ไม่ใช่ลึกเข้าไปในไลบรารี
การคืนค่าสามค่า
ฟังก์ชันบางอย่างคืนค่าสามค่า แม้จะพบรูปแบบนี้ไม่บ่อยนัก:
func parseIPPort(s string) (ip string, port int, err error) {
// ... parsing logic
return
}การคืนค่าโครงสร้างเทียบกับหลายค่า
ควรคืนค่าเป็นโครงสร้างหรือหลายค่าในกรณีใด:
- ค่าที่เกี่ยวข้องกันอย่างมาก 2–3 ค่า: การคืนค่าหลายค่าทำได้เหมาะสม
- ค่าตั้งแต่ 4 ค่าขึ้นไป หรือมีฟิลด์ที่ไม่บังคับ: ใช้โครงสร้าง
- รูปแบบ (ค่า, ข้อผิดพลาด): ให้คืนค่าหลายค่าเสมอ
การกำหนดค่าให้ตัวแปรที่มีอยู่แล้ว
ใช้ = (ไม่ใช่ :=) เมื่อต้องกำหนดค่าให้ตัวแปรที่ประกาศไว้นอกการเรียกฟังก์ชันแล้ว:
var cfg Config
var err error
cfg, err = loadConfig()
if err != nil { ... }การคืนค่าหลายค่าในการเรียกเมธอดต่อเนื่อง
Go ไม่รองรับการเรียกเมธอดต่อเนื่องกับค่าที่คืนมาหลายค่าโดยตรง (ต่างจาก Result.map ของ Rust) ให้ใช้ตัวแปรระหว่างทางเพื่อจัดการข้อผิดพลาดในแต่ละขั้นตอน:
data, err := fetchData(url)
if err != nil { return err }
parsed, err := parseData(data)
if err != nil { return err }
return save(parsed)ตรวจสอบความเข้าใจ
การคืนค่าแบบไม่ระบุค่าทำอะไรใน Go
สรุป: การคืนค่าหลายค่า
การคืนค่าหลายค่าเป็นสำนวนสำคัญของ Go:
- ฟังก์ชันสามารถคืนค่าหลายค่าในรายการที่อยู่ภายในวงเล็บได้
- รูปแบบ (ค่า, ข้อผิดพลาด) พบได้ทั่วไป ต้องตรวจสอบข้อผิดพลาดเสมอ
- ตัวแปรผลลัพธ์ที่มีชื่อกำกับช่วยให้ใช้การคืนค่าแบบไม่ระบุค่าได้ แต่ควรใช้เท่าที่จำเป็น
- ใช้
_เพื่อทิ้งค่าที่ไม่ต้องการ - ควรใช้การคืนค่าหลายค่าแทนพารามิเตอร์สำหรับส่งค่าผลลัพธ์กลับ เพื่อให้ส่วนเชื่อมต่อใช้งานได้สะอาดกว่า
ถัดไป: ฟังก์ชันที่รับอาร์กิวเมนต์จำนวนไม่แน่นอน
คำถามที่พบบ่อย
บทเรียน “ค่าที่ส่งคืนหลายค่า” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ค่าที่ส่งคืนหลายค่า” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานฟังก์ชันและลายเซ็น
- ค่าที่ส่งคืนหลายค่า
- ฟังก์ชันแบบรับอาร์กิวเมนต์ไม่จำกัดจำนวน
- defer ฟังก์ชันไม่ระบุชื่อ และคลอสเชอร์