อ่านบทความเรื่อง Partially-Implemented Interfaces in Go
เลยเพิ่งรู้ว่า เราสามารถ implement function บางตัวใน interface ได้
ไม่จำเป็นต้น implement ให้ครบทุก ๆ function
เป็นอีกความรู้หนึ่งที่น่าสนใจ
เนื่องจากมีปัญหานี้ตอนทำการ mock หรือ test double บ่อย ๆ
โดยวิธีการง่ายดี คือ การใช้งาน embedded interface นั่นเอง
แสดงว่า ผมอ่านเอกสารไม่ดีเอง หรือ ใช้งานไม่เป็นเอง 555
ตัวอย่างการใช้งานเป็นดังนี้
เริ่มเขียน code แบบที่ไม่รู้เรื่องนี้
[gist id="cb6cdfab7cbf274e6dfdf1b3bdf741e3" file="main_before.go"]หลังจากที่รู้ จะเขียนได้ดังนี้
[gist id="cb6cdfab7cbf274e6dfdf1b3bdf741e3" file="main_after.go"]ทำให้เราทำการ implement เฉพาะ function ที่ต้องการเท่านั้นเอง
ต้องระวังการใช้งานด้วยนะ !!
แต่ถ้ามองอีกมุมคือ การออกแบบ interface มีปัญหาหรือไม่นะ
ทำไม interface หนึ่ง ๆ ต้องมี function เยอะ ๆ ด้วย
ทำไมไม่ออกแบบ interface ที่มีการทำงานเฉพาะเจาะจงลงไปเลย
เป็นสิ่งที่น่าคิดเหมือนกัน
Reference Websites