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
go get <link_to_github/version/>
// หรือเราสามารถเข้าถึง version ตาม commit hash ของ github ได้
go get <link_to_github/version@commit_hash>
// example
go get github.com/gofiber/fiber/v2
ลบ Dependency ที่เราไม่ได้ใช้
go mod tidy
Update dependency
go get -u <dependency>
คำสั่ง go เพิ่มเติมที่เราสามารถใช้ใน terminal