Go'yu kurmak için go.dev üzerindeki indirme sayfasından işletim sisteminize uygun paketi indirir, Linux'ta arşivi /usr/local altına açıp /usr/local/go/bin klasörünü PATH'e eklersiniz; macOS'ta .pkg, Windows'ta .msi yükleyicisi bu işi kendisi yapar. Ardından yeni bir terminalde go version yazarak kurulumu doğrular, bir klasörde go mod init ile modül oluşturur ve go run . ile ilk programınızı çalıştırırsınız.
Bu yazıda resmî kurulum belgesindeki adımları işletim sistemine göre açıklıyor, ilk modülü adım adım kuruyor, go run, go build ve go install arasındaki farkı gösteriyor ve yeni başlayanların en sık gördüğü kurulum hatalarını gerçek mesajlarıyla ele alıyoruz. Örnekler Go 1.27.3 ile çalıştırıldı. Serinin genel haritası için Go öğrenme rehberi sayfasına bakabilirsiniz.
Kurulum: işletim sistemine göre adımlar

Resmî kurulum sayfası her işletim sistemi için ayrı bir sekme sunar. Adımlar basittir, ama her birinde dikkat edilmesi gereken bir ayrıntı vardır.
Linux
Linux'ta indirdiğiniz .tar.gz arşivini /usr/local altına açarsınız. Belgenin özellikle vurguladığı nokta, önceki kurulumu silmeden arşivi mevcut /usr/local/go ağacının üzerine açmamanızdır; bu işlemin bozuk Go kurulumları ürettiği biliniyor. Bu yüzden önce eski klasör silinir, sonra arşiv açılır. Komutlar genellikle root yetkisi ya da sudo gerektirir. Aşağıdaki dosya adı yalnızca örnektir; indirdiğiniz sürümün adını yazın.
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.27.3.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
go versionexport satırını kalıcı yapmak için $HOME/.profile dosyanıza (sistem genelinde kurulum için /etc/profile dosyasına) ekleyin. Profil dosyasında yaptığınız değişiklik bir sonraki oturum açışınıza kadar etkili olmayabilir; hemen uygulamak için komutu doğrudan terminalde çalıştırabilir ya da source $HOME/.profile ile dosyayı yeniden yükleyebilirsiniz. Linux sunucuların genel yönetimi için Linux nedir yazımıza da göz atabilirsiniz.
macOS
macOS'ta indirilen paket dosyasını açıp yönergeleri izlersiniz. Paket Go dağıtımını /usr/local/go klasörüne kurar ve /etc/paths.d/go dosyasını oluşturarak /usr/local/go/bin klasörünü PATH'e ekler. Değişikliğin görünmesi için açık terminal oturumlarını kapatıp yeni bir terminal açmanız gerekir.
Windows
Windows'ta MSI dosyasını açıp yükleyicinin adımlarını izlersiniz. Yükleyici varsayılan olarak Go'yu Program Files veya Program Files (x86) altına kurar; isterseniz konumu değiştirebilirsiniz. Kurulumdan sonra açık komut istemlerini kapatıp yeniden açmanız gerekir, çünkü yükleyicinin ortam değişkenlerinde yaptığı değişiklikler yalnızca yeni açılan pencerelere yansır. Doğrulama için Başlat menüsünde cmd yazıp açılan pencerede go version komutunu çalıştırırsınız.
Kurulumu doğrulama ve go version
Hangi işletim sistemini kullanırsanız kullanın, doğrulama adımı aynıdır: yeni bir terminalde go version komutu kurulu sürümü, işletim sistemini ve mimariyi yazdırmalıdır. Bu yazıdaki örneklerin çalıştırıldığı makinede çıktı şöyleydi:
go versiongo version go1.27.3 windows/amd64Komut bulunamıyorsa sorun neredeyse her zaman PATH ile ilgilidir: ya Go'nun bin klasörü PATH'e eklenmemiştir ya da değişiklikten önce açılmış eski bir terminal kullanıyorsunuzdur. Komut çalışıyor ama beklediğinizden farklı bir sürüm gösteriyorsa, PATH'te önce başka bir Go kurulumu bulunuyor olabilir.
Aynı bilgiyi program içinden de okuyabilirsiniz. runtime paketi, programı derleyen araç zincirinin sürümünü ve hedef işletim sistemi ile mimariyi verir. Aşağıdaki programın çıktısı çalıştırdığınız sisteme göre değişir:
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Println("Go sürümü:", runtime.Version())
fmt.Println("İşletim sistemi:", runtime.GOOS)
fmt.Println("Mimari:", runtime.GOARCH)
// Bu makinedeki çıktı (sizinkinde işletim sistemi ve mimari farklı olabilir):
// Go sürümü: go1.27.3
// İşletim sistemi: windows
// Mimari: amd64
}GOPATH, GOBIN ve go env

