ช่วงกลางเดือนมีโอกาสไปแบ่งปันการพัฒนาระบบงานด้วยภาษา Go จำนวน 2 วัน
โดยเป็นการแบ่งปันแบบ onsite ครั้งแรกเลยก็ว่า
เพราะว่าก่อนหน้านี้จะเป็นแบบ online เกือบหมด
ในครั้งนี้ทำการปูพื้นฐานสุด ๆ เพื่อช่วยให้นำไปต่อยอดได้ง่าย
ซึ่งมีเนื้อหาดังนี้
เรื่องแรกคือ development process กับเครื่องมือของ Go
ในเรื่องนี้จะแนะนำว่าในการพัฒนาระบบด้วย Go
มีขั้นตอนและเครื่องมืออย่างไร
เพื่อให้เริ่มต้นได้ง่ายมากขึ้น
ประกอบไปด้วย
- การสร้าง project ด้วย Go module (go mod)
- การใช้งาน Go workspace สำหรับการทำงานร่วมกันหลาย ๆ module (go work)
- ในการพัฒนา ผมจะเน้นเรื่อง learn by test ดังนั้นการเขียน test ด้วย Go จึงสำคัญมาก ๆ (go test) และเรื่อง test coverage + report
- จากนั้นเรื่องของการจัดการ format ของ code การตรวจสอบ code ก็เป็นสิ่งที่น่าสนใจ และขาดไม่ได้ เช่น Static code analysis, Lint, Vet
- รวมทั้งยังมีเรื่องของ Security scanning ที่หลาย ๆ ทีมขาดไป หรือ ลืมไป เช่นการใช้งาน Go leak เป็นต้น
- ขั้นตอนการ build และ install package
- การใช้งาน Docker เข้ามาช่วยให้ส่งมอบงานได้ง่ายและสะดวกมากยิ่งขึ้น
- ขั้นตอนการทดสอบพวก API testing ทั้งจาก external tool เช่น Postman และ internal tool ผ่าน package net/http/httptest
- การจำลอง dependency รอบข้าง ที่ระบบงานต้องการใช้งาน หรือ ทำงานร่วม เช่น Database และ External API เป็นต้น
สิ่งที่ลืมไป คือ การ build binary file ตามแต่ละ OS และ CPU Architecture
เลยเพิ่มไว้หน่อย
เรื่องที่สองคือ Learn by test
ในส่วนนี้พยายามให้เริ่มการแก้ไขปัญหา จากการเขียน test
ซึ่งใน Go จะอยู่ใน package testing ประกอบไปด้วย
- Testing
- Benchmark
- Example
- Fuzzing
รวมไปถึงการจัดการ tag หรือ กลุ่มของการทดสอบ
ผ่าน //go:build tagname อีกด้วย
โดยการทดสอบจะแบ่งเป็น
- Unit testing
- Component testing
- Contract testing ด้วย Pact
ในการทำ workshop จะเน้นทั้ง 3 ชนิดการทดสอบ
เพื่อทำให้รู้และเข้าใจว่า การทดสอบแต่ละชนิด
ทดสอบเพื่ออะไร
มีประโยชน์อะไร
มีขอบเขตของการทดสอบอย่างไร
ทำการทดสอบอย่างไร
ที่เน้นมาก ๆ คือ
- Component test จะใช้งานร่วมกับ Gock และ Test containers
- Contract test ให้เข้าใจแนวคิด ขั้นตอนของการสร้าง contract จัดเก็บ และการ vertify หรือ ตรวจสอบ contract ด้วยเครื่องมือชื่อว่า Pact + Pack broker และ Docker
เรื่องที่สามคือ Project structure
ในส่วนนี้พยายามอธิบายให้เห็นถึง
วิวัฒนาการของ project เพื่อทำให้เข้าใจมากยิ่งขึ้น
โดยเริ่มตั้งแต่ Flat structure
เริ่มมาที่ Layer structure (responsibility) ว่าเป็นมาอย่างไร มีข้อดีข้อเสียอย่างไร
ต่อไปก็แนวทางแบ่งตามกลุ่มการทำงาน เช่น domain, function, use case เป็นต้น
รวมทั้งชี้ให้เห็นแนวคิดอื่น ๆ ที่ชอบใช้งาน หรือ พูดคุยกัน
เช่น Clean architecture และ Hexagonal architecture เป็นต้น
แต่สิ่งที่สำคัญมาก ๆ คือ ไม่ว่าจะเป็นรูปแบบไหน
เราทำการทดสอบไหม
เราทดสอบได้ง่ายไหม
ทำให้ทีมเดินไปข้างหน้าได้เร็วไหม หรือ มี productivity ที่ดีไหม
เป็นสามเรื่องพื้นฐานที่จะเน้นเสมอ จากนั้นก็ลงมือทำ workshop แต่ละเรื่องไป
เพื่อทำการฝึก เรียนรู้ กันต่อไป