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/projead

Bu komut `go.mod` dosyasını oluşturur:

1module github.com/kullaniciadi/projead
2
3go 1.21

Kodda bir paket import ederseniz:

1import "github.com/gorilla/mux"

Ardından şu komutu çalıştırın:

1go mod tidy

Bu 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/projead
2
3go 1.21
4
5require github.com/gorilla/mux v1.8.0

Bir paketin yeni versiyonunu almak için:

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1go get -u github.com/gorilla/mux
2[/cod]
3
4Tüm bağımlılıkları güncellemek için:
5
6[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 myapp
2go get github.com/gin-gonic/gin@v1.9.1
3go mod tidy

Bunu ç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 graph

Bu komut tüm bağımlılık ağacını gösterir. Böylece hangi paketin hangi versiyonunu kullandığınız anlaşılır.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz
  • dusukpil

    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

  • kahvemolasi

    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.

  • mertttttsvm

    go mod init ile başladığında basit geliyordu ama projem büyüyünce fark ettim ki go.sum çok karışık oluyor.

  • adlı kullanıcıya yanıt verdi
    persembeaksami

    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