Empty Struct

สำหรับ Go type struct ไม่จำเป็นต้องมี field ก็ได้เช่น type Empty struct {} เมื่อไม่มี field หน่วยความจำที่ใช้สำหรับ struct ว่างๆแบบนี้ก็คือ 0 bytes นั่นเอง ลองใช้ฟังก์ชัน Sizeof จาก package unsafe เช็คดูได้ดังนี้ เมื่อเป็น struct แบบนี้ จะเอามาทำอะไรได้ ที่ผมเจอมาคือ เอามาใช้กับ channel ในกรณีที่ต้องการใช้ channel เป็นการควบคุมจังหวะการทำงานของ goroutine ไม่ได้ต้องการส่งข้อมูลจริงๆ หรือ เป็นการบอกว่า goroutine ทำงานเสร็จแล้ว เช่น ถ้าเราสร้าง array ของ empty struct เนื้อที่รวมที่ได้ก็เป็น 0 เช่นกัน ส่วน slice ของ empty struct […]

Continue reading →

Method Sets

จากที่ได้อธิบายเรื่อง Method Receiver ไปแล้วว่าแบบที่เป็น Pointer กับแบบที่เป็น Type ธรรมดา ต่างกันอย่างไร วันนี้จะมาดูว่าเวลาที่เรากำหนดค่าของ Type หรือ Pointer ของ Type ให้กับตัวแปรแบบ Interface นั้น Interface จะรู้ได้อย่างไรว่า Type นี้ implement interface นี้หรือไม่ สำหรับ Go นั้นจะดูว่า Type นั้นมี Method Sets ตรงกับที่ระบุไว้ใน Interface ครบหรือไม่นั่นเอง ตัวอย่างเช่น มี interface ดังนี้ interface นี้มีสอง Methods คือ Read กับ Write ดังนั้นเราจึงรู้ว่า Type ที่จะกำหนดค่าให้ interface นี้ได้ต้องมีสอง Methods นี้ ทีนี้เรารู้ว่า Method […]

Continue reading →

Method Receiver

ถ้ามองในมุม OOP Method แสดงถึง Behavior ของ Object กว่า Object นั้นกระทำ action อะไรได้บ้าง สำหรับ Method ของ Go ก็เช่นกัน การกำหนด receiver ก็เพื่อบอกว่า type ไหนจะมีหน้าที่ทำงาน method นี้ ทีนี้ การทำหนด type ของ receiver เราสามารถกำหนดได้ทั้ง Type ธรรมดา และ pointer ของ Type นั้นๆ เรามาดูว่ามันแตกต่างกันยังไง สมมุติเรามี type Account ดังนี้ ในการสร้าง method มีหลักง่ายๆคือ ถ้าเราต้องการเปลี่ยนแปลงค่าของ Type ที่เป็น receiver เราจะเลือกใช้ pointer เป็น receiver ถ้าเราไม่ต้องการ เราจะเลือกใช้เป็น […]

Continue reading →

Go ไม่มี class และ object แต่ทำไมถึงมี Method และ Interface

The obvious example is the way interfaces give us the composition of components. It doesn’t matter what that thing is, if it implements method M I can just drop it in here. – Rob Pike ( Less is exponentially more )   Go เป็น procedure language ที่เราสร้าง Type ใหม่เองได้ และ สร้าง method ให้เจาะจงแต่ละ Type ได้ แบบที่เคยเขียนไว้คราวก่อน […]

Continue reading →