Modüllerle birlikte kodunuzu belirli bir klasöre koyma zorunluluğu kalktı; projenizi diskte istediğiniz yere yerleştirebilirsiniz. Yine de GOPATH değişkeni iki iş için kullanılmaya devam eder. Birincisi indirilen bağımlılıklardır: modül önbelleği GOPATH'in pkg/mod alt klasöründe tutulur ve buradaki dosyalar salt okunur işaretlenir. İkincisi go install ile kurulan programlardır: GOBIN ayarlıysa ikili dosyalar oraya, değilse GOPATH'in bin alt klasörüne yazılır. GOPATH ayarlanmamışsa varsayılan değer Linux ve macOS'ta $HOME/go, Windows'ta %USERPROFILE%\go olur.
Kurulum belgesi, go install ile kurduğunuz araçları doğrudan çalıştırabilmek için bu bin klasörünü de PATH'e eklemenizi önerir. Linux ve macOS için örnek satır şudur:
export PATH="$PATH:$(go env GOPATH)/bin"Go'nun kullandığı tüm ayarları go env ile görebilir, tek bir değeri adıyla isteyebilirsiniz; örneğin go env GOPATH ya da go env GOOS GOARCH. go env -w ile kalıcı varsayılanlar da yazılabilir, ancak bu ayarlar kullanıcı yapılandırma dosyasına kaydedilir ve tüm projelerinizi etkiler; ne değiştirdiğinizi bilmeden kullanmayın. Ayarları okuma ve araçların ayrıntısı gofmt, go vet ve go doc araçları yazısında.
İlk modül ve ilk program
Resmî başlangıç eğitimi şu akışı izler: bir klasör açın, bağımlılık takibini başlatmak için go mod init ile modül oluşturun, kodu yazın ve çalıştırın. go mod init komutuna verdiğiniz ad modülün modül yoludur. Gerçek projelerde bu yol genellikle kodun tutulacağı depo adresidir (örneğin github.com/kullanici/proje); modülü başkalarının kullanması için yayımlayacaksanız Go araçlarının modülü indirebileceği bir konum olmak zorundadır. Deneme için example/hello gibi bir ad yeterlidir.
mkdir hello
cd hello
go mod init example/hello
cat go.modgo: creating new go.mod: module example/hello
module example/hello
go 1.27.3Oluşan go.mod dosyası iki satırdan oluşur: modül yolu ve go satırı. Go 1.27.3 araç zinciri bu satıra kendi sürümünü yazdı. go satırı modülün gerektirdiği en düşük Go sürümünü ve kodun hangi dil kurallarıyla derleneceğini belirler; bu satırın ayrıntılı anlamı ve require gibi diğer yönergeler go mod ile modül yönetimi yazısında anlatılıyor. Şimdi aynı klasörde hello.go dosyasını oluşturun:
package main
import "fmt"
func main() {
fmt.Println("Merhaba, Dünya!")
}Bu küçük programın her satırının bir görevi var. package main, dosyanın çalıştırılabilir bir programa ait olduğunu söyler; Go'da bir paket aynı klasördeki dosyalardan oluşur ve çalıştırılabilir komutlar her zaman main paketini kullanmak zorundadır. import "fmt" satırı, metin biçimlendirme ve konsola yazma işlevlerini içeren standart kütüphane paketini içeri alır. func main() ise program başladığında çağrılan fonksiyondur. Paket yapısı ve dışa aktarma kuralları paket yapısı ve import yazısında ayrıntılı olarak ele alınıyor.
go run .Merhaba, Dünya!Kaynak dosyalar UTF-8 olarak kaydedildiği sürece Türkçe karakterler sorunsuz yazdırılır; spesifikasyon da Go kaynak metninin UTF-8 kodlu Unicode olduğunu tanımlar. go help komutu go aracının tüm alt komutlarını kısa açıklamalarıyla listeler: build, run, test, fmt, vet, mod, install, env ve diğerleri. Her birinin ayrıntısını go help run gibi bir komutla okuyabilirsiniz.
go run, go build ve go install farkı

