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

แนะนำให้ศึกษาเพิ่มเติมคือ

Tags: