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

ค่าที่ส่งคืนหลายค่า

ส่งคืนทูเพิลและรูปแบบการจัดการข้อผิดพลาด

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

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

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