Go'da Bağımlılık Yönetimine Giriş
Bağımlılık yönetimi, projenizin dayandığı kitaplıkların ve paketlerin sürümlerini yönetmenize yardımcı olduğundan, herhangi bir yazılım projesinin kritik bir yönüdür. Go'da (Golang) bağımlılık yönetimi, sürüm oluşturma sorunlarını çözmeyi, diğer paketlerle uyumluluğu sürdürmeyi ve genel geliştirme sürecini kolaylaştırmayı kolaylaştırarak Go projelerinizin yeniden üretilebilir ve sürdürülebilir olmasını sağlar.
Go Modüllerinden önce, Go'daki bağımlılık yönetimi daha az akıcıydı. Geliştiriciler, bağımlılıklarını yönetmek için genellikle dep
, glide
veya govendor
gibi araçlara başvururlardı. Bu araçlar yardımcı olmakla birlikte, resmi Go projesinin parçası değillerdi ve bu nedenle Go'nun bazı geliştiriciler için bir dil olarak benimsenmesinde sürtüşmeler yarattılar.
Go Modülleri Çağı
2018'de Go ekibi, Go projelerinde bağımlılık yönetimi için yeni bir standart olan "modüller" kavramını tanıttı. Modüller, kod tabanınız için gerekli tüm bağımlılıkları sağlayan, birlikte sürümlenen ilgili paketlerin koleksiyonlarıdır. Go 1.11'de Go Modüllerinin kullanıma sunulmasıyla, bağımlılık yönetimi daha basit, daha çok yönlü hale geldi ve Go projesi tarafından resmi olarak desteklendi. Go Modülleri aşağıdaki gibi özellikleri tanıttı:
- Anlamsal Sürüm Oluşturma (SemVer) kullanarak bağımlılık sürümü oluşturma
- Basitleştirilmiş bağımlılık yönetimi komutları (örneğin,
go get
,go mod tidy
) - Ayrıntılı bağımlılık bilgilerini içeren bir bildirim dosyasının (
go.mod
) otomatik oluşturulması - Gerekli bağımlılıkların otomatik indirilmesi ve önbelleğe alınması
Go Modülleri ile, kodunuzu daha önce Go geliştirmesinde bir kısıtlama olan $GOPATH
dizinine yerleştirmeniz gerekmez. Bu yeni sistem, daha esnek bir proje yapısı sağlayarak, farklı havuzlar arasında geçiş yaparken Go projelerinde çalışmayı kolaylaştırır.
Go Modülü Projenizi Kurma
Go Modüllerini kullanmaya başlamak kolaydır. Yeni bir Go Modules projesi oluşturmak için aşağıdaki adımları izleyin.
- Öncelikle, Go sürüm 1.11 veya sonraki bir sürümünü sisteminize yüklediğinizden emin olun. Terminalde go
go version
çalıştırarak Go sürümünüzü kontrol edebilirsiniz. - İstediğiniz konuma gidin ve açıklayıcı bir ada sahip yeni bir proje klasörü oluşturun, örneğin
my-go-project
. - Komut satırında yeni oluşturulan klasöre gidin.
go mod init
komutunu ve ardından modül yolunu çalıştırarak yeni bir Go modülünü başlatın. Örneğin, projeyi GitHub'da barındırmayı düşünüyorsanız,go mod init github.com/your-username/my-go-project
çalıştırabilirsiniz. Bu komut, proje klasörünüzdego.mod
adlı yeni bir dosya oluşturur.
go.mod
dosyası, Go Modules projenizin kalbidir. Adı gibi modül hakkında meta veriler içerir ve ihtiyaç duyduğu tüm bağımlılıkları listeler. Bağımlılıklarınızı yönetmek için Go projenizin yaşam döngüsü boyunca go.mod
dosyasıyla etkileşim kuracaksınız. Artık Go Module projeniz ayarlandığına göre, Go Modules sistemini kullanarak bağımlılıkları eklemeye ve yönetmeye başlayabilirsiniz.
Go Modüllerinde Bağımlılıkları Yönetme
Go Modülleri, projenizin bağımlılıklarını yönetmek için basit ve etkili bir yaklaşım sağlar. Belirli bağımlılık sürümlerini eklemenize, güncellemenize veya kaldırmanıza izin vererek, projeniz ve diğer paketlerle olan etkileşimleri üzerinde kontrol sahibi olmanıza yardımcı olur. Bu bölüm, Go Modules projenizdeki bağımlılıkları yönetme sürecinde size rehberlik edecektir.
Bağımlılık Ekleme
Yeni bir bağımlılık eklemek için yapmanız gereken tek şey istediğiniz paketi Go kodunuza aktarmak. Örneğin, github.com/gorilla/mux
projenize eklemek istiyorsanız şu şekilde içe aktarın:
içe aktarmak ( "github.com/gorilla/mux" )
go build
veya go test
komutunu bir sonraki çalıştırışınızda, Go gerekli paketi otomatik olarak indirir, go.mod
ve go.sum
dosyalarını günceller ve projenizi belirtilen paketi kullanacak şekilde yapılandırır. Alternatif olarak, açıkça yeni bir bağımlılık eklemek için go get
komutunu kullanabilirsiniz:
github.com/gorilla/mux adresini edinin
Bu sadece paketi getirmekle kalmayacak, aynı zamanda projenizin go.mod
ve go.sum
dosyalarını da güncelleyecektir.
Bir Bağımlılığı Güncelleme
Belirli bir bağımlılığı yeni bir sürüme güncellemek için go get
komutunu ve ardından paket içe aktarma yolunu ve istenen sürüm numarasını kullanın:
github.com/gorilla/[email protected] adresini edinin
Bu komut, go.mod
dosyasını paketin yeni sürümü ile güncelleyecek ve kaynak kodunu indirecektir. Güncellenen pakette önemli değişiklikler varsa, kodunuzu buna göre ayarlamanız gerekebileceğini unutmayın.
Bir Bağımlılığı Kaldırmak
Projenizden bir bağımlılığı kaldırmak için, önce ilgili import deyimlerini kaynak kodunuzdan silin. Daha sonra, go.mod
dosyasını temizlemek için go mod tidy
komutunu çalıştırın:
düzenli ol
Bu komut kullanılmayan tüm bağımlılıkları go.mod
dosyasından kaldıracak ve projenizin temiz ve düzenli kalmasını sağlayacaktır.
Anlamsal Sürüm Oluşturma ve Go Modülleri
Anlamsal Sürüm Oluşturma (SemVer), yazılım sürümlerine benzersiz sürüm numaraları atayan, yaygın olarak benimsenen bir sürüm oluşturma sistemidir. Üç parçalı bir numaralandırma formatı kullanır: Major.Minor.Patch (örn. 1.2.3). SemVer'de:
- Büyük sürüm değişiklikleri, önemli değişiklikleri gösterir ve manuel kod ayarlamaları gerektirir.
- Küçük sürüm değişiklikleri, geriye dönük olarak uyumlu kalırken yeni özellikler sunar.
- Yama sürümü değişiklikleri, hata düzeltmelerini ve küçük performans iyileştirmelerini içerir ve yine geriye dönük olarak uyumludur.
Go Modules, bağımlılık sürümlerini işlemek için Semantik Sürüm Oluşturmayı içerir ve geliştiricilerin güncellemeleri, geriye dönük uyumluluğu ve değişiklikleri daha kolay bir şekilde yönetmesine olanak tanır. Go Modules ile bağımlılık sürümlerini belirtirken, sürüm aralıklarını veya belirli sürüm numaralarını kullanabilirsiniz. Örneğin: - Bir paketin en son kararlı sürümünü almak için sürüm numarası olmadan paket içe aktarma yolunu kullanın: go get github.com/gorilla/mux
. - Belirli bir sürümü getirmek için sürüm numarasını @
simgesinden sonra ekleyin: go get github.com/gorilla/[email protected]
. - Belirli bir ana sürümdeki en son küçük veya yama güncellemesini almak için ^
(şapka) sembolünü kullanın: go get github.com/gorilla/mux@^v1.0.0
.
Ortak Go Modülleri Komutları ve Kullanımları
En sık kullanılan Go Modules komutlarından bazıları ve bunların kullanım senaryoları şunlardır:
mod başlangıcına git
go mod init
geçerli dizin içinde yeni bir Go Modules projesi başlatır. Modül, bağımlılıkları ve sürüm kısıtlamaları hakkında bilgi içeren bir go.mod
dosyası oluşturur.
mod init example.com/myproject gidin
example.com/myproject
modülünüzün yolu ile değiştirin.
git al
go get
bir bağımlılığı eklemek, güncellemek veya kaldırmak için kullanılan çok yönlü bir komuttur. İsteğe bağlı olarak bir sürüm numarası veya aralığı ile devam eden paket içe aktarma yolunu sağlayın.
github.com/gorilla/[email protected] adresini edinin
Bu komut, github.com/gorilla/mux
paketini v1.8.0 sürümüne ekler veya günceller.
düzenli ol
go mod tidy
kullanılmayan bağımlılıkları go.mod
dosyasından kaldırır ve projenizin kaynak kodundaki içe aktarma ifadelerini yansıtacak şekilde günceller.
düzenli ol
İstenmeyen bağımlılıklar için import deyimlerini kaldırdıktan sonra bu komutu çalıştırın.
mod grafiğine git
go mod graph
projenin bağımlılık ağacını, hem doğrudan hem de dolaylı bağımlılıkları okunabilir bir biçimde gösterir. Bu komut, karmaşık bağımlılık sorunlarının hatalarını ayıklarken yardımcı olabilir.
mod grafiğine git
mod doğrulamaya git
go mod verify
go.sum
dosyasında listelenen bağımlılıkların bütünlüğünü kontrol eder. Bir bağımlılığın sağlama toplamı kaydedilen değerle eşleşmezse, komut bir hata bildirir.
mod doğrulamaya git
Bağımlılık Çakışmalarını Çözme
Projeniz, paylaşılan bağımlılıklar için farklı sürüm gereksinimleri olan birden çok pakete bağlı olduğunda bağımlılık çakışmaları ortaya çıkabilir. Go Modules, go.mod
dosyasındaki replace
ve exclude
yönergelerini kullanarak bu çakışmaların üstesinden gelmek için yerleşik bir mekanizma sağlar.
Değiştirme Direktifi
replace
yönergesi, bir modülün sürümünü farklı bir sürümle değiştirmenize veya onu yerel bir yola eşlemenize olanak tanır. Bu, uzak bir havuza bağlanmadan önce belirli sürümleri, çatallı projeleri veya yerel değişiklikleri test etmeniz gereken durumlarda yararlı olabilir. replace yönergesini kullanmak için go.mod
dosyanıza aşağıdaki satırı ekleyin:
example.com/original/module v1.2.3 => example.com/new/module v1.4.0'ı değiştirin
Bu, example.com/original/module
sürüm v1.2.3
example.com/new/module
sürüm v1.4.0
ile değiştirir. Bir modülü yerel yolla da değiştirebilirsiniz:
example.com/original/module v1.2.3 => ../local/path/to/new/module değiştirin
Hariç Tutma Yönergesi
Bir modülün belirli sürümlerinin projenizde kullanılmasını engellemek için exclude
yönergesini kullanabilirsiniz. Bu, belirli bir sürümün uyumluluk sorunları veya güvenlik açıkları olduğunu bildiğiniz zaman kullanışlıdır. Bir modül sürümünü hariç tutmak için go.mod
dosyanıza aşağıdaki satırı ekleyin:
example.com/target/module v1.2.3'ü hariç tutun
go.sum
dosyasını güncellemek ve bağımlılık ağacını yeniden hesaplamak için bu değişiklikleri uyguladıktan sonra go mod tidy
çalıştırmayı unutmayın.
Özel Go Modülleri ve Depo Yönetimi
Özel Go Modülleri ve havuzlarla çalışmak, genel olanlarla çalışmaya benzer, ancak uygun kimlik doğrulama ve gizliliği sağlamak için bazı ek adımlar vardır.
GOPRIVATE'i yapılandırma
İçe aktarma yollarının genel sunuculara sızmasını önlemek için GOPRIVATE
ortam değişkenini yapılandırın. Bu değişken, özel havuzlar için virgülle ayrılmış içe aktarma yolu kalıpları listesini belirtir.
env -w GOPRIVATE=example.com/private/path/* gidin
Erişim Belirteçlerini Kullanma
Özel depoları kullanmak için genellikle GitHub veya GitLab gibi kaynak kodu barındırma hizmetinizle kimlik doğrulaması yapmanız gerekir. Uygun izinlerle (GitHub için repo
kapsamı gibi) kişisel bir erişim belirteci oluşturun. Bir erişim belirteci oluşturmaya yönelik belirli adımlar için barındırma hizmetinizin belgelerine bakın. Erişim belirtecini aldıktan sonra, kimlik doğrulama için ortam değişkenini yapılandırın. VCS hizmetinize göre uygun ortam değişkenini kullanın.
dışa aktarma GIT_TERMINAL_PROMPT=0 dışa aktarma GITHUB_TOKEN=YOUR_ACCESS_TOKEN
Bu, go
komutunun özel depoları Go Modülleri olarak indirip doğrulamasını sağlar. Birden çok VCS hizmetiyle çalışıyorsanız, gerektiğinde ayrı ortam değişkenleri tanımlayarak her biri için ayrı erişim belirteçleri yapılandırabilirsiniz.
Önceki Bağımlılık Yönetimi sistemlerinden geçiş
Go Modüllerinden önce, Dep, glide veya özel satıcı dizini çözümleri gibi çeşitli bağımlılık yönetim sistemleri vardı. Hâlâ bu sistemleri kullanıyorsanız, güncel kalmak ve modern Golang bağımlılık yönetiminin avantajlarından yararlanmak için Go Modüllerine geçmenin zamanı geldi. Önceki bir bağımlılık yönetim sisteminden Go Modüllerine geçiş yapmak için şu adımları izleyin:
- Gerekirse önceki duruma geri dönebilmeniz için orijinal projenizin bir yedeğini oluşturun.
- Mevcut tüm bağımlılık yönetimi dosyalarını kaldırın (örn.
Gopkg.toml
veyaGopkg.lock
). - Bir terminalde projenizin kök dizinine gidin ve yeni bir
go.mod
dosyası oluşturmak içingo mod init
çalıştırın. Bu ayrıca, varsa, önceki bağımlılık dosyanızı Go Modules girişlerine dönüştürmeye çalışır. go.mod
dosyasını önceki sisteminizdeki bağımlılıklarla doldurmak içingo mod tidy
çalıştırın. Bu komut, yalnızca gerekli paketlerin bağımlılık ağacının bir parçası olmasını sağlar.- Bu noktada, bağımlılık çakışmalarını çözmek veya belirli sürümleri uygulamak için
go.mod
dosyanızda ayarlamalar yapmanız gerekebilir. Bu sorunları ele almak için gerektiği şekildereplace
veexclude
yönergelerini kullanın. - Projenizin hala beklendiği gibi testler oluşturduğunu ve geçtiğini doğrulayın.
Bu adımları izleyerek, projeniz artık Go Modülleri ile çalışarak bağımlılık yönetimini kolaylaştırmalı ve uzun vadede daha sürdürülebilir hale getirmelidir. Devam eden tüm sorunlar, go.mod
dosyasını ayarlayarak veya içe aktarma yollarınızı doğru formatı takip ettiklerinden emin olmak için kontrol ederek çözülmelidir.
AppMaster: Golang Tabanlı Uygulama Geliştirmeyi Hızlandırma
Günlük iş akışınıza Go Modüllerini ve bağımlılık yönetimi en iyi uygulamalarını dahil etmek, sürdürülebilir ve ölçeklenebilir bir Golang tabanlı yazılım projesi sağlamak için çok önemlidir. Peki ya Golang'ın gücünden yararlanmaya devam ederken tüm uygulama geliştirme sürecini hızlandırabilseydiniz?
Görsel bir geliştirme ortamı kullanarak Golang tabanlı arka uç uygulamaları oluşturmaya vurgu yapan kapsamlı bir kodsuz platform olan AppMaster.io'ya girin. AppMaster, arka uç uygulamalarının yanı sıra, geliştirme sürecini kolaylaştırmak için tasarlanmış entegre bir yaklaşım kullanarak web ve mobil uygulamaların oluşturulmasına olanak tanır.
AppMaster ile kullanıcılar görsel bir kullanıcı arabirimi aracılığıyla veri modelleri (veritabanı şeması) oluşturabilir, iş süreçleri tasarlayabilir ve REST API ve WebSocket endpoints tanımlayabilir. Web uygulamaları, tamamen etkileşimli bir kullanıcı deneyimi için bir Web İş Süreci tasarımcısıyla birlikte bir sürükle ve bırak arabirimi kullanılarak oluşturulur. Mobil uygulamalar, bir mobil İş Süreci tasarımcısı ve UI tasarım yeteneği ile benzer şekilde tasarlanmıştır.
AppMaster platformu taslaklarınızı alır ve 'Yayınla' düğmesine bastığınızda uygulamalarınız için kaynak kodu oluşturur. Uygulamaları derler, testler yapar, bunları Docker kapsayıcılarına paketler (arka uç uygulamaları için) ve her şeyi saniyeler içinde buluta dağıtır.
Arka uç uygulamaları, Golang'ın sunduğu performans, basitlik ve bakım kolaylığından yararlanarak Golang (Go) kullanılarak oluşturulur. Web uygulamaları Vue3 çerçevesi ve JavaScript/TypeScript kullanılarak üretilirken, mobil uygulamalar AppMaster sunucu odaklı çerçeve, Android için Kotlin ve Jetpack Compose ve iOS uygulamaları için SwiftUI kullanır.
Güçlü AppMaster platformu sayesinde kodlama deneyimi olmayanlar bile sunucu arka uçlarını, web sitelerini, müşteri portallarını ve yerel mobil uygulamaları kapsayan eksiksiz, ölçeklenebilir bir yazılım çözümü oluşturabilir. AppMaster yalnızca tüm yazılım geliştirme sürecini hızlandırmakla kalmaz, aynı zamanda gereksinimler her değiştirildiğinde uygulamaları sıfırdan oluşturarak teknik borcu tamamen ortadan kaldırır.
Yazılım geliştirme ihtiyaçlarınız için, özellikle Golang'ın avantajlarından yararlanan no-code bir platform benimsemeyi düşünüyorsanız, AppMaster listenizin başında olmalıdır. Ücretsiz bir hesap için kaydolun ve 10 kat daha hızlı ve 3 kat daha uygun maliyetli bir çözümle uygulama geliştirmenin geleceğini keşfedin.