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