Go Modules คืออะไร และใช้งานยังไง

Sharing is caring!

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

Leave a Reply

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *