ทำความเข้าใจกับ Struct ในภาษา Go
ว่าแนวคิดของมันคืออะไร
เทียบกลับไปยัง OOP อย่างไร
การประกาศ struct
การเรียกใช้งาน
กำหนดขอบเขตการใช้งาน
เริ่มที่ Struct มันคืออะไรกันก่อน
เขาบอกว่ามันคือ class ใน OOP
มีคำถามที่น่าสนใจเกี่ยวกับ Go คือ
Go เป็นภาษา Object-Oriented หรือไม่
คำตอบจาก FAQ ของ Go ก็คือ เป็นและไม่เป็น
แต่ Go ไม่มี keyword ชื่อ class นะ มีแต่ struct
ส่วนภาษาอื่นๆ เช่น Java, C#, C++ มีทั้งคู่เลย
แต่ว่าการใช้งานแตกต่างกันโดยสิ้นเชิง
struct คือ ชนิดข้อมูลที่เรากำหนดได้เอง
โดยประกอบไปด้วย fields ต่างๆ
ตัวอย่างเช่น
type Counter struct { n int }
สร้างโครงสร้างข้อมูลชนิด Counter ขึ้นมา
ประกอบไปด้วย field หรือ property ชื่อว่า n เป็นจำนวนเต็ม
เอาไว้นับจำนวนข้อมูล
สิ่งที่สังเกตเห้นได้ชัดก็คือ ใน struct ไม่มี method/function การทำงานใดๆ เลย
นั่นคือสิ่งที่แตกต่างกับพวก Java
แต่สามารถสร้าง method/function ชื่อว่า count() ของ Counter ได้ดังนี้
package main import "fmt" type Counter struct { n int } func (counter *Counter) count() { counter.n++ fmt.Printf("counter = %d\n", counter.n) } func main(){ counter := new(Counter) counter.count() counter.count() counter.count() }
สามารถทำการ Encapsulate สำหรับการเข้าถึง Struct และตัวแปรต่างๆ ได้ดังนี้
ในภาษาอื่นๆ อาจจะมี public, protected, private, default
แต่ใน Go นั้นไม่มี แต่มีอะไรที่ง่ายกว่านั้น คือ
ถ้าตัวแรกของชื่อ struct ขึ้นต้นด้วยตัวใหญ่
สามารถเห็นจาก package อื่น เช่น
type notExport struct { } type Export struct { notExportVariable int ExportVariable int }
เป็นแนวคิดที่เรียบง่ายมาก แต่ใช้ได้ผลดีมาก
และคุณไม่ต้องไปดูที่อื่นเลยว่า ตัวแปรมันมีขอบเขตอยู่ตรงไหน
Reference Websites
http://www.golang-book.com/9
http://golang.org/doc/effective_go.html#interfaces_and_types
http://golangtutorials.blogspot.com/2011/06/structs-in-go-instead-of-classes-in.html
http://www.golang-book.com/9