สองวันที่ผ่านมา มีโอกาสไปแบ่งปันเรื่อง
พื้นฐานสำหรับการพัฒนาระบบงานด้วยภาษา Go
เพื่อช่วยทำให้รู้และเข้าใจเกี่ยวกับภาษา
เพื่อช่วยให้รู้ว่า ตัวภาษานั้นมีเครื่องมือช่วยในการพัฒนาและ deploy อย่างไรบ้าง
เริ่มด้วยการเข้าใจเรื่องพื้นฐานของภาษา Go
โดยผมมักจะเริ่มด้วย How to write Go code ?
เป็นเอกสารสำหรับการเริ่มต้นเขียน code รวมทั้งสิ่งต่าง ๆ ที่สำคัญต่อการพัฒนา เช่น
- Go module ทั้งการใช้งาน การสร้าง และ publish ให้ใช้งาน
- การ run, build, install และ testing
สิ่งที่ชอบแนะนำคือ ไปเริ่มต้นด้วย Go Tour กันด้วย
ต่อมาว่าด้วยเรื่องของ Development workflow
โดยภาษา Go เตรียมเครื่องมือต่าง ๆ ไว้ให้ใช้งานครบครัน
รวมทั้งการใช้งานร่วมกันเครื่องอื่น ๆ เป็นดังนี้
- Editor ที่ใช้งานการพัฒนาคือ VS Code และ extension
- การจัดการ format ของ code ด้วย go fmt
- ทำการตรวจสอบ code และเรื่องของ check style ต่าง ๆ ด้วย go lint, go vet เป็นต้น
- ทำการ build และ install ด้วย go build และ go install สำหรับการส่งมอบระบบงานในรูปแบบ binary file
- ในการ build นั้นก็ใช้ร่วมกับ go environment ด้วยเช่น GOOS และ GOARCH เป็นต้น
- ทำการทดสอบด้วย go test ซึ่งมี benchmark และ code coverage มาให้ใช้งานด้วย รวมทั้งเรื่องของการตรวจสอบ race condition
- การทำงานร่วมกับ Docker และ Docker compose รวมทั้งการสร้าง Dockerfile แบบ multi-stage build
ความรู้พื้นฐานที่ควรจะต้องรู้และเข้าใจ
ประกอบไปด้วย
- Repository, module และ package
- การใช้งาน variable และเรื่องของ type system
- Array, Slice และ Map ซึ่งเป็น data structure พื้นฐาน
- พวก control flow ต่าง ๆ ทั้ง if-else, switch-case, for เป็นต้น
- เรื่องสำคัญคือ Pointer, Struct, Interface
เพิ่มเติมก็คือ เรื่องของ Dependency Injection และเรื่องของ Testale code
ต่อมาทำการเริ่มพัฒนา REST API ด้วยภาษา Go
ซึ่งมี library ให้ใช้งานหลากหลาย ประกอบไปด้วย
- net/http package
- Gin
- Echo
- Fiber
โดยเน้นไปที่ของ performance และ development productivity
ในส่วนนี้จะเน้นไปที่การพัฒนาระบบงาน
- การกำหนด router ของ API
- การสร้าง handler/controller ของการทำงาน
- การจัดการกับ configuration ต่าง ๆ ของระบบงาน
- แบ่งการทำงานออกเป็นส่วน ๆ หรือพูดคุยเรื่องของ project structure ในรูปแบบต่าง ๆ ทั้ง flat, layer, module/domain, clean architecture เป็นต้น
- การพัฒนาระบบให้เป้นไปตามที่ต้องการ รวมทั้งเรื่องของ การดูแลรักษา พัฒนาและ testable อีกด้วย
- การทำงานร่วมกับ depednency ต่าง ๆ เช่น database เป็นต้น ซึ่งได้พูดคุยและลงรายละเอียดของ Dependency Injection
- การทดสอบก็จะมีการใช้งาน library เพิ่มเติมชื่อว่า Testify
จากนั้นก็ลงมือทำ workshop เพื่อช่วยทำให้เข้าใจมากยิ่งขึ้น
ลองฝึก ลงมือทำ
จากนั้นย้อนกลับมาดูสิ่งที่ทำลงไปว่า
มีข้อดีข้อเสียอย่างไรบ้าง
จากนั้นเรียนรู้กับมันต่อไป