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

การกำหนดและใช้งานสตรักต์

ลิเทอรัลของสตรักต์ การเข้าถึงฟิลด์ และการฝัง

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

สตรักต์คืออะไร

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

การประกาศสตรักต์

กำหนดชนิดสตรักต์ด้วยคีย์เวิร์ด type:

package main
import "fmt"

type Person struct {
    Name string
    Age  int
    City string
}

func main() {
    p := Person{Name: "Alice", Age: 30, City: "London"}
    fmt.Println(p)
}

ลิเทอรัลของสตรักต์

มีสองรูปแบบ ได้แก่ การระบุชื่อฟิลด์ (แนะนำ) และการระบุตามตำแหน่ง (ขึ้นอยู่กับลำดับและเปราะบาง):

package main

type Point struct{ X, Y int }

func main() {
    p1 := Point{X: 1, Y: 2} // named — preferred
    p2 := Point{3, 4}        // positional — avoid in non-test code
    _ = p1; _ = p2
}

การเข้าถึงฟิลด์

ใช้รูปแบบจุดเพื่ออ่านและเขียนฟิลด์:

package main
import "fmt"

type Car struct{ Brand string; Speed int }

func main() {
    c := Car{Brand: "Tesla", Speed: 200}
    fmt.Println(c.Brand)  // Tesla
    c.Speed = 250
    fmt.Println(c.Speed)  // 250
}

ค่าศูนย์ของสตรักต์

ค่าศูนย์ของสตรักต์จะกำหนดฟิลด์ทั้งหมดให้เป็นค่าศูนย์ตามชนิดของฟิลด์นั้น คุณสามารถใช้งานได้อย่างปลอดภัยโดยไม่ต้องกำหนดค่าเริ่มต้น:

package main
import "fmt"

type Config struct{ Debug bool; Port int; Host string }

func main() {
    var cfg Config
    fmt.Println(cfg) // {false 0 }
    cfg.Port = 8080
    fmt.Println(cfg) // {false 8080 }
}

การเปรียบเทียบสตรักต์

สามารถเปรียบเทียบสตรักต์ด้วย == ได้ หากฟิลด์ทั้งหมดของสตรักต์สามารถเปรียบเทียบได้:

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    a := Point{1, 2}
    b := Point{1, 2}
    c := Point{3, 4}
    fmt.Println(a == b) // true
    fmt.Println(a == c) // false
}

สตรักต์เป็นชนิดข้อมูลแบบค่า

การกำหนดค่าสตรักต์จะคัดลอกฟิลด์ทั้งหมด การเปลี่ยนแปลงสำเนาจะไม่ส่งผลต่อต้นฉบับ:

package main
import "fmt"

type Rect struct{ W, H int }

func main() {
    r1 := Rect{10, 20}
    r2 := r1
    r2.W = 99
    fmt.Println(r1) // {10 20}
    fmt.Println(r2) // {99 20}
}

สตรักต์ซ้อนกัน

ฟิลด์ของสตรักต์สามารถเป็นสตรักต์ได้เช่นกัน:

package main
import "fmt"

type Address struct{ City, Country string }
type Employee struct {
    Name    string
    Age     int
    Address Address
}

func main() {
    e := Employee{Name: "Bob", Age: 28, Address: Address{"Berlin", "DE"}}
    fmt.Println(e.Address.City) // Berlin
}

ฟิลด์ที่ส่งออกและไม่ส่งออก

ฟิลด์ที่ขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่จะเป็นฟิลด์ที่ส่งออก (สาธารณะ) ส่วนฟิลด์ตัวพิมพ์เล็กจะเป็นฟิลด์ที่ไม่ส่งออก (ใช้ได้เฉพาะภายในแพ็กเกจ):

package main

type config struct {
    host string // unexported
    Port int    // exported
}

func main() {
    c := config{host: "localhost", Port: 8080}
    _ = c
}

แท็กของสตรักต์

แท็กของสตรักต์ใช้ระบุข้อมูลเมตา เช่น สำหรับการเข้ารหัส JSON โดยแท็กเหล่านี้เป็นลิเทอรัลสตริงที่อยู่หลังชนิดของฟิลด์:

package main

type User struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email,omitempty"`
}

func main() { _ = User{} }

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ค่าศูนย์ของฟิลด์ bool ในสตรักต์คืออะไร

สรุป: สตรักต์

ประเด็นสำคัญ:

  • สตรักต์ใช้จัดกลุ่มฟิลด์ที่เกี่ยวข้องกันไว้เป็นชนิดข้อมูลที่มีชื่อ
  • ใช้ลิเทอรัลที่ระบุชื่อฟิลด์ และหลีกเลี่ยงการระบุตามตำแหน่ง
  • สตรักต์เป็นชนิดข้อมูลแบบค่า การกำหนดค่าจึงเป็นการคัดลอก
  • ฟิลด์ที่ขึ้นต้นด้วยตัวพิมพ์ใหญ่จะถูกส่งออก
  • แท็กของสตรักต์ใช้เพิ่มข้อมูลเมตาสำหรับไลบรารี เช่น encoding/json

โจทย์ฝึกปฏิบัติ

กำหนดสตรักต์ Product ที่มีฟิลด์ Name string, Price float64 และ InStock bool สร้างอินสแตนซ์สองรายการ เปรียบเทียบด้วย == แล้วพิมพ์ผลลัพธ์

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

บทเรียน “การกำหนดและใช้งานสตรักต์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดและใช้งานสตรักต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ 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. รูปแบบคอนสตรักเตอร์
  4. สตรักต์ไม่ระบุชื่อและการประกอบ
← กลับไปที่ Go Academy