Go Modulları: Dependency Versiyonlama ve go.mod Yönetimi
# Go Modulları: Dependency Versiyonlama ve go.mod Yönetimi
Go 1.11'den sonra modüller resmi paket yönetim sistemi oldu. Bir projenin tüm bağımlılıkları ve versiyonları `go.mod` dosyasında tutulur. Bu sayede aynı kodu çalıştıran herkes birebir aynı paket versiyonlarını kullanır.
Modül, bir `go.mod` dosyası tarafından tanımlanan Go kodunun bir koleksiyonudur. Dosya projenin adını, Go versiyonunu ve ihtiyaç duyduğu bağımlılıkları listeler. Böylece proje taşınabilir ve tekrarlanabilir hale gelir.
Proje klasörünüzde şu komutu çalıştırın:
1go mod init github.com/kullaniciadi/projeadBu komut `go.mod` dosyasını oluşturur:
1module github.com/kullaniciadi/projead23go 1.21Kodda bir paket import ederseniz:
1import "github.com/gorilla/mux"Ardından şu komutu çalıştırın:
1go mod tidyBu komut eksik paketleri indirir ve `go.mod` ile `go.sum` dosyalarını günceller. `go.mod` şöyle görünür:
1module github.com/kullaniciadi/projead23go 1.2145require github.com/gorilla/mux v1.8.0Bir paketin yeni versiyonunu almak için:
1go get -u github.com/gorilla/mux2[/cod]34Tüm bağımlılıkları güncellemek için:56[kod]7go get -u./...Belirli bir versiyona sabitlemek için:
1go get github.com/gorilla/mux@v1.7.4`go.sum` dosyası her paketin SHA256 hash'ini tutar. Güvenlik için kullanılır; paketler indirildikten sonra hash'leri kontrol edilir. Bu dosyayı versiyon kontrolüne dahil etmelisiniz.
Bir proje kuralım:
1go mod init myapp2go get github.com/gin-gonic/gin@v1.9.13go mod tidyBunu çalıştırdığınızda `go.mod` dosyası oluşur ve Gin framework'ü 1.9.1 versiyonuyla eklenir. Başka bir bilgisayarda `go mod download` komutu aynı versiyonları indirir.
Sürüm çakışması: İki paket farklı versiyonları gerektirirse, Go bağımlılık çözen algoritması en düşük uyumlu versiyonu seçer.
Modül olmayan paketler: Eski paketler `go.mod` desteklemeyebilir. Bu durumda Go, en son git tag'ını sürüm olarak kullanır.
Bağımlılıklarınızı kontrol etmek için:
1go mod graphBu komut tüm bağımlılık ağacını gösterir. Böylece hangi paketin hangi versiyonunu kullandığınız anlaşılır.
4 yorum
aynen, go.sum'ın boyutu bazen can sıkıyor. bir kütüphane güncellersin, onun bağımlılıkları da değişir, sonra transitif dependencylerin versiyonları çakışabilir.
go sum dosyası büyüdükçe git diff'te fark etmek de zor oluyor, hangi paket neyi çekti diye takip etmek zorlaşıyo
go mod init ile başladığında basit geliyordu ama projem büyüyünce fark ettim ki go.sum çok karışık oluyor.
go mod ile versiyonları kilitlemek iyi de dependency hell yine de olabiliyor özellikle indirect dependencyler karışınca go sum dosyası dev daha çok büyüyor ve update etmek zor hale geliyor