Go Modules Kullanımı

Go 1.11 ve 1.12, Go’nun bağımlılık sürüm bilgilerini açık ve kolay yönetilmesini sağlayan, yeni bağımlılık yönetimi sistemi olan modüller için ön destek içerir.

Modül, bir Go projesinin kök klasöründe yer alan projenin bağımlılıklarını barındıran bir dosyadır. go.mod adında olmalıdır. go.mod dosyası, aynı zamanda kök dizin için kullanılan içe aktarma yolu olan modülün modül yolunu ve başarılı bir derleme için gereken diğer bağımlılık gereksinimlerini tanımlar.

Uygulanacak Adımlar

  • Yeni Modül Dosyası Oluşturma
  • Bağımlılık Ekleme
  • Bağımlılıkları Yükseltme
  • Kullanılmayan Bağımlılıkları Kaldırma

Yeni Modül Dosyası Oluşturma

Merhaba Dünya! değerini döndüren bir kütüphanemiz olsun. merhaba.go dosyamızın içeriği:

package merhaba

//Merhaba ...
func Merhaba() string {
    return "Merhaba Dünya!"
}

Bir de main_test.go ile test dosyamızı oluşturalım.

package merhaba

import "testing"

//TestMerhaba ...
func TestMerhaba(t *testing.T) {
    istenen := "Merhaba Dünya!"
    if Merhaba() != istenen {
        t.Errorf("Gelen: %q, İstenen: %q", Merhaba(), istenen)
    }
}

Açıklama yapmamız gereken bir bölüm yok. Buraya kadar anlaşılır şeyler.

go test . komutunu kullandığımızda;

ok /C/Users/kaank/Desktop/merhaba 0.274s

Daha sonra go.mod dosyamızı oluşturalım.

go mod init example.com/merhaba

go test . komutunu yeniden kullanalım.

ok example.com/merhaba (cached)

Yukarıda gördüğünüz gibi paketimiz artık bir modül dosyası içeriyor.

go.mod dosyamızın içeriğinde işe şu olacaktır.

module example.com/hello

Bağımlılık Ekleme

merhaba.go dosyamızı aşağıdaki gibi düzenliyelim. Yani bir kütüphane ekleyip kullanalım.

package merhaba

import "github.com/fatih/color"

//Merhaba ...
func Merhaba() string {
    color.Blue("Mavi Renkli Yazı")
    return "Merhaba Dünya!"
}

github.com/fatih/color kütüphanesi ekleyip kullandık.

go.mod dosyamızda ise şu değişiklikler oldu.

module example.com/merhaba

go 1.15

require github.com/fatih/color v1.9.0

go list -m all komutunu yazarak, tüm paket bağımlılıklarını görebiliriz.

Dikkat ettiyseniz ayrıca bir go.sum dosyası da oluşturdu. Go komutu, projenizin bağlı olduğu modüllerin kötü niyetli, kazara veya başka nedenlerle beklenmedik bir şekilde değişmemesini sağlamak için, bu modüllerin gelecekteki indirmelerinin ilk indirmeyle aynı bitleri almasını sağlamak için go.sum dosyasını kullanır. Yani indilecek olan bağımlılıkların doğruluğunu buradan kontrol eder.

Bağımlılıkları Yükseltme

go list -m all komutu ile gerekli bağımlılıklara baktıktan sonra yükseltilmesini istediğiniz bağımlılığı go get komutu ile yükseltebilirsiniz. Örnek:

go get github.com/fatih/color

Kullanılmayan Bağımlılıkları Kaldırma

Yukarıdaki örnek merhaba.go dosyamızdaki color kütüphanesini kullanmadığımızı varsayalım.

package merhaba

//Merhaba ...
func Merhaba() string {
    return "Merhaba Dünya!"
}

Yani yukarıdaki gibi olsun...

Kullanılmayan kütüphaneleri go.mod üzerinden kaldırmak için go mod tidy komutunu kullanırız. Daha sonra go.mod dosyamızın içi şu hale gelir.

module example.com/merhaba

go 1.15

go.sum dosyamızın içeriğini ise tamamen boş olacaktır.