Go Modülleri ve Bağımlılık Yönetimi
Go Modüllerinin derinliklerine inerek Golang'ın bağımlılık yönetimi sisteminin tüm potansiyelini ortaya çıkarın. Projenizin sürdürülebilirliğini iyileştirin ve sektördeki en iyi uygulamaları benimseyin.

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 initkomutunu 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.modadlı 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.tomlveyaGopkg.lock). - Bir terminalde projenizin kök dizinine gidin ve yeni bir
go.moddosyası 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.moddosyası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.moddosyanızda ayarlamalar yapmanız gerekebilir. Bu sorunları ele almak için gerektiği şekildereplaceveexcludeyö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.
SSS
Go Modules, Go (Golang) projeleri için resmi bir bağımlılık yönetim sistemidir. Go projelerinizin tekrarlanabilir ve sürdürülebilir olmasını sağlayarak, projenin bağımlılıklarını kolaylıkla yönetmenize yardımcı olur. Bağımlılık yönetimi, sürüm oluşturma sorunlarını çözmek, diğer paketlerle uyumluluğu sağlamak ve geliştirme sürecini kolaylaştırmak için çok önemlidir.
Yeni bir proje klasörü oluşturun, komut satırı aracılığıyla bu klasöre gidin ve ardından go mod init komutunu ve ardından modül yolunu kullanın. Klasörün bir Go Modules projesi olduğunu belirten bir go.mod dosyası oluşturur. Bağımlılıklarınızı yönetmek için dosyayı düzenleyin.
Bir bağımlılık eklemek veya güncellemek için go get komutunu ve ardından paketin içe aktarma yolunu ve sürüm numarasını kullanın. Bir bağımlılığı kaldırmak için kaynak kodunuzdaki ilgili import deyimini silin ve kullanılmayan bağımlılıkları go.mod dosyasından temizlemek için go mod tidy çalıştırın.
Anlamsal Sürüm Oluşturma (SemVer), üç parçalı bir numaralandırma formatı kullanan bir sürüm oluşturma sistemidir: Major.Minor.Patch (örn., 1.2.3). Geliştiricilerin yazılımlarındaki değişiklikleri iletmelerine yardımcı olur. Go Modules, sürüm oluşturma bağımlılıkları için SemVer'i içerir, bu da güncellemeleri, geriye dönük uyumluluğu ve son değişiklikleri yönetmeyi kolaylaştırır.
Ortak Git Modülleri komutları şunları içerir: go mod init - yeni bir Go Modules projesi başlatır go get - bir bağımlılık ekle, güncelle veya kaldır go mod tidy - kullanılmayan bağımlılıkları kaldırır go mod graph - bağımlılık ağacını görüntüler go mod verify - sorunlar için bağımlılık ağacını kontrol eder
Bağımlılık çakışmaları, go.mod dosyasındaki replace veya exclude yönergeleri kullanılarak çözülebilir. replace yönergesi, bir bağımlılığı başka bir sürümle veya yerel yolla değiştirmenize izin verirken, exclude yönergesi belirli sürümlerin projenizde kullanılmasını engeller.
Özel Go Modüllerini kullanmak için, ortamınızı go env -w GOPRIVATE ile yapılandırın ve ardından özel modüllerin yol belirtim kalıplarının virgülle ayrılmış bir listesini yapın. Özel havuzlarda kimlik doğrulaması yapmak için bir Git yapılandırması veya erişim belirteci kullanın ve bağımlılıklarınızı diğer Go Modules projeleri gibi yönetin.
Dep, glide veya başka bir bağımlılık yönetim sisteminden geçiş yapmak için önce orijinal projenizi yedekleyin. Ardından, yeni bir go.mod dosyası oluşturmak için go mod init çalıştırın. Ardından, go.mod dosyasını önceki sisteminizdeki bağımlılıklarla doldurmak ve gerekli ayarlamaları yapmak için go mod tidy kullanın.
AppMaster.io, Golang tabanlı arka uç uygulamaları oluşturan no-code bir platformdur. AppMaster kullanmak, kullanıcıların veri modellerini, iş süreçlerini ve API endpoints görsel olarak tasarlamasına, uygulama kaynak kodu oluşturmasına ve tam ölçeklenebilirlik ve sürdürülebilirlik avantajları sağlamasına olanak tanıdığından, uygulama geliştirmeyi büyük ölçüde hızlandırabilir.


