Go Modules คืออะไร?
Go Modules คือระบบจัดการ dependency (library ภายนอก) สำหรับภาษา Go ที่เริ่มต้นใช้จริงจังตั้งแต่ Go 1.11 และกลายเป็นมาตรฐานตั้งแต่ Go 1.13 เป็นต้นมา
ก่อนหน้านั้น Go ใช้ระบบ GOPATH ซึ่งยุ่งยากและจัดการ dependency ได้ยากโดยเฉพาะเมื่อต้องทำงานร่วมกับหลายโปรเจกต์
ไฟล์สำคัญใน Go Modules
go.mod
: บอกชื่อโมดูล, Go version, และ dependency ทั้งหมดgo.sum
: ตรวจสอบความถูกต้องของ dependency ด้วย hash
สร้าง Go Modules ยังไง?
ให้เริ่มต้นด้วยคำสั่ง:
go mod init github.com/yourusername/projectname
ตัวอย่าง:
go mod init github.com/poolsawat/hello-go
เมื่อสร้างเสร็จจะได้ไฟล์ go.mod
แบบนี้:
module github.com/poolsawat/hello-go go 1.21
เพิ่ม dependency
เพียง import package ในโค้ด แล้วรันคำสั่ง:
go mod tidy
ตัวอย่างโค้ด:
package main import ( "fmt" "github.com/google/uuid" ) func main() { fmt.Println("UUID:", uuid.NewString()) }
เมื่อรัน go mod tidy
ระบบจะดาวน์โหลดและเพิ่ม package ลงใน go.mod
และ go.sum
โครงสร้างโปรเจกต์เมื่อใช้ Go Modules
. ├── go.mod ├── go.sum └── main.go
จัดการเวอร์ชันของ dependency
สามารถกำหนดเวอร์ชันของ lib ได้โดยตรงใน go.mod:
require github.com/google/uuid v1.3.0
อัปเดต / ลบ dependency
- อัปเดต:
go get -u
เช่น:go get -u github.com/google/uuid
- ลบ: หากไม่ใช้ package ใดแล้ว ให้ลบ import และรัน
go mod tidy
การใช้ replace สำหรับทดสอบ local module
ใน go.mod:
replace github.com/my/module => ../my-module
ใช้เพื่อทดสอบหรือ override module โดยไม่ต้อง push ไป Git
Go Proxy คืออะไร?
ระบบ go module จะดึง lib จาก proxy.golang.org โดยอัตโนมัติ หรือสามารถตั้งค่า proxy ใหม่ได้ เช่น:
GOPROXY=direct go build
ภาพประกอบ: Flow การทำงานของ Go Modules

ข้อดีของ Go Modules
- ไม่ต้องใช้ GOPATH อีกต่อไป
- รองรับ multi-version dependency
- ทำงานร่วมกับ GitHub ได้ดีมาก
- ง่ายต่อการ deploy และทดสอบ
ปัญหาที่พบบ่อย
- import ผิดชื่อ module → แก้ชื่อใน go.mod ให้ตรง
- dependency ไม่โหลด → ลองรัน
go mod tidy
- replace ผิด path → ตรวจสอบว่า path ที่ replace ถูกต้อง
บทสรุป
Go Modules เป็นระบบจัดการ dependency ที่ทรงพลังมาก ทำให้โปรเจกต์ Go สมัยใหม่เป็นระเบียบและสามารถทำงานเป็น team ได้อย่างราบรื่น หากคุณเริ่มต้นกับ Go วันนี้ การเข้าใจ Go Modules คือสิ่งจำเป็นอย่างยิ่ง
บทความนี้เผยแพร่โดย: poolsawat.com | เขียนโดย: King Pool