Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

บันทึกการแบ่งปันเรื่องการพัฒนาระบบงานด้วยภาษา Go

$
0
0

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

[gist id="18ee71edfd894ec52cf650db0ac8a966" file="1.txt"]

เรื่องที่สองคือ 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 แต่ละเรื่องไป
เพื่อทำการฝึก เรียนรู้ กันต่อไป


Viewing all articles
Browse latest Browse all 1997

Trending Articles