# Linux'ta Golang Kurulumu

> Linux (Ubuntu/Debian) üzerinde güncel Go (Golang) kurulumunu, ortam değişkenleri ayarlarını ve Go Modules ile ilk proje oluşturmayı öğrenin.

Go (Golang), Google tarafından geliştirilen, yüksek performanslı, statik tipli ve özellikle bulut bilişim/mikroservis mimarilerinde çok popüler olan açık kaynaklı bir programlama dilidir. Bu yazıda, Linux tabanlı sistemler (özellikle Ubuntu/Debian) üzerinde güncel Go kurulumunu ve ortam değişkenlerinin (environment variables) yapılandırılmasını ele alacağız.

> 💡 **Özet (TL;DR):**
> - **Amaç:** Güncel Go (Golang) sürümünün Linux üzerine kurulması, PATH tanımlarının yapılması ve Go Modules ile ilk uygulamanın çalıştırılması.
> - **Kilit Komutlar:** Eski sürümü temizleme (`sudo rm -rf /usr/local/go`), arşivi açma (`sudo tar -C /usr/local -xzf go...tar.gz`) ve modül başlatma (`go mod init`).
> - **Motto:** *Fast, reliable, and module-ready Go environment setup.*

---

## 1. Kurulum Öncesi Hazırlıklar

Go ekosistemindeki kütüphanelerin büyük bir kısmı GitHub veya GitLab gibi platformlarda açık kaynaklı olarak barındırılır. Go derleyicisi bu paketleri otomatik olarak indirmek için Git'e ihtiyaç duyar.

Kuruluma başlamadan önce paket listesini güncelleyip Git'i yükleyelim:

```bash
sudo apt update
sudo apt install git wget -y
```

---

## 2. Go Arşivini İndirme ve Kurulum

Go'nun en son kararlı sürümünü indirmek için resmi [Go İndirme Sayfası](https://go.dev/dl/) adresini kontrol edebilirsiniz. Bu yazıda örnek olarak güncel **Go 1.26.0** sürümünü kuracağız.

### Adım 1: Sürüm Arşivini İndirme
`wget` aracı yardımıyla Go arşivini sunucumuza veya bilgisayarımıza indirelim:

```bash
# 64-bit mimari için (Genel olarak kullanılan)
wget -c https://go.dev/dl/go1.26.0.linux-amd64.tar.gz

# 32-bit mimari için (Eski sistemler)
wget -c https://go.dev/dl/go1.26.0.linux-386.tar.gz
```

### Adım 2: Eski Sürümü Temizleme ve Arşivi Açma
Resmi Go dokümantasyonuna göre, mevcut bir Go kurulumunun üzerine yeni sürümü açmak kararsızlıklara yol açabilir. Bu nedenle öncelikle eski sürümü temizliyoruz, ardından yeni arşivi `/usr/local` dizinine çıkartıyoruz:

```bash
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.26.0.linux-amd64.tar.gz
```

---

## 3. Ortam Değişkenlerinin (PATH) Yapılandırılması

Go komutunun terminalde herhangi bir dizinden çalıştırılabilmesi için `/usr/local/go/bin` yolunu sistemin `PATH` ortam değişkenine eklememiz gerekir.

### Adım 1: Profil Dosyasını Düzenleme
Eğer varsayılan kabuk olarak **Bash** kullanıyorsanız `~/.bashrc` dosyasını, **Zsh** kullanıyorsanız `~/.zshrc` dosyasını düzenlemeniz gerekir:

```bash
nano ~/.bashrc
```

Dosyanın en alt satırına giderek aşağıdaki tanımlamaları ekleyin:

```bash
# Go ikili dosyalarının yolu
export PATH=$PATH:/usr/local/go/bin

# Modern Go sürümleri için isteğe bağlı küresel go dizin ayarları
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
```

