Go module систем
Өмнөх хичээлд package үүсгэж ашиглахыг сурсан. Харин тэдгээр package-үүдийг хэрхэн зохион байгуулах, гуравдагч талын library татаж ашиглах вэ? Энэ бол Go module системийн хариулах асуулт юм. Go 1.11-с module систем нэвтэрч, өнөөдөр Go хөгжүүлэлтийн стандарт арга болсон.
go.mod — модулийн үндэс
Аливаа Go төсөл go.mod файлаас эхэлдэг. Энэ файл нь модулийн нэр болон ашигладаг Go-ийн хувилбарыг тодорхойлно:
myproject/
├── go.mod
├── go.sum
├── main.go
└── internal/
└── utils/
└── utils.go
// go.mod файл
module github.com/username/myproject
go 1.22
require (
github.com/gin-gonic/gin v1.9.1
github.com/joho/godotenv v1.5.1
)
Шинэ модуль үүсгэхдээ:
mkdir myproject
cd myproject
go mod init github.com/username/myproject
go mod init нь go.mod файл үүсгэнэ. Module нэр нь ихэвчлэн GitHub хаяг байдаг боловч дурын нэр байж болно.
Гуравдагч талын package татах
go get командаар гуравдагч талын package татаж суулгана:
# Package татах
go get github.com/joho/godotenv
# Тодорхой хувилбар татах
go get github.com/gin-gonic/gin@v1.9.1
# Шинэ хувилбар руу шинэчлэх
go get -u github.com/joho/godotenv
Татасны дараа go.mod болон go.sum файл автоматаар шинэчлэгдэнэ:
// main.go
package main
import (
"fmt"
"github.com/joho/godotenv" // татаж авсан package
"os"
)
func main() {
err := godotenv.Load(".env")
if err != nil {
fmt.Println(".env файл олдсонгүй")
}
fmt.Println("DB_HOST:", os.Getenv("DB_HOST"))
}
go.sum — аюулгүй байдлын шалгалт
go.sum нь татаж авсан package-үүдийн хэш (нууц тэмдэг) хадгалдаг:
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYNUqteDYNI=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2ooMyIRifsyqd/6i1under=
Та энэ файлыг гараар өөрчлөх шаардлагагүй. go get болон go mod tidy автоматаар удирддаг.
Хэрэгтэй go mod командууд
# Ашиглагдахгүй dependency-г устгах, дутуу байгааг нэмэх
go mod tidy
# Татаж авсан бүх module-ийн жагсаалт
go list -m all
# Module-ийн кэшийг цэвэрлэх
go clean -modcache
# Vendor хавтас үүсгэх (интернетгүй орчинд)
go mod vendor
go mod tidy нь хамгийн их хэрэглэгддэг команд. Package нэмсэн эсвэл устгасны дараа заавал ажиллуулна.
Workspace — олон модуль нэгэн зэрэг
Go 1.18-с workspace нэвтэрсэн. Олон модультай ажиллахад тохиромжтой:
# Workspace үүсгэх
go work init ./moduleA ./moduleB
// go.work
go 1.22
use (
./moduleA
./moduleB
)
Workspace ашиглан moduleA-г moduleB дотроос локал байдлаар import хийж болно — интернетэд байршуулаагүй ч.
Дараагийн хичээлд:
Go-д файл уншиж бичих — os болон bufio package ашиглан текст болон бинар файлтай ажиллахыг сурна.