Go geliştiricileri için vazgeçilmez bir araç olan GVM (Go Version Manager) ile Go sürümlerini etkili bir şekilde nasıl yöneteceğinizi öğrenin. Bu kapsamlı rehber, kurulumdan ileri düzey kullanıma kadar tüm adımları detaylıca açıklıyor ve projelerinizdeki sürüm çakışmalarını ortadan kaldırıyor. Artık farklı Go projeleri arasında sorunsuz geçişler yaparak verimliliğinizi artırabilirsiniz.
Modern yazılım geliştirme dünyasında, projelerin farklı bağımlılıklara ve dolayısıyla farklı yazılım sürüm gereksinimlerine sahip olması oldukça yaygındır. Go programlama dili ile çalışan geliştiriciler için bu durum, özellikle birden fazla proje üzerinde eşzamanlı olarak çalıştıklarında veya eski projelerle uyumluluğu sürdürmeleri gerektiğinde önemli bir zorluk teşkil edebilir. İşte tam da bu noktada GVM (Go Version Manager) devreye girerek hayat kurtarıcı bir çözüm sunar. Peki, GVM nedir ve Go geliştirme sürecinizi nasıl daha akıcı hale getirebilir?
GVM, adından da anlaşılacağı gibi, Go programlama dilinin farklı sürümlerini yönetmek için tasarlanmış bir komut satırı aracıdır. Ruby geliştiricilerinin RVM veya rbenv, Node.js geliştiricilerinin NVM kullandığı gibi, Go topluluğu da benzer bir ihtiyacı GVM ile karşılar. GVM sayesinde sisteminizde birden fazla Go SDK sürümünü sorunsuz bir şekilde barındırabilir ve projeden projeye geçerken istediğiniz Go sürümünü kolayca etkinleştirebilirsiniz.
Bir an düşünün: Bir yandan Go 1.18 ile geliştirilen yeni nesil bir mikroservis üzerinde çalışırken, diğer yandan Go 1.15 gerektiren eski bir projenin bakımını yapmanız gerekiyor. Bu durumda, Go’yu manuel olarak kurup kaldırmak veya farklı sürümleri PATH değişkeninde sürekli değiştirmek hem zaman alıcı hem de hata yapmaya açık bir süreç olacaktır. GVM, bu karmaşayı ortadan kaldırarak her bir projenin kendine özgü Go sürümüyle çalışmasını sağlar. Bu sayede, bağımlılık çakışmaları, build hataları ve uyumluluk sorunları gibi can sıkıcı problemlerle uğraşmak zorunda kalmazsınız. GVM’in sunduğu yalıtılmış ortamlar, geliştirme süreçlerinizi daha öngörülebilir ve güvenilir hale getirir.
Sadece farklı sürümleri yönetmekle kalmaz, GVM aynı zamanda Go araç zincirini (compiler, linter, formatter vb.) ve ilgili paketleri de her bir Go sürümüne özel olarak yönetebilir. Bu, her Go sürümünün kendi bağımlılık setine sahip olabileceği anlamına gelir. Örneğin, Go 1.18 ile gelen yeni bir lint aracı, Go 1.15 ile düzgün çalışmayabilir. GVM, bu tür senaryolarda sizi manuel yapılandırma zahmetinden kurtarır. Ayrıca, Go’nun yeni bir sürümü çıktığında, GVM ile tek bir komutla kolayca yükleyebilir ve mevcut projelerinizi etkilemeden test edebilirsiniz. Bu esneklik, geliştiricilere yeni teknolojileri hızlıca deneme ve mevcut projeleri kademeli olarak yükseltme imkanı sunar.
Geliştirme ortamınızın temiz ve düzenli kalmasını sağlamak GVM’in en büyük avantajlarından biridir. Sistem genelinde kurulmuş tek bir Go sürümü yerine, her şey GVM’in kendi dizinleri altında organize edilir. Bu durum, gelecekte farklı Go sürümleriyle ilgili herhangi bir sorun yaşamanız durumunda kolayca hata ayıklamanıza veya eski bir Go sürümüne geri dönmenize olanak tanır. Özellikle açık kaynak projelere katkıda bulunurken veya farklı müşteriler için çalışırken, GVM’in sağladığı bu sürüm kontrolü paha biçilmezdir.
GVM Kurulumu: Adım Adım Rehber
GVM’i kullanmaya başlamak için öncelikle sisteminize kurmanız gerekir. Kurulum süreci oldukça basittir ve genellikle tek bir komutla halledilebilir. Ancak, doğru çalıştığından emin olmak için bazı ön koşulların yerine getirilmesi ve kurulum sonrası yapılandırmaların yapılması önemlidir. Bu bölümde, GVM’i macOS ve Linux işletim sistemlerine nasıl kuracağınızı ve temel yapılandırmaları nasıl tamamlayacağınızı adım adım inceleyeceğiz.
GVM’i macOS ve Linux’ta Nasıl Kurarsınız?
GVM, genellikle Unix benzeri sistemlerde (Linux, macOS) sorunsuz çalışır. Kurulum öncesinde sisteminizde git ve curl gibi temel araçların yüklü olduğundan emin olun. Çoğu modern dağıtımda bu araçlar zaten mevcuttur. Eğer yüklü değillerse, kendi işletim sisteminizin paket yöneticisi ile kolayca kurabilirsiniz (örneğin, Ubuntu’da sudo apt install git curl).
GVM’i kurmak için terminalinizi açın ve aşağıdaki komutu çalıştırın:
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Bu komut, GVM yükleyicisini indirir ve çalıştırır. Yükleyici, GVM'i kullanıcı dizininizdeki (örneğin, ~/.gvm) bir alt dizine kuracaktır. Kurulum tamamlandıktan sonra, GVM'in kabuk ortamınızda düzgün çalışabilmesi için bazı yapılandırma adımları gereklidir.
Kurulum Sonrası Yapılandırma Adımları Nelerdir?
Yükleyici, genellikle size kabuk yapılandırma dosyanıza (örneğin, ~/.bashrc, ~/.zshrc veya ~/.profile) eklemeniz gereken bir satır sağlayacaktır. Bu satır, GVM'i kabuk oturumunuz başladığında otomatik olarak başlatır. Örnek olarak, çoğu durumda şu satırı eklemeniz istenir:
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
Bu satırı ilgili kabuk yapılandırma dosyanıza ekledikten sonra, değişikliklerin etkili olması için terminal oturumunuzu yeniden başlatmanız veya aşağıdaki komutu çalıştırmanız gerekir:
source ~/.bashrc # Veya kullandığınız kabuk yapılandırma dosyası
Kurulumun başarılı olup olmadığını kontrol etmek için terminalinize gvm version yazın:
gvm version
Eğer GVM'in sürüm numarasını görüyorsanız, kurulum başarılı demektir. Artık GVM ile Go sürümlerini yönetmeye hazırsınız.
Kurulum sırasında veya sonrasında herhangi bir sorunla karşılaşırsanız, genellikle hata mesajları size ne yapmanız gerektiği konusunda ipuçları verecektir. En yaygın sorunlardan biri, PATH değişkeninin doğru ayarlanmamasıdır. GVM, bu tür sorunları minimize etmek için tasarlanmıştır, ancak manuel yapılandırma her zaman önemlidir. Özellikle sisteminizde önceden kurulu bir Go sürümü varsa, GVM'in bunu devralmaması için dikkatli olmak gerekebilir. GVM, kendi Go sürümlerini izole bir şekilde yönetir, bu da mevcut kurulumlarınızı etkilemez.
Uzman İpucu: Kabuk yapılandırma dosyanızı düzenledikten sonra, değişikliklerin anında geçerli olması için terminali kapatıp açmak yerine source komutunu kullanmak daha hızlı bir yöntemdir. Bu, özellikle sık sık yapılandırma değişiklikleri yapıyorsanız zaman kazandırır.
Go Sürümlerini GVM ile Yönetme Pratikleri
GVM'in gücü, Go sürümlerini kolayca yükleyip aralarında geçiş yapabilme yeteneğinde yatar. Bu bölümde, birden fazla Go sürümünü nasıl yükleyeceğinizi, varsayılan bir sürümü nasıl ayarlayacağınızı ve projeleriniz için özel Go sürümlerini nasıl kullanacağınızı detaylıca inceleyeceğiz. Bu pratik bilgiler, geliştirme iş akışınızı önemli ölçüde hızlandıracaktır.
Birden Fazla Go Sürümünü Nasıl Yüklersiniz?
GVM ile bir Go sürümü yüklemek oldukça basittir. gvm install komutunu ve istediğiniz Go sürüm numarasını kullanmanız yeterlidir. Örneğin, Go 1.18 ve Go 1.21 sürümlerini yüklemek için aşağıdaki komutları kullanabilirsiniz:
gvm install go1.18
gvm install go1.21
GVM, belirtilen Go sürümünü indirir, derler ve kendi dizin yapısı altına kurar. Bu işlem, internet bağlantınızın hızına ve sisteminizin performansına bağlı olarak biraz zaman alabilir. Kurulum sırasında ilerlemeyi terminalde görebilirsiniz. Eğer belirli bir yama sürümünü (örneğin Go 1.21.1) yüklemek isterseniz, tam sürüm numarasını belirtmeniz yeterlidir: gvm install go1.21.1.
Yüklü tüm Go sürümlerini görmek için gvm list komutunu kullanabilirsiniz:
gvm list
Bu komut, sisteminizde GVM tarafından yönetilen tüm Go sürümlerini listeler ve o an aktif olan sürümü belirtir. Aktif olan sürümün yanında bir yıldız (*) işareti bulunur.
Varsayılan Go Sürümünü Nasıl Ayarlarsınız?
Projeleriniz genelinde kullanmak istediğiniz bir Go sürümü varsa, bunu varsayılan olarak ayarlayabilirsiniz. gvm use komutu ile bu işlemi gerçekleştirebilirsiniz. Örneğin, Go 1.21'i varsayılan olarak ayarlamak için:
gvm use go1.21 --default
--default bayrağını eklemek, bu sürümün her yeni terminal oturumu başladığında otomatik olarak etkinleştirilmesini sağlar. Bu, genellikle üzerinde en çok çalıştığınız veya projelerinizin çoğunluğunun gerektirdiği sürümdür. Varsayılan sürümü değiştirdiğinizde, mevcut terminal oturumunuzda da o sürüm aktif hale gelecektir. Bu sayede, genel geliştirme ortamınız hep belirli bir Go sürümüne ayarlı kalır.
Proje Bazında Sürüm Yönetimi Nasıl Yapılır?
GVM'in en güçlü özelliklerinden biri, proje bazında Go sürümü atayabilmesidir. Bu, farklı projelerinizin farklı Go sürümleriyle çalışmasını sağlayarak bağımlılık çakışmalarını tamamen ortadan kaldırır. Bir proje dizinine gidip o proje için belirli bir Go sürümünü etkinleştirmek için aşağıdaki komutu kullanabilirsiniz:
cd /path/to/your/project
gvm use go1.18
Bu komut, yalnızca mevcut terminal oturumunuz ve bu dizin içindeki alt dizinler için Go 1.18'i etkinleştirir. Terminali kapatıp açtığınızda veya başka bir dizine geçtiğinizde GVM, varsayılan sürümünüze veya o dizin için özel olarak belirlenmiş başka bir sürüme geri dönecektir. Bu özellik, özellikle çok sayıda farklı Go projesi üzerinde çalışan veya birden fazla ekiple işbirliği yapan geliştiriciler için hayatidir.
Eğer bir projeyi her açtığınızda otomatik olarak belirli bir Go sürümüne geçmesini istiyorsanız, projenizin kök dizininde .gvmrc adında bir dosya oluşturabilir ve içine gvm use go1.18 gibi bir komut yazabilirsiniz. Bu durumda, ilgili dizine girdiğinizde GVM size otomatik olarak bu sürümü etkinleştirmek isteyip istemediğinizi sorar. Bu, iş akışınızı daha da otomatize eder ve manuel geçiş yapma ihtiyacını ortadan kaldırır.
Uzman İpucu: gvm use komutunu yalnızca genel olarak en çok kullandığınız Go sürümü için kullanın. Proje bazlı sürüm yönetiminde --default kullanmaktan kaçının, aksi takdirde GVM'in esnekliğini kaybedersiniz. Proje bazında .gvmrc dosyası oluşturmak daha iyi bir yaklaşımdır.
Gelişmiş GVM Kullanımı ve İpuçları
GVM, sadece temel sürüm yönetimi ötesinde, geliştirme ortamınızı daha verimli hale getirecek gelişmiş özellikler ve ipuçları sunar. Bu bölümde, GVM'in ortam değişkenleri üzerindeki etkisini, Go modülleri ile entegrasyonunu ve potansiyel olarak karşılaşabileceğiniz bazı senaryoları inceleyeceğiz. Bu bilgiler, GVM'den en iyi şekilde yararlanmanızı sağlayacaktır.
GVM Ortamını Anlamak: PATH ve GOPATH
Go geliştirirken PATH ve GOPATH ortam değişkenleri kritik öneme sahiptir. GVM, bu değişkenleri otomatik olarak yöneterek sizin için bu yükü hafifletir. Bir Go sürümünü gvm use ile etkinleştirdiğinizde, GVM PATH değişkeninizi ilgili Go SDK'sının bin dizinini içerecek şekilde günceller. Bu, terminalinizde go komutunu çalıştırdığınızda doğru Go derleyicisinin kullanılmasını sağlar.
Örnek olarak, Go 1.18'i etkinleştirdiğinizde, PATH değişkeniniz muhtemelen ~/.gvm/gos/go1.18/bin yolunu içerecektir. Bu, Go'nun kendi araçlarının (go build, go run vb.) bu sürümden çalıştırılmasını garanti eder. Ayrıca GVM, her Go sürümü için ayrı bir GOPATH ortamı da tanımlar. Varsayılan olarak, bu genellikle ~/.gvm/pkgsets/go1.18/global gibi bir yola işaret eder. Bu, her Go sürümünün kendi bağımlılıklarını ve kurulu araçlarını ayrı bir alanda tutmasına olanak tanır.
gvm use go1.18
echo $PATH
echo $GOPATH
Yukarıdaki komutları çalıştırarak bu değişiklikleri kendiniz gözlemleyebilirsiniz. GVM'in bu otomatik yönetimi sayesinde, farklı Go sürümleri arasında geçiş yaparken PATH ve GOPATH'ı manuel olarak ayarlama endişesi taşımanıza gerek kalmaz.
GVM ile Go Modüllerini Etkin Kullanma
Go modülleri, Go 1.11 ile tanıtılan ve Go projeleri için bağımlılık yönetiminde devrim yaratan bir özelliktir. GVM, Go modülleri ile tamamen uyumludur. Go modülleri, projelerin bağımlılıklarını go.mod ve go.sum dosyalarında tanımladığı için, artık merkezi bir GOPATH'e eskisi kadar sıkıca bağlı değildir. Ancak GVM'in sürüm yönetimi yetenekleri, Go modülleri kullanan projelerde bile hayati öneme sahiptir.
Bir projenin go.mod dosyasında belirli bir Go sürümü gereksinimi (go 1.18 gibi) belirtilmiş olabilir. GVM kullanarak, projenizin gerektirdiği tam Go sürümünü etkinleştirdiğinizden emin olursunuz. Bu, derleme hatalarını önler ve projenin beklenen şekilde çalışmasını sağlar. Örneğin, bir projenin go.mod dosyasında go 1.18 yazıyorsa ve siz Go 1.15 ile derlemeye çalışırsanız, modül sistemi sizi uyarabilir veya derleme başarısız olabilir. GVM ile doğru Go sürümünü etkinleştirmek bu sorunu ortadan kaldırır.
# Projenizin kök dizininde
cd my-go-module-project
# .gvmrc dosyanız yoksa veya manuel geçiş yapmak istiyorsanız
gvm use $(grep -E '^go\s[0-9]+\.[0-9]+' go.mod | awk '{print "go"$2}')
Yukarıdaki örnekte, grep ve awk komutları ile go.mod dosyasındaki Go sürüm bilgisini alıp, GVM'e aktararak otomatik sürüm geçişi sağlanmıştır. Bu, özellikle CI/CD ortamlarında veya sık sık farklı projeler arasında geçiş yaparken oldukça kullanışlıdır.
Ayrıca, GVM ile her Go sürümüne özel araçlar (linters, formatters) kurabilirsiniz. Örneğin, Go 1.21 için belirli bir golangci-lint sürümünü kurarken, Go 1.18 için başka bir sürümünü kurabilirsiniz. Bu sayede, her Go sürümünün kendine ait araç setine sahip olmasını sağlayarak geliştirme ortamınızın bütünlüğünü korursunuz.
gvm use go1.21
go install golang.org/x/tools/cmd/goimports@latest
gvm use go1.18
go install golang.org/x/tools/cmd/goimports@go1.18
Bu, farklı Go sürümleriyle uyumlu farklı araç sürümlerini yönetmenizi sağlar ve potansiyel çakışmaları önler. GVM, Go ekosistemindeki bu tür karmaşıklıkları yönetmek için size güçlü bir temel sunar.
GVM ile Karşılaşılabilecek Sorunlar ve Çözümleri
GVM, Go sürüm yönetimini büyük ölçüde basitleştirse de, bazen beklenmedik durumlarla karşılaşmak mümkündür. Bu bölümde, GVM kullanırken yaygın olarak karşılaşılan bazı sorunları ve bunların nasıl çözülebileceğini ele alacağız. Bu bilgiler, sorun giderme sürecinizi hızlandıracak ve geliştirme deneyiminizi daha sorunsuz hale getirecektir.
1. Kabuk Ortam Değişkeni Ayarlarının Yüklenmemesi
Sorun: GVM'i kurduktan sonra gvm komutunu çalıştırdığınızda "command not found" (komut bulunamadı) hatası alıyorsunuz.
Çözüm: Bu durum genellikle, GVM'in kabuk yapılandırma dosyanıza (~/.bashrc, ~/.zshrc, ~/.profile) doğru şekilde kaynaklanmadığı anlamına gelir. GVM kurulumu sırasında size önerilen satırın ([[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm") ilgili dosyanıza eklendiğinden emin olun. Ekledikten sonra, değişikliklerin geçerli olması için terminali yeniden başlatın veya source ~/.bashrc (kullandığınız kabuk dosyasına göre) komutunu çalıştırın.
2. Go Sürümlerinin İndirilememesi veya Derlenememesi
Sorun: gvm install go1.x komutu başarısız oluyor; internet bağlantısı sorunları, derleme hataları veya eksik bağımlılıklar belirtiliyor.
Çözüm: Öncelikle internet bağlantınızı kontrol edin. Eğer bağlantıdaysanız, sisteminizde Go derlemek için gerekli olan bazı araçların (örneğin gcc, make) yüklü olduğundan emin olun. Linux sistemlerde bu genellikle build-essential paketi ile gelir: sudo apt install build-essential veya sudo yum install @development. macOS'ta Xcode Command Line Tools'un yüklü olması gerekir: xcode-select --install. Bazen Go'nun kaynak kodlarını indirirken ağ sorunları yaşanabilir; bu durumda komutu tekrar denemek yardımcı olabilir.
3. Eski Go Sürümleriyle Uyumsuzluk
Sorun: GVM ile eski bir Go sürümünü (örneğin go1.4 veya daha eskisi) yüklemeye çalışırken derleme hataları alıyorsunuz.
Çözüm: Go'nun çok eski sürümleri, modern derleyici ortamlarında doğrudan derlenmeyebilir. Özellikle Go 1.4 ve öncesi için "bootstrap" derleyicisi olarak Go 1.4'ün zaten sisteminizde yüklü olmasını gerektirebilirler. Bu durumda, önce gvm install go1.4 ile Go 1.4'ü kurup ardından diğer eski sürümleri yüklemeyi deneyin. Nadiren de olsa, bazı eski sürümlerin kaynak kodu güncel sistem kütüphaneleriyle uyumsuzluk gösterebilir. Bu senaryolar, genellikle Go'nun son sürümlerini kullanan modern geliştirme ortamlarında nadiren yaşanır.
4. GOPATH Çakışmaları veya Beklenmeyen Modül Davranışları
Sorun: GVM'in aktif Go sürümüne rağmen, go get veya go install komutları paketleri beklenen yere indirmiyor veya modüllerle ilgili garip davranışlar sergiliyor.
Çözüm: GVM'in GOPATH'i doğru ayarladığından emin olmak için echo $GOPATH komutunu kullanın. Eğer hala sorun yaşıyorsanız, sistem genelindeki GOPATH ayarlarınız GVM'in üzerine yazıyor olabilir. Kabuk yapılandırma dosyanızda GVM'in source satırından sonra başka bir GOPATH tanımı olmadığından emin olun. Go modülleri kullanıyorsanız, GO111MODULE=on ortam değişkeninin etkin olduğundan emin olun, ancak Go 1.16 ve sonrası için bu varsayılan olarak zaten açıktır. Sorun devam ederse, projenizin go.mod dosyasını ve bağımlılıklarını kontrol edin; go clean -modcache komutu ile modül önbelleğini temizlemek de yardımcı olabilir.
Uzman İpucu: Sorun giderme aşamasında, her zaman terminal oturumunuzu yeniden başlatarak veya source komutunu kullanarak kabuk ortam değişkenlerinin doğru yüklendiğinden emin olun. Bu basit adım, birçok sorunu çözebilir.
Sonuç ve Sıkça Sorulan Sorular
Bu makalede GVM'in (Go Version Manager) ne olduğunu, neden Go geliştiricileri için kritik bir araç olduğunu ve nasıl adım adım kurulup kullanılacağını detaylıca ele aldık. GVM, farklı Go sürümlerini aynı sistemde izole bir şekilde yöneterek, proje bağımlılığı sorunlarını ve uyumluluk problemlerini ortadan kaldıran güçlü bir çözümdür. Kurulumdan başlayarak, birden fazla Go sürümünü yükleme, varsayılan sürümü ayarlama ve proje bazında sürüm yönetimi gibi temel pratikleri öğrendik. Ayrıca, GVM'in PATH ve GOPATH ortam değişkenleri üzerindeki etkisini, Go modülleri ile entegrasyonunu ve karşılaşabileceğiniz yaygın sorunların çözüm yollarını inceleyerek geliştirme deneyiminizi daha verimli hale getirecek ipuçları sunduk. GVM sayesinde, Go geliştirme süreçlerinizde daha esnek, kontrollü ve hatasız çalışabilirsiniz.
Sıkça Sorulan Sorular
1. GVM'i kurmak için root yetkilerine ihtiyacım var mı?
Hayır, GVM genellikle kullanıcının kendi ana dizinine (~/.gvm) kurulur ve bu nedenle root yetkilerine ihtiyaç duymaz. Bu, sistem geneli Go kurulumlarını etkilemeden, kullanıcı bazında Go sürümlerini yönetmenizi sağlar.
2. GVM ve Go modülleri birlikte nasıl çalışır?
GVM, Go modülleri ile tamamen uyumludur. GVM, aktif olan Go sürümünü ayarlar ve Go modülleri bu sürümün derleyicisini ve araçlarını kullanır. Projenizin go.mod dosyasında belirtilen Go sürümüyle GVM'de aktif olan sürümün eşleştiğinden emin olmak, sorunsuz bir geliştirme süreci için önemlidir.
3. GVM kurulu bir Go sürümünü nasıl kaldırabilirim?
Bir Go sürümünü kaldırmak için gvm uninstall go1.x komutunu kullanabilirsiniz. Örneğin, Go 1.18'i kaldırmak için gvm uninstall go1.18 komutunu çalıştırabilirsiniz. Bu komut, ilgili Go sürümünün tüm dosyalarını GVM dizininden siler.
4. GVM ile belirli bir Go sürümünün yama (patch) versiyonunu yükleyebilir miyim?
Evet, GVM ile Go'nun tam sürüm numarasını belirterek istediğiniz yama versiyonunu yükleyebilirsiniz. Örneğin, gvm install go1.21.1 komutu Go 1.21.1 sürümünü kuracaktır. GVM, Go'nun resmi dağıtımlarını kullanarak bu sürümleri indirir ve derler.
5. GVM, Go projelerindeki bağımlılıkları da yönetir mi?
GVM, doğrudan Go projelerinin bağımlılıklarını yönetmez; bu görev Go modüllerine aittir (go.mod dosyası). Ancak GVM, projelerin bağımlılıkları için doğru Go sürümünün etkinleştirilmesini sağlar. Böylece, Go modülleri doğru Go derleyicisi ve araçlarıyla çalışabilir ve bağımlılıklarınızı tutarlı bir şekilde yönetebilirsiniz.