> 📌 **GOPATH Notu:** Eski Go sürümlerinde tüm projelerimizi `GOPATH/src` altında barındırmak zorundaydık. Modern Go ile birlikte gelen **Go Modules** sayesinde artık kodlarımızı diskte dilediğimiz herhangi bir klasörde yazabiliriz. Ancak indirdiğimiz üçüncü parti paketler ve derlenen araçlar hala `$GOPATH` (varsayılan olarak `~/go`) dizininde saklanır.

### Adım 2: Değişiklikleri Aktif Etme
Terminali kapatıp açmadan yeni yolların geçerli olmasını sağlamak için profil dosyasını yeniden yükleyelim:

```bash
source ~/.bashrc
```

Kurulumun başarılı olduğunu doğrulamak için sürüm kontrolü yapabilirsiniz:

```bash
go version
# Çıktı örneği: go version go1.26.0 linux/amd64
```

---

## 4. İlk Go Projesini Başlatma (Go Modules)

Modern Go projelerinde bağımlılık yönetimi `go.mod` dosyaları üzerinden yürütülür. İlk projemizi oluşturarak kurulumumuzu test edelim.

### Adım 1: Proje Dizinini Oluşturma
Dilediğiniz bir konumda yeni bir klasör oluşturup içine girin:

```bash
mkdir -p ~/projeler/merhaba-go
cd ~/projeler/merhaba-go
```

### Adım 2: Go Modülünü Başlatma
Projenizi modül tabanlı hale getirmek için `go mod init` komutunu çalıştırın:

```bash
go mod init merhaba-go
# Bu komut dizinde go.mod adında bir bağımlılık yönetim dosyası oluşturur.
```

### Adım 3: Kod Yazımı ve Çalıştırma
`main.go` adında bir dosya oluşturup içine şu kodları yazın:

```go
package main

import "fmt"

func main() {
    fmt.Println("Merhaba Go dünyası!")
}
```

Son olarak programı çalıştırın:

```bash
go run main.go
# Çıktı: Merhaba Go dünyası!
```

Tebrikler! Linux ortamında en güncel Go kurulumunu tamamladınız ve ilk modern Go uygulamanızı başarıyla çalıştırdınız.

---

## Sıkça Sorulan Sorular (FAQ)

### Neden sistem paket yöneticisini (`apt install golang`) kullanmadık?
Ubuntu ve Debian depolarındaki Go paketleri genellikle resmi sürümlerin oldukça gerisinden gelir. En son performans iyileştirmelerine, güvenlik yamalarına ve dil özelliklerine erişebilmek için her zaman resmi arşiv dosyasını indirerek manuel kurmak en sağlıklı yöntemdir.

### PATH tanımlarını yaptım ama `go: command not found` hatası alıyorum?
Bunun iki sebebi olabilir:
1. Değişiklikleri yaptığınız profil dosyasını (`~/.bashrc`) kaydettikten sonra `source ~/.bashrc` komutuyla aktif etmemiş olabilirsiniz.
2. İşletim sisteminizde Bash yerine Zsh kullanıyor olabilirsiniz. Bu durumda tanımları `~/.zshrc` dosyasına ekleyip `source ~/.zshrc` yapmalısınız. Kabuğunuzu öğrenmek için `echo $SHELL` komutunu çalıştırabilirsiniz.

### Go modüllerini (`go.mod`) kullanmak neden zorunludur?
Go Modules, projenizin hangi üçüncü parti paketlere (ve bunların hangi sürümlerine) bağımlı olduğunu net bir şekilde tanımlar. Projenizi başka bir bilgisayara taşıdığınızda veya canlı sunucuya attığınızda `go build` komutu otomatik olarak doğru paket sürümlerini çeker ve sürüm çakışmalarını (dependency hell) engeller.

---

##### Bu Yazıda Yapılan Değişiklikler

- 20.06.2026: Yazı tamamen modernize edildi. Go 1.26.0 sürümüne göre indirme ve kurulum komutları güncellendi. Eski dizin temizleme uyarısı eklendi. GOPATH zorunluluğunun kalktığı belirtilerek Go Modules (`go.mod`) tabanlı modern proje kurulum adımları eklendi.
- 11.05.2022: Yazı özeti düzenlendi.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/linuxda-golang-kurulumu
