Go Academy · บทเรียน

การแปลงชนิดข้อมูลใน Go

การแปลงอย่างชัดเจน นามแฝงชนิดข้อมูล และชนิดข้อมูลที่กำหนดขึ้น

บทเรียน 4 จาก 412 ขั้นตอน

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

เหตุใดจึงต้องแปลงชนิดอย่างชัดเจน

Go ไม่แปลงชนิดโดยปริยายระหว่างชนิดต่าง ๆ สิ่งนี้ช่วยป้องกันข้อผิดพลาดที่สังเกตได้ยาก เช่น จำนวนเต็มขนาดเล็กเกิดค่าล้นโดยไม่รู้ตัวเมื่อแปลงเป็นชนิดที่ใหญ่กว่า หรือจำนวนทศนิยมสูญเสียความละเอียด

  • ต้องเขียนการแปลงอย่างชัดเจน: T(value)
  • คอมไพเลอร์ตรวจจับชนิดที่ไม่ตรงกันได้ตั้งแต่ขณะคอมไพล์
  • ทำให้โค้ด Go คาดเดาได้และปลอดภัย

การแปลงชนิดตัวเลข

แปลงระหว่างชนิดตัวเลขโดยใช้ชนิดเป้าหมายในรูปการเรียกฟังก์ชัน:

package main

func main() {
    var i int = 42
    var f float64 = float64(i)
    var u uint = uint(f)
    _ = u
}

ความเสี่ยงจากการตัดทอน

การแปลงจากชนิดที่ใหญ่กว่าเป็นชนิดที่เล็กกว่าอาจตัดทอนค่า ไม่มีการแจ้งข้อผิดพลาด — คุณจึงต้องระมัดระวัง:

package main

func main() {
    big := int64(300)
    small := int8(big) // 300 % 256 = 44 — silent truncation!
    _ = small
}

การแปลงระหว่าง string กับ []byte

การแปลงระหว่าง string กับ []byte จะคัดลอกข้อมูล:

package main

func main() {
    s := "hello"
    b := []byte(s)   // string to byte slice
    b[0] = 'H'
    s2 := string(b)  // byte slice to string
    _ = s2
}

string กับ []rune

สำหรับการจัดการอักขระที่ปลอดภัยกับ Unicode ให้แปลงเป็น []rune:

package main

func main() {
    s := "Merhaba"
    runes := []rune(s)
    _ = len(runes) // character count, not byte count
}

แพ็กเกจ strconv

สำหรับการแปลงระหว่างสตริงกับตัวเลข ให้ใช้แพ็กเกจ strconv:

import "strconv"

func main() {
    n, err := strconv.Atoi("42")   // string -> int
    s := strconv.Itoa(123)          // int -> string
    _ = n; _ = err; _ = s
}

strconv.ParseFloat และ FormatFloat

แยกวิเคราะห์และจัดรูปแบบสตริงจำนวนทศนิยมอย่างปลอดภัย:

import "strconv"

func main() {
    f, err := strconv.ParseFloat("3.14", 64)
    if err != nil { return }
    s := strconv.FormatFloat(f, 'f', 2, 64) // "3.14"
    _ = s
}

ชื่อแทนชนิดเทียบกับชนิดที่กำหนด

Go แยกความแตกต่างระหว่างชื่อแทนชนิดกับชนิดที่กำหนด:

  • type Celsius float64 — ชนิดใหม่ที่กำหนดขึ้น ต้องแปลงชนิดอย่างชัดเจนเมื่อแปลงไปมาจาก float64
  • type Celsius = float64 — ชื่อแทน ใช้แทนกันกับ float64 ได้

ตัวอย่างประเภทที่กำหนดขึ้นเอง

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

type Celsius float64
type Fahrenheit float64

func CtoF(c Celsius) Fahrenheit {
    return Fahrenheit(c*9/5 + 32)
}

func main() {
    boiling := Celsius(100)
    _ = CtoF(boiling)
}

การแปลงเป็นประเภทอินเทอร์เฟซ

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

var i interface{} = "hello"
s, ok := i.(string) // type assertion
if ok {
    _ = s // safe to use
}

คำถามทบทวน

ฟังก์ชันใดใช้แปลงสตริงเป็นจำนวนเต็มใน Go

สรุป: การแปลงประเภท

ประเด็นสำคัญเกี่ยวกับการแปลงประเภทใน Go:

  • Go ไม่แปลงประเภทโดยอัตโนมัติ — ให้ใช้รูปแบบไวยากรณ์ T(value)
  • การแปลงค่าตัวเลขอาจทำให้ข้อมูลถูกตัดทอน — ต้องระบุและตระหนักถึงความเสี่ยงอย่างชัดเจน
  • []byte(s) และ string(b) จะคัดลอกข้อมูล
  • ใช้ strconv.Atoi / strconv.Itoa สำหรับการแปลงระหว่างสตริงกับตัวเลข
  • ประเภทที่กำหนดขึ้นเองต้องแปลงอย่างชัดเจน แต่ชื่อแทนประเภทไม่ต้องแปลง

หลักสูตรถัดไป: การควบคุมลำดับการทำงานด้วย if, for และ switch

เริ่มต้นได้ฟรี

เรียนรู้ Go ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
51
บทเรียน
203

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

บทเรียน “การแปลงชนิดข้อมูลใน Go” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงชนิดข้อมูลใน Go”

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

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

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

บทเรียน “การแปลงชนิดข้อมูลใน Go” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การประกาศตัวแปรใน Go
  2. ชนิดข้อมูลในตัวของ Go
  3. ค่าคงที่และ iota
  4. การแปลงชนิดข้อมูลใน Go
← กลับไปที่ Go Academy