Struct ใน Go คืออะไร?
Struct คือโครงสร้างข้อมูลชนิดหนึ่งในภาษา Go ซึ่งทำหน้าที่เก็บ field หลาย ๆ ตัวรวมกัน เพื่อแทนวัตถุหรือ entity เช่น ผู้ใช้, สินค้า, รถ ฯลฯ
โครงสร้างตัวอย่าง struct:
type Person struct { Name string Age int }
สามารถใช้งานได้ดังนี้:
p := Person{Name: "King", Age: 34} fmt.Println(p.Name) // "King"
Interface ใน Go คืออะไร?
Interface ในภาษา Go คือชุดของ method signature ที่ struct ใด ๆ ก็สามารถ implement ได้โดยไม่ต้อง explicit declare เหมือนภาษาอื่น
ตัวอย่าง Interface:
type Speaker interface { Speak() string }
Struct ที่ implement interface:
type Dog struct {} func (d Dog) Speak() string { return "Woof!" }
ใช้งานร่วมกัน:
func SaySomething(s Speaker) { fmt.Println(s.Speak()) } func main() { SaySomething(Dog{}) // พิมพ์ "Woof!" }
ความแตกต่างระหว่าง Struct และ Interface
หัวข้อ | Struct | Interface |
---|---|---|
การใช้งาน | เก็บข้อมูล | กำหนดพฤติกรรม (methods) |
สามารถมี method ได้หรือไม่ | ได้ (ผ่าน receiver) | เฉพาะ signature เท่านั้น |
ใช้กับ Polymorphism | ไม่ได้ | ได้ |
การ implement | – | automatic implicit implement |
ภาพประกอบ: เปรียบเทียบ Struct และ Interface

การใช้งานร่วมกัน
คุณสามารถใช้ struct กับ interface เพื่อเขียนโปรแกรมแบบยืดหยุ่นได้ เช่น ใช้ interface เป็น parameter เพื่อรับ struct ได้หลายแบบ:
type Logger interface { Log(msg string) } type ConsoleLogger struct{} func (c ConsoleLogger) Log(msg string) { fmt.Println(msg) } func Process(l Logger) { l.Log("เริ่มประมวลผล...") }
หาก struct ใหม่ตรงกับ interface ก็สามารถใช้งานได้ทันที!
Best Practices
- ใช้ struct สำหรับเก็บข้อมูล
- ใช้ interface เพื่อออกแบบให้รองรับหลายพฤติกรรม
- กำหนด interface ที่จำเป็น ไม่ควรใหญ่เกินไป (ใช้ principle: Interface Segregation)
- ตั้งชื่อ interface ให้ลงท้ายด้วย -er เช่น:
Reader
,Writer
บทสรุป
Struct และ Interface เป็น 2 สิ่งสำคัญในภาษา Go ที่ใช้ร่วมกันอย่างทรงพลัง Struct ช่วยเก็บข้อมูลแบบมีโครงสร้าง ส่วน Interface ทำให้ระบบยืดหยุ่นและรองรับ Polymorphism ได้อย่างสะอาด
บทความโดย: poolsawat.com | เขียนโดย: King Pool