![]()
![]()
พอดีได้มีโอกาสไปแบ่งปันความรู้เรื่อง
การเริ่มต้นพัฒนาระบบงานด้วยภาษา Go
ให้กับน้อง ๆ ที่เข้ามาฝึกฝนในค่าย
The SCK SEAL Team นิดหน่อย
ซึ่งใช้เวลาในการแนะนำและแบ่งปันไปประมาณ 1-2 ชั่วโมง
ประกอบไปเรื่องพื้นฐานดังนี้
1. ว่าด้วยเรื่องของ go env
เป้าหมายเพื่อให้เข้าใจเกี่ยวกับ environment ต่าง ๆ ของภาษา Go
ทั้ง GOROOT, GOPATH, GOOS และ GOARCH
เพื่อให้นำไปใช้ได้อย่างถูกต้อง ไม่งง
ยกตัวอย่างเช่น
- GOROOT สำหรับกำหนด path ของ Go compiler ง่าย ๆ คือ บ้านของ Go
- GOPATH สำหรับกำหนด path ของ project หรือระบบงานของเรานั่นเอง
สิ่งที่น่าสนใจมาก ๆ คือ GOPATH
เพราะว่าที่เจอมานั้น ผู้เริ่มต้นใหม่ ๆ
จะใช้ GOPATH ที่เป็นค่า default คืออยู่ใน folder
<user folder>/go
ทำให้ทุก ๆ project ไปอยู่ใน folder นี้หมด ซึ่งไม่ถูกต้อง
ดังนั้นสิ่งที่ควรทำคือ
ในแต่ละ project ควรมี GOPATH แยกกันไป
2. มาลองทำความเข้าใจกับ GOPATH เพิ่มขึ้น
ด้วยการลองใช้ go get เพื่อ download library ต่าง ๆ มาใช้งาน
คำถามคือ go get ทำอะไรบ้าง ?
เป็นสิ่งที่คนใช้งานจำเป็นจะต้องรู้
ลองไปตามดูนะครับ
ผลที่เกิดขึ้นคือ
- ทำการ download library ไปยัง GOPATH/src
- ทำการ compile/install library ไปยัง GOPATH/pkg
3. เมื่อเข้าใจก็มาถึง project structure
ก็ควรมีโครงสร้างง่าย ๆ คือ GOPATH/src นั่นเอง
ส่วน folder pkg และ bin ก็เอาไว้เก็บผลลัพธ์ต่าง ๆ
คือ
- pkg เอาไว้เก็บผลจากการ install library จาก package ต่าง ๆ
- bin เอาไว้เก็บ binary จากการ build ระบบงาน
แนะนำให้เริ่มจากที่นี่
How to Write Go Code
จากนั้นพูดถึงเรื่องของ โครงสร้าง package ของระบบงาน
ควรแยกออกไปตาม feature/domain ของงาน
จากนั้นให้แยก package ย่อย ๆ ตามความเหมาะสม
เช่น
package calendar อาจจะมี package ย่อยตามหน้าที่การทำงาน
- controller
- service
- repository
แต่พยายามไม่ให้มีการเรียกข้าม package
เพื่อลดความซับซ้อนของระบบงาน
4. ชุดคำสั่งที่ต้องใช้งานกันเลย
สิ่งที่ทีมควรสรุปร่วมกันคือ workflow การทำงานนั่นเอง
ว่าจะเป็นอย่างไร
ซึ่งทุก ๆ คนควรทำงานเหมือนกัน
ทั้งการเขียน code
ทั้งการเขียน test
ทั้งการ build -> test -> run
ยกตัวอย่างเช่น ชุดคำสั่งต่าง ๆ ควรใช้เหมือนกัน
หรืออาจจะสรุปออกมาเป็น shell script ไว้เลย
โดยชุดคำสั่งที่ควรต้องมี เช่น
- go fmt สำหรับจัด format ของ code
- go test สำหรับการทดสอบ
- go tool cover สำหรับการสร้างรายงานของ code coverage
- go install สำหรับการ compile library/package ต่าง ๆ ซึ่งไปเก็บไว้ใน folder pkg
- go build สำหรับการสร้าง binary ซึ่งให้กำหนดไปไว้ที่ folder bin
เพียงเท่านี้ก็น่าจะพอเริ่มงานกันได้
เริ่มที่ว่ายากแล้ว ที่เหลือยากกว่าเยอะนะ
แต่ก่อนอื่นไปเล่น
Go Tour ก่อนนะ
แนะนำให้ศึกษาเพิ่มเติมคือ