Bu üç komut sık karıştırılır. go run paketi derler, ikili dosyayı geçici bir konumda üretir ve hemen çalıştırır; geliştirme sırasında hızlı deneme içindir. go build derlenmiş ikili dosyayı bulunduğunuz klasöre yazar ama bir yere kurmaz. go install ise ikiliyi derleyip yukarıda anlatılan GOBIN ya da GOPATH/bin klasörüne kurar.
| Komut | Ne üretir | Tipik kullanım |
|---|---|---|
| go run . | Geçici ikili dosya, hemen çalıştırılır | Geliştirirken hızlı deneme |
| go build | Bulunulan klasörde ikili dosya | Dağıtılacak ya da elle çalıştırılacak çıktı |
| go build -o ad | Belirtilen adla ikili dosya | Çıktı adını ya da klasörünü seçmek |
| go install | GOBIN veya GOPATH/bin altında ikili | Kendi araçlarınızı PATH üzerinden kullanmak |
go help build çıktısına göre tek bir main paketi derlendiğinde ikili dosyanın adı paketin içe aktarma yolunun son bileşeninden gelir ve Windows için sonuna .exe eklenir. Bu yüzden example/hello modülünde go build Linux'ta hello, Windows'ta hello.exe üretir. -o bayrağı bu adı değiştirir:
go build
./hello.exe
go build -o selam.exe .
./selam.exeMerhaba, Dünya!
Merhaba, Dünya!Go ikili dosyaları varsayılan olarak statik bağlanır; FAQ'ya göre bu yüzden en basit program bile çalışma zamanını, tip bilgisini ve hata ayıklama bilgisini içerir ve birkaç megabayt tutabilir. Başka işletim sistemleri için derleme (GOOS ve GOARCH), -ldflags ile sürüm bilgisi gömme ve derleme kısıtları go build ve çapraz derleme yazısının konusu.
Birden fazla Go sürümü ve kaldırma
Kodunuzu farklı Go sürümlerinde denemeniz gerekiyorsa aynı makineye ek sürümler kurabilirsiniz. Resmî yöntem, golang.org/dl altındaki küçük yardımcı programı go install ile kurup ardından download komutunu çalıştırmaktır (bu yöntem git gerektirir). Kurulan sürüm kendi adıyla çağrılır:
go install golang.org/dl/go1.10.7@latest
go1.10.7 download
go1.10.7 versionBu örnek resmî belgedeki sürüm numarasını kullanır; siz ihtiyacınız olan sürümü yazarsınız. Ayrıca Go 1.21'den beri go komutu, go.mod dosyasındaki go veya toolchain satırı kendi sürümünden yeniyse gereken araç zincirini bulup kullanabilir; bu davranış GOTOOLCHAIN ayarıyla yönetilir ve varsayılanı auto'dur. Kaldırma tarafında belge şunları sıralar: derleme önbelleği go clean -cache ile, indirilen modüller go clean -modcache ile temizlenir; go install ile kurulanlar GOBIN klasöründedir; Linux ve macOS'ta /usr/local/go silinir ve PATH girdisi kaldırılır; Windows'ta Denetim Masası'ndan ya da msiexec /x komutuyla kaldırılır.
Sık yapılan hatalar
Kurulum ve ilk çalıştırma aşamasında görülen hataların çoğu birkaç kalıba indirgenir. Aşağıdaki mesajların hepsi Go 1.27.3'te gerçekten üretildi.
1. Modül dosyası olmadan go run . çalıştırmak. go mod init adımını atlayıp bir klasörde go run . yazarsanız go komutu modül bulamaz:
go: go.mod file not found in current directory or any parent directory; see 'go help modules'Çözüm, klasörde go mod init çalıştırmaktır. Tek dosyalı hızlı denemelerde go run hello.go biçimi modül olmadan da çalışır, ama gerçek projelerde her zaman bir modülle çalışın.
2. main fonksiyonunun adını yanlış yazmak. Go'da büyük ve küçük harf anlamlıdır. Fonksiyonu Main diye yazarsanız derleme bağlama aşamasında başarısız olur:
# command-line-arguments
runtime.main_main·f: function main is undeclared in the main package3. Paket adını main dışında bir şey yapmak. Çalıştırılabilir bir program package main ile başlamalıdır. Paket adı selam olan bir dosyayı go run ile çalıştırmaya kalkarsanız şu mesajı görürsünüz:
package command-line-arguments is not a main package4. Eski kurulumun üzerine arşiv açmak. Linux'ta yeni sürümü mevcut /usr/local/go klasörünün üzerine açmak, iki sürümün dosyalarını karıştırır. Resmî belge bunun bozuk kurulumlara yol açtığını açıkça yazar; önce klasörü silin.
5. PATH değişikliğinden sonra eski terminali kullanmak. go: command not found ya da Windows'ta komutun tanınmaması, çoğunlukla değişiklikten önce açılmış bir terminalden kaynaklanır. Yeni bir terminal açın; Linux'ta profil dosyasını yeniden yükleyin.
Sık Sorulan Sorular
Go yazmak için hangi editörü kullanmalıyım?
Resmî editör sayfası en yaygın seçenekleri listeler: Go eklentisiyle Visual Studio Code, bağımsız IDE ya da IntelliJ IDEA Ultimate eklentisi olarak GoLand ve vim-go eklentisiyle vim. Başlangıç eğitimi, Go'yu destekleyen herhangi bir metin editörünün yeterli olduğunu belirtir.
go run ile go build arasındaki fark nedir?
go run derleyip hemen çalıştırır ve ikili dosyayı saklamaz; go build ikili dosyayı klasöre yazar ama çalıştırmaz. Geliştirirken go run, dağıtım için go build kullanılır.
İlk program için internet bağlantısı gerekir mi?
Yalnızca standart kütüphaneyi kullanan bir program için gerekmez; fmt gibi paketler kurulumla birlikte gelir. Başlangıç eğitimindeki rsc.io/quote örneğinde olduğu gibi harici bir modül içe aktardığınızda ise go mod tidy o modülü indirir ve go.sum dosyasını oluşturur.
Basit bir program neden birkaç megabayt tutuyor?
Go bağlayıcısı varsayılan olarak statik ikili dosya üretir; çalışma zamanı, tip bilgisi ve panic anındaki yığın izleri için gereken bilgiler dosyanın içindedir. FAQ, -ldflags=-w ile DWARF hata ayıklama bilgisinin çıkarılabileceğini ve bunun boyutu belirgin biçimde küçültebileceğini belirtir.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: Go öğrenme rehberi · go mod ile modül yönetimi · Go paket yapısı ve import · go build ve çapraz derleme · Go değişkenler ve sabitler · Go nedir