# Go (Golang) ile İlk Web Sunucusu: Kurulum ve JSON API Örneği

- Kaynak: https://teknopiksel.com/go-ile-ilk-web-sunucusu-h100872.html
- Yazar: Mehmet Ali Demirci
- Yayın: 2026-11-02
- Bölüm: Kodlama
- Yayıncı: Teknopiksel

> Go dilini kurup standart kütüphaneyle sıfır paket kullanarak bir web sunucusu ve JSON API yazmayı gösteren başlangıç rehberi.

**Kısa cevap:** go.dev/dl adresinden Go'yu kurun, go mod init ile modül oluşturun ve net/http paketiyle birkaç satırda sunucu yazın. Go'nun standart kütüphanesi web sunucusu, JSON ve test için yeterlidir; dışarıdan paket gerekmez.

Go, Google'ın geliştirdiği, sade ve hızlı bir dildir. Docker, Kubernetes ve pek çok bulut aracı Go ile yazıldı. Tek bir çalıştırılabilir dosya üretmesi, dağıtımı çok kolaylaştırır.

Dilin kasıtlı olarak az özelliği vardır; bu sayede birkaç günde okunabilir ve çalışan servisler yazabilirsiniz. Bu rehberde sıfırdan bir JSON API yazacağız.

## Adımlar

### 1. Go'yu kurun

go.dev/dl adresinden işletim sisteminize uygun kurulum dosyasını indirip çalıştırın. Sonra yeni bir terminalde:

```
go version
```

Çıktıda güncel sürüm numarasını görmelisiniz. Ayrı bir paket yöneticisi ya da sanal ortam gerekmez; araçlar dille birlikte gelir.

### 2. Modül oluşturun

```
mkdir sunucu
cd sunucu
go mod init ornek/sunucu
```

`go.mod` dosyası projenizin adını ve bağımlılıklarını tutar.

### 3. En küçük web sunucusu

`main.go` dosyasını oluşturun:

```
package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, "Merhaba, Go!")
	})
	http.ListenAndServe(":8080", nil)
}
```

```
go run .
```

Tarayıcıda `http://localhost:8080` adresini açın. Sunucunuz çalışıyor. Durdurmak için terminalde Ctrl+C basın.

### 4. Yol parametresi ve HTTP metodu

Güncel Go sürümlerinde yönlendirici metodu ve yol parametresini doğrudan tanır:

```
mux := http.NewServeMux()

mux.HandleFunc("GET /selam/{ad}", func(w http.ResponseWriter, r *http.Request) {
	ad := r.PathValue("ad")
	fmt.Fprintf(w, "Selam %s\n", ad)
})

http.ListenAndServe(":8080", mux)
```

`/selam/Ayse` adresi "Selam Ayse" döner. Eskiden bunun için üçüncü parti yönlendirici gerekirdi.

### 5. JSON API yazın

```
type Gorev struct {
	ID    int    `json:"id"`
	Baslik string `json:"baslik"`
	Bitti bool   `json:"bitti"`
}

func main() {
	gorevler := []Gorev{{1, "Go öğren", false}, {2, "API yaz", true}}

	http.HandleFunc("GET /gorevler", func(w http.ResponseWriter, r *http.Request) {
		w.Header().Set("Content-Type", "application/json")
		json.NewEncoder(w).Encode(gorevler)
	})

	http.ListenAndServe(":8080", nil)
}
```

Dosyanın başındaki import listesine `"encoding/json"` ekleyin. Sonra `curl localhost:8080/gorevler` komutu JSON listesini döner. Yapı alanlarının yanındaki ``json:"..."`` etiketleri JSON anahtar adlarını belirler.

### 6. Tek dosyaya derleyin

```
go build -o sunucu .
./sunucu
```

Ortaya çıkan dosya çalışmak için Go kurulumuna ihtiyaç duymaz. Başka bir Linux sunucuya kopyalayıp çalıştırabilirsiniz. Başka bir platform için derlemek için `GOOS=linux GOARCH=amd64 go build` yeterlidir.

### 7. Sonraki adımlar

- **A Tour of Go** (go.dev/tour): tarayıcıda interaktif ve ücretsiz tur.
- Goroutine ve kanallar: Go'nun eşzamanlılık modelini küçük örneklerle öğrenin.
- Veritabanı: `database/sql` ile SQLite ya da PostgreSQL bağlayın.

## Sık sorulan sorular

### Go mu Python mu?

Betik, veri ve yapay zekâ için Python; hızlı, tek dosya çalışan servis ve araçlar için Go.

### Go'ya framework gerekir mi?

Gerekmez. Standart kütüphane küçük ve orta ölçekli API'ler için yeterlidir; Gin ya da Echo gibi çatılar isteğe bağlıdır.

### Go iş bulmak için değerli mi?

Altyapı, bulut ve backend pozisyonlarında talep görür. Yeni başlıyorsanız önce temel programlama mantığını öğrenin, sonra Go'ya geçin.

### Go ile Rust arasında nasıl seçilir?

Hızlı geliştirme ve basitlik için Go, azami performans ve bellek kontrolü için Rust.
