https://avatars.githubusercontent.com/u/1217739?size=192

Go กับการ re-use memory ด้วย sync.Pool

ถ้าใครเขียน goroutine ก็คงจะเคยพบเจอกับ sync.WaitGroup ที่ใช้ในการทำ wait group ให้ goroutine กันแล้ว แต่ใน pkg sync มี type นึงที่มีประโยชน์ในงานที่อยากจะมาแนะนำ คือ sync.Pool ที่จะมาช่วย re-use memory ลดการ allocate ที่ต้องใช้ของเดิมซ้ำ ๆ ได้

Go กับปัญหาโลกแตก Value หรือ Pointer

ในเวลาที่เขียนภาษา Go มักจะมีคำถามนึงโผล่มาเสมอ คือตกลง func นี้จะใช้ Value หรือ Pointer ดีนะ เดี๋ยวเรามาดูความแตกต่างกัน

ออกแบบ Go struct ด้วยความรู้วิชา Computer Architecture และ Data Structure

ตอนสมัยเรียนวิศวคอมพิวเตอร์มีคำถามนึงโผล่มาเสมอว่าวิชาอย่าง Computer Architecture กับ Data Structure เรียนไปทำไมกันนะ จนกระทั้งจบออกมาได้เขียนภาษา Go ถึงได้เอะใจว่า ทำไม Go ถึงได้มี data type แบบกำหนดขนาด เช่น int8 int16 int32 int64 และอื่น ๆ ทำไมถึงไม่เป็น int หรือ number เฉย ๆ ไปเลยแบบภาษาขี้เกียจอย่าง TypeScript กันนะ จนได้มานั่งอ่านเกี่ยวกับ sizes in Go ถึงได้รู้ว่าเราสามารถใช้ความรู้ในวิชา Computer Architecture และ Data Structure มาช่วยให้เราเขียน Go ออกมาได้ประสิทธิภาพอย่างที่ควรจะเป็น

เมื่อ Go กับ SOLID มาเจอกัน

การพัฒนาซอฟต์แวร์ขึ้นมาสักชุดนึงนั้นหากเราเน้นเร่งทำขึ้นมาโดยเน้นว่าเสร็จใช้งานได้ไปก่อนแล้วค่อยมาตามเก็บรายละเอียดที่หลัง (ซึ่งส่วนใหญ่ก็ไม่เคยจะเก็บหมดหรอก) สิ่งหนึ่งที่มักจะต้องเจอเลยก็คือ เพิ่มเติมฟีเจอร์ถึงจุดหนึ่งจะเริ่มรู้สึกว่าก็แก้ไขเพิ่มเติมอะไรก็เป็นเรื่องยากลำบาก ติดพันกันไปหมด หรือว่าเมื่อมีความต้องการใช้งานเพิ่มขึ้น กลับไม่สามารถขยายได้ตามความต้องการ ส่วนหนึ่งเพราะการพัฒนาซอฟต์แวร์นั้นไม่ได้มีการวางแผนโครงร่าง/แนวทางที่จะใช้พัฒนาโปรเจคนั่นเอง ซึ่งวันนี้จะมาแนะนำแนวทางนึงในการพัฒานาซอฟต์แวร์ให้มี คุณภาพโค้ดที่ดี, ดูแลรักษาง่าย, สามารถขยายได้ง่ายตามความต้องการที่เพิ่มเข้ามา ซึ่งแนวทางนึงที่คิดว่าค่อนข้างเข้าใจง่ายคือ SOLID นั่นเอง ซึ่งในตัวอย่างวันนี้จะอยู่ในภาษา Go นะครับ (ก็แน่สิผมถนัด Go #ถถถ)

ลองเทียบประสิทธิภาพของ Apps กับ Database ระหว่าง TCP กับ Unix socket

ปกติแล้วเวลาใช้งาน database ในระดับงานที่ไม่ใหญ่มาก ใน container เราก็มักจะเชื่อมต่อกันด้วย TCP/IP กันถูกไหมครับ แต่รู้หรือไม่ว่าเราสามารถเพิ่มประสิทธิภาพง่าย ๆ ด้วยการลด overhead ของ TCP ออกด้วยการใช้ Unix socket แทนผลจะเป็นยังไง ลองมาดูกันครับ

เปิดเว็บเซอร์วิสสู่ชาวโลกด้วย K3S + Cloudflare Tunnel

หากเรามี home lab หรือ service ที่อยู่ใน k3s/k8s อยากเปิดให้ชาวโลกได้เข้ามาใช้งาน แต่ไม่มี public IP จะทำอย่างไรได้นะ ยิ่งในโลกที่ทุกวันนี้ ISP แจก IP แบบ Carrier-grade NAT หรือเรียกติดปากกันว่า large-scale NAT (LSN) ทำให้จะใช้ DDNS ก็ลำบากอัปเดต IP กันอีก จึงเป็นที่มาของพระเอกในบทความนี้ครับ