Skip to main content

Package และ Dependency ของ Go

การจัดการ Package (Module) และ Dependency ใน Go

go.mod คืออะไร?

go.mod คือไฟล์ที่เก็บข้อมูลเกี่ยวกับ dependency ภายนอกที่เรานำมาใช้กับ project ของเรา ซึ่ง go.mod ได้มาจากการ run คำสั่ง:

go mod init <module_path/module_name>

ใน terminal ของเรา


ภายในไฟล์ go.mod เก็บข้อมูล dependency กับ version ของมัน และ path ของ module ของเรา

Example: go.mod file

// path module ของเรา
module example/mymodule

// version ของ go ที่เราใช้อยู่
go 1.16

// denpendency ที่เราใช้ใน project
require (
  
  <module-path> <version>
  
  // dependency ที่มาจาก github
  /* ลิ้ง github ของ dependency */ /* version ของ dependency*/
  github.com/gofiber/fiber/v2 v2.22.0
  
)

// นอกจากนี้ยังมี

//สำหรับ replace dependency ที่เราต้องการ
replace (
  <module-path> <version>
)

//สำหรับเอา dependency ที่เราต้องการออก
exclude (
  <module-path> <version>
)


ตัวอย่าง go.mod ในชีวิตจริง จาก https://github.com/Fs02/go-todo-backend/blob/master/go.mod
module github.com/Fs02/go-todo-backend

go 1.19

require (
	github.com/go-chi/chi v4.1.2+incompatible
	github.com/go-rel/postgres v0.8.0
	github.com/go-rel/rel v0.39.0
	github.com/go-rel/reltest v0.11.0
	github.com/goware/cors v1.1.1
	github.com/lib/pq v1.10.7
	github.com/stretchr/testify v1.8.1
	go.uber.org/zap v1.23.0
)

require (
	github.com/davecgh/go-spew v1.1.1 // indirect
	github.com/go-rel/sql v0.12.0 // indirect
	github.com/jinzhu/inflection v1.0.0 // indirect
	github.com/pmezard/go-difflib v1.0.0 // indirect
	github.com/serenize/snaker v0.0.0-20201027110005-a7ad2135616e // indirect
	github.com/stretchr/objx v0.5.0 // indirect
	go.uber.org/atomic v1.10.0 // indirect
	go.uber.org/multierr v1.8.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)


โดยปกติทั่วไปหากเราต้องการให้คนอื่นมาใช้ dependency ที่เราสร้างขึ้นมาเองเราจะตั้งชื่อโมดูลดังต่อไปนี้

module github.com/<ชื่อ github user>/<ชื่อ repo>

// ตอนทำ go mod init
go mod init github.com/{your_username}/{repo_name}


การลง Dependency จาก GitHub


ลบ Dependency ที่เราไม่ได้ใช้
go mod tidy


Update dependency
go get -u <dependency>


คำสั่ง go เพิ่มเติมที่เราสามารถใช้ใน terminal

https://go.dev/ref/mod