การกำหนดและใช้งานสตรักต์
ลิเทอรัลของสตรักต์ การเข้าถึงฟิลด์ และการฝัง
การกำหนดและใช้งานสตรักต์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดและใช้งานสตรักต์
- เมธอดบนสตรักต์
- รูปแบบคอนสตรักเตอร์
- สตรักต์ไม่ระบุชื่อและการประกอบ