OOP ในภาษา Go
object oriented programmingหรือ OOP คือการเขียนโปรแกรมเชิงวัตถุ(object) ซึ่งประกอบด้วยสองสิ่งหลัก ๆ คือ คุณสมบัติ (Attributes) และ **พฤติกรรม (Method,Behavior)**โดยภาษา Go (Golang) เองเนี่ยก็มีแนวคิดของ OOP อยู่เช่นกัน ซึ่งเราจะลองมาดูวิธีนำ OOP มาใช้ในภาษา Go กัน ว่ามันจะมีวิธีการที่แตกต่างจากภาษาอื่นหรือไม่ อย่างไร
Go หรือ Golang เป็นภาษาที่มีการระบุ type ชัดเจน หรือที่เราเรียกกันว่า type safe นั่นเอง เพราะฉะนั้นการเขียน OOP ในภาษา Go ก็จะแตกต่างจากภาษาอื่น เช่น Java , C++ หรืออื่น ๆ เพราะด้วยความที่ภาษาที่ยกตัวอย่างมาจะมี class แต่ Go ไม่มี แต่ใน Go เราจะใช้ structs เพื่อกำหนด objects และใช้methods ในการบ่งบอก behavior หรือการกระทำนั่นเองครับ
โดย struct ใน Go จะเป็นการเก็บข้อมูลของฟิลด์ต่าง ๆ ซึ่งแต่ละฟิลด์จะมีชื่อและประเภท ยกตัวอย่างเช่น มี struct ชื่อ Person เป็น object ที่ประกอบด้วยฟิลด์ name และ age
Methods ใน Go คือฟังก์ชันที่เชื่อมโยงกับ struct มันถูกกำหนดโดยใช้การประกาศ “func” คือประกาศฟังก์ชัน ตามด้วย struct และชื่อ method ยกตัวอย่างเช่น method ต่อไปนี้กำหนด “Greet”เป็นฟังก์ชั่นซึ่งก็คือ method สำหรับ “Person” struct
จากตัวอย่างนี้ p คือตัวแปรที่รับ method (receiver**)** เพื่อใช้เข้าถึงฟิลด์ struct Person นั่นเอง
นอกจากนี้ Go ยังสามารถประกาศ struct อื่นเข้ามาใช้ได้เหมือนกัน ยกตัวอย่างคือการ เรียกใช้ struct Person ใน Employee แบบนี้
แบบนี้จะทำให้ struct Employee มีฟิลด์และ method ของ Person และก็มีฟิลด์และ method ของตัวเองด้วย
Go นั้นสามารถใช้ interface ได้อีกด้วย ซึ่ง interface คือการรวมหลาย ๆ method เพื่อเป็นการเชื่อมกับ struct นั้น ๆ ซึ่ง struct ที่มีการประกาศ interface ก็จะใช้ interface นั้นเป็นการเข้าถึงได้นั่นเอง ตัวอย่างเช่น interface Person กำหนด method Speak
จากนั้นเราก็จะสร้างฟังก์ชั่น Speak ที่อยู่ภายใต้ struct Person ขึ้นมา แบบนี้ ซึ่งเราสามารถเรียกใช้ interface นี้พร้อมกับเข้าถึงฟังก์ชัน Speak ได้เลย
ประมาณนี้เลยครับหน้าตาของ OOP ใน Go ซึ่งถ้าลองดูแล้วจะพบว่าแนวคิดของ OOP เช่นการ encapsulation, inheritance, และ polymorphism นั่นยังคงมี เพียงแต่ว่ามันจะทำไปในรูปแบบที่แปลกตาไปจากภาษาอื่น ๆ โดยใช้ struct และ method เป็นหลัก และไม่มี class ทำให้แนวคิด OOP ของ Go นั้นจะมีความเบากว่าและ performance ค่อนข้างจะเร็วกว่าภาษาอื่น ๆ อยู่บ้างครับ
