สองวันที่ผ่านมา มีโอกาสไปแบ่งปันเรื่อง
พื้นฐานสำหรับการพัฒนาระบบงานด้วยภาษา 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 เพื่อช่วยทำให้เข้าใจมากยิ่งขึ้น

ลองฝึก ลงมือทำ
จากนั้นย้อนกลับมาดูสิ่งที่ทำลงไปว่า
มีข้อดีข้อเสียอย่างไรบ้าง
จากนั้นเรียนรู้กับมันต่อไป

Tags:,