เฮโย่ว 👋🏻 สวัสดีฮะ
พอดีช่วงก่อนได้มีโอกาศไปงาน
Golang Beyond Meetup 2025 ซึ่งทาง KKP หรือ
ธนาคารเกียรตินาคิน ได้จัดขึ้น ถ้าได้ใช้แอป Dime! ก็ ทีม tech ก็มี service แอปนี้ด้วยละที่เราพอพอคุ้นเคยกัน
ออกตัวว่าเราเองก็ยังไม่ได้มีโอกาศใช้ภาษา go กับงานที่ทำอยู่จริงๆถึง production สักที แต่ก็ติดตามภาษา go มาอยู่เป็นช่วงๆ อาจจะไม่ได้ช่ำมากมาย แล้วก่อนหน้า เราห่างหายจากงาน meeting ของแบบนี่ของสาย tech แบบนี้มากสักพักใหญ่แล้ว พอเห็น agenda หัวข้อมีหลายส่วนที่เราสนใจเลยรีบมุ่งอยากมาเลย ซึ้งหัวข้อก็จะมีประมาณนี้
# Common Mistakes in Go and How to Avoid Them
# The Art of Context: How to Use Context Properly
# Dependency Injection in Golang
# From Zero to Hero: Making Your App Production-Ready to Die
# Building a Convolutional Neural Network (CNN) with Go and Gorgonia
ซึ้งเราก็คงไม่ได้ลงอธิยายรายละเอียดมากหนัก เอาเป็นว่าเน้นส่วนที่เราสนใจ กับ แชร์ resource ในงานเพิ่มเติมนะ
🏷️ Common Mistakes in Go and How to Avoid Them
หัวข้อนี้หลักๆ พี่เค้าจะมาแชร์ bad pattern ของภาษา go ที่เค้ามีประสบการณ์มา ซึ่งพอ dev มาสักพักเราก็จะรู้กันอยู่แล้วว่า ทุกภาษามันก็จะมีบาง อย่างที่แลดูเอ๊ะของมันเอง เช่น javascript ที่จะเห็นภาพ 😆
- Unintend shadow variable
- No graceful shutdown
หัวข้อนี้เราสินใจเพิ่ม ก่อนหน้าการทำ graceful shutdown เรายังมองไม่ค่อยเห็นภาพเท่าไหร่ ซึ่งพี่เราอธิบายเปรียบเทียบให้มันดูง่ายมา
คือ เวลา service มีปัญหาแล้วเราจะ shutdown ให้เรามอง service เป็นร้านค้าที่ต้องปิดร้าน และมีลูกค้ายืนอออยู่หน้าร้าน และมีลูกค้ายังเลือก
ของอยู่ในร้าน
1. เราควรแจ้งลูกค้าหน้าร้านว่าไม่รับเพิ่มแล้วนะ คือ กัน req ที่จะเข้ามาเพิ่ม
2. แจ้งกำหนดเวลาให้ลูกค้ารู้เพื่อจะต้องมาเช็คบินให้ทัน เช่น 10 นาทีเราจะปิด เคาน์เตอร์จ่ายตังแล้วนะ เพื่อให้รู้กำหนดเวลาที่เราจะ deny req
ที่เหลือทิ้ง
3. พอถึงเวลาเราก็ปิดร้านตามกำหนดที่แจ้งไป ลูกค้าที่เหลือจะไม่สามารถจ่ายเงินได้
- Overuser init function
หัวข้อนี่ก็น่าสนใจ คือปกติแล้วภาษา go จะเริ่มต้นการทำงานจาก func main แต่ที่นี่มันจะมีอีก func นึงจะถูกสั่งให้ทำงานก่อน main ได้คือ init
แต่เค้าแชร์ว่า พอเราจะเขียน test function ที่ต้องทำงานผ่าน func init แล้วนี่แหละมันจะเป็นปัญหาว่ามันเทสแบบแยกส่วนไม่ได้ละ
ท่าที่พอเป็นไปได้ ให้ไปใช้ global variable เก็บ func init ไว้แทน
- Defer thining
หัวนี้ ก็ทำช็อคอยู่ คือ defer run only current stack : defer มันรันตอน function ใน go routine return ดูตัวอย่าง
for i := 0; i < 3; i++ {
go func() {
defer fmt.Println("clean:", i)
fmt.Println("work:", i)
}()
}
ผลลัพธ์ : สิ่งที่คิด
work: 0
clean: 0
work: 1
clean: 1
work: 2
clean: 2
ผลลัพธ์ : สิ่งที่เป็น 😆
work: 3
clean: 3
work: 3
clean: 3
work: 3
clean: 3
อาจออกมามั่วๆ กว่านี้ แต่คือ i ถูกเปลี่ยนค่าทันที่ก่อนที่ go routine ดันทำเสร็จช้ากว่า
- Returning interface
- Accept Struct
สองหัวข้อที่จะสรุปก็คือ เวลา return ค่าให้ไปใช้ Struct จะยืดยุ่นกว่า
หัวข้อที่ว่ามาพี่เค้าก็ว่ามาจากเล่มนี้
🏷️ The Art of Context: How to Use Context Properly
ข้อนี้ส่วนตัวก็ยังไม่ได้แตกฉานหนัก เพราะปกติใช้ typescript อยู่เป็นหลักเราก็ไม่ได้วุ่นวายกับ context แต่ตอนที่ลองเล่น go ก็สงสัยอยู่ส่วนมา
เค้านิยม ส่ง context เป็น parameter แรกกัน พอได้ฟังก็เออ context มันก็มีวิธีใช้ประโยชน์มันได้หลายแบบแฮะ เราแค่ควรหาบริบทที่เราจะยัด
อะไรเข้าไปให้มันเหมาะสมก็พอ
🏷️ Dependency Injection in Golang
ข้อนี้ มันก็คือ design pattern นึงที่เอามาแก้ปัญหา coupling code ซึ้งใครที่เข้าใจ hexagonal architecture ก็คงเก่งกล้าวิชาในเรื่องนี้ ทางเราเอง
ก่อนหน้าเคยมีประสบการณ์ implement ไปบ้างแล้ว ซึ้งจากที่ฟังมา ได้ข้อคิดมาเรื่องนึงที่รู้สึกว่าดีมาก
เวลาเราจะเอาของจาก func นึงไปให้ func นึงใช้ต่อ
ให้มองเราเป็น คน 3 คน "เรามีของชิ้นนึง เอาไปให้อีกคนบรรจุลงกล่อง แล้วส่งไปให้อีกคนที่ต้องการ"
ไม่ใช้ มีคนนึงถือกล่องไว้ คนอยากจะส่งต่อก็โยนใส่กล่องนั้นมา คนอยากจะใช้ก็ล้วงๆเอาจากกล่องน้น เป็นกระเป๋าวิเศษโดราเอม่อน 😆
พี่เค้ายกตัวอย่างเคส @Autowired ของ spring boot ขึ้นมา ซึ้งมันค่อนข้าง magic และตอนนี้ถูกเอาออกไปละ
🏷️ From Zero to Hero: Making Your App Production-Ready to Die
หัวข้อนี่ เค้ามาเราประสบการณ์ ของ แอป Die ตอนที่ production มันมีปัญหา เค้ารับมือกับมันยังไง หลักเค้าก็มาลงลึกเรื่องการทำ graceful shutdown
ซึ่งก็ประมาณนี้ ก่อนหน้าเราก็มองไม่ค่อยออกว่า ทางที่ดีเราควรเขียน handle ยังไงบ้าง เดียวคงเอาไปปรับใช้ ตามนี้

