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>


การลง Dependency จาก GitHub

 

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

go mod tidy

update 

Update dependency

go get -u <dependency>

 

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

https://go.dev/ref/mod