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

Kurulum: işletim sistemine göre adımlar: Linux, macOS, Windows

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.

bash
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 version

export 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:

bash
go version
text
go version go1.27.3 windows/amd64

Komut 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:

go
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

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:

bash
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.

bash
mkdir hello
cd hello
go mod init example/hello
cat go.mod
text
go: creating new go.mod: module example/hello
module example/hello

go 1.27.3

Oluş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:

go
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.

bash
go run .
text
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ı

go run, go build ve go install farkı: go run ., go build, go build -o ad, go install

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.

KomutNe üretirTipik kullanım
go run .Geçici ikili dosya, hemen çalıştırılırGeliştirirken hızlı deneme
go buildBulunulan klasörde ikili dosyaDağıtılacak ya da elle çalıştırılacak çıktı
go build -o adBelirtilen adla ikili dosyaÇıktı adını ya da klasörünü seçmek
go installGOBIN veya GOPATH/bin altında ikiliKendi 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:

bash
go build
./hello.exe
go build -o selam.exe .
./selam.exe
text
Merhaba, 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:

bash
go install golang.org/dl/go1.10.7@latest
go1.10.7 download
go1.10.7 version

Bu ö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:

text
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:

text
# command-line-arguments
runtime.main_main·f: function main is undeclared in the main package

3. 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:

text
package command-line-arguments is not a main package

4. 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