Demo :
source code
🏷️ Building a Convolutional Neural Network (CNN) with Go and Gorgonia
ข้อนี้ขอยอมรับว่าเราเข้าไม่ค่อยถึงแล้วนี้กลับก่อน หลักๆ ก็คือ เค้าอยากให้เห็นว่า go ก็ทำ Computer Vision พวก Object Detection
อะไรแบบนี้ได้นะ โดยใช้ Gorgonia แต่ก่อนเดินออกจากห้อง ได้สินยินว่า
"ทำได้นะแต่ก็ไม่แนะนำ" 😆
Demo :
source code
พักใหญ่ๆ ที่ผ่านมาเราเว้นการไป meeting แบบนี้ยาวเลย ตอนเริ่มทำงานใหม่ๆ พี่ๆเค้าบอกว่า ควรออกไปฟัง use case จากพวก meeting พวกนี้บ่อยๆนะ ตอนนั้นเราก็นั่งฟัง ง่วงไปเพราะก็ยังไม่เข้าใจว่า speaker เค้าพูดถึงเรื่องไรว่ะ แต่พอได้กลับมาฟังๆดูรอบนี้ ความรู้สึกการอยากที่จะนั้งฟังมันเปลี่ยนไปกลายเป็นเราอยากจะเข้าใจมันละตื่นเต้นที่ได้ ได้รู้ use case แปลกๆที่เค้าเอามาแชร์กัน เออมันก็แปลกดีแฮะ
ปล.
ก็สุดท้ายอยากจะ ref ให้ speaker แต่ละท่านเป็นเซียนในยุทธภพกันทั้งนั้นเลย
เข้าไปดูว่าแต่ละหัวข้อเป็นของท่านใดได้
https://www.eventpop.me/e/116489
กับใครที่วนๆเข้ามาอ่าน เห็นว่า ทาง kkb เค้าจะลง Resource Slide ไว้ให้ในนี้
https://medium.com/kkpfg-life
แล้วเดี๋ยวก็เดี๋ยวก็คงมี คลิปไว้ให้ดูกันย้อนหลังได้ แต่ตอนนี้ยังไม่เห็น เดี๋ยวจะอัปเดตไว้ให้อีกที
Golang Beyond meet up 2025 @KKP : งานรวมพล Dev Go ที่ยอมออกจากบ้านเพราะคำว่า 'มีของแจก' 😆 ( ปลายปี )
พอดีช่วงก่อนได้มีโอกาศไปงาน Golang Beyond Meetup 2025 ซึ่งทาง KKP หรือ ธนาคารเกียรตินาคิน ได้จัดขึ้น ถ้าได้ใช้แอป Dime! ก็ ทีม tech ก็มี service แอปนี้ด้วยละที่เราพอพอคุ้นเคยกัน
ออกตัวว่าเราเองก็ยังไม่ได้มีโอกาศใช้ภาษา go กับงานที่ทำอยู่จริงๆถึง production สักที แต่ก็ติดตามภาษา go มาอยู่เป็นช่วงๆ อาจจะไม่ได้ช่ำมากมาย แล้วก่อนหน้า เราห่างหายจากงาน meeting ของแบบนี่ของสาย tech แบบนี้มากสักพักใหญ่แล้ว พอเห็น agenda หัวข้อมีหลายส่วนที่เราสนใจเลยรีบมุ่งอยากมาเลย ซึ้งหัวข้อก็จะมีประมาณนี้
# The Art of Context: How to Use Context Properly
# Dependency Injection in Golang
# From Zero to Hero: Making Your App Production-Ready to Die
# Building a Convolutional Neural Network (CNN) with Go and Gorgonia
ซึ้งเราก็คงไม่ได้ลงอธิยายรายละเอียดมากหนัก เอาเป็นว่าเน้นส่วนที่เราสนใจ กับ แชร์ resource ในงานเพิ่มเติมนะ
- Defer thining
หัวนี้ ก็ทำช็อคอยู่ คือ defer run only current stack : defer มันรันตอน function ใน go routine return ดูตัวอย่าง
go func() {
defer fmt.Println("clean:", i)
fmt.Println("work:", i)
}()
}
ผลลัพธ์ : สิ่งที่คิด
clean: 0
work: 1
clean: 1
work: 2
clean: 2
clean: 3
work: 3
clean: 3
work: 3
clean: 3
Demo : source code
🏷️ Building a Convolutional Neural Network (CNN) with Go and Gorgonia
ข้อนี้ขอยอมรับว่าเราเข้าไม่ค่อยถึงแล้วนี้กลับก่อน หลักๆ ก็คือ เค้าอยากให้เห็นว่า go ก็ทำ Computer Vision พวก Object Detection
อะไรแบบนี้ได้นะ โดยใช้ Gorgonia แต่ก่อนเดินออกจากห้อง ได้สินยินว่า "ทำได้นะแต่ก็ไม่แนะนำ" 😆
Demo : source code
พักใหญ่ๆ ที่ผ่านมาเราเว้นการไป meeting แบบนี้ยาวเลย ตอนเริ่มทำงานใหม่ๆ พี่ๆเค้าบอกว่า ควรออกไปฟัง use case จากพวก meeting พวกนี้บ่อยๆนะ ตอนนั้นเราก็นั่งฟัง ง่วงไปเพราะก็ยังไม่เข้าใจว่า speaker เค้าพูดถึงเรื่องไรว่ะ แต่พอได้กลับมาฟังๆดูรอบนี้ ความรู้สึกการอยากที่จะนั้งฟังมันเปลี่ยนไปกลายเป็นเราอยากจะเข้าใจมันละตื่นเต้นที่ได้ ได้รู้ use case แปลกๆที่เค้าเอามาแชร์กัน เออมันก็แปลกดีแฮะ
ปล.
ก็สุดท้ายอยากจะ ref ให้ speaker แต่ละท่านเป็นเซียนในยุทธภพกันทั้งนั้นเลย
เข้าไปดูว่าแต่ละหัวข้อเป็นของท่านใดได้ https://www.eventpop.me/e/116489
กับใครที่วนๆเข้ามาอ่าน เห็นว่า ทาง kkb เค้าจะลง Resource Slide ไว้ให้ในนี้ https://medium.com/kkpfg-life
แล้วเดี๋ยวก็เดี๋ยวก็คงมี คลิปไว้ให้ดูกันย้อนหลังได้ แต่ตอนนี้ยังไม่เห็น เดี๋ยวจะอัปเดตไว้ให้อีกที