Go (Golang) Kullanımı
Genel Bakış
Go (genellikle Golang olarak anılır), Google tarafından tasarlanıp açık kaynak olarak sunulan, statik tipli ve derlemeli bir programlama dilidir. Basit sözdizimi, son derece hızlı derleme hızı, üstün eşzamanlılık yeteneği (hafif goroutine
yapısı ve iletişim için channel
mekanizması) ve dahili çöp toplama sistemiyle geliştiricilerin favorisi olmuştur. Go, yüksek performanslı ağ servisleri, dağıtık sistemler, mikroservisler ve komut satırı araçları oluşturmakta oldukça iyidir ve günümüz bulut tabanlı uygulamalar ile backend geliştirmede ana tercihlerden biri hâline gelmiştir.
ServBay’in Go Desteği
ServBay, macOS ve Windows için entegre bir yerel web geliştirme ortamı olarak Go geliştiricilere sorunsuz ve güçlü bir destek sağlar. ServBay sayesinde Go’nun farklı sürümlerini kolayca kurabilir, yönetebilir ve aralarında hızlıca geçiş yapabilirsiniz. Geliştirme ortamı için karmaşık değişkenler (GOROOT
, GOPATH
gibi) manuel ayarlamaya ihtiyaç duymadan Go ortamını hızlıca kurup sürdürmenizi sağlar.
ServBay, eksiksiz Go araç zincirini dahili olarak sunar ve şu sürümleri, geçmişten en yeni kararlı sürüme kadar kapsar; böylece farklı projelerinize özel gereksinimleri kolayca karşılayabilirsiniz:
- Go 1.11
- Go 1.12
- Go 1.13
- Go 1.14
- Go 1.15
- Go 1.16
- Go 1.17
- Go 1.18
- Go 1.19
- Go 1.20
- Go 1.21
- Go 1.22
- Go 1.23
- Go 1.24 (ve ServBay’in sonraki güncellemelerinde eklenecek yeniler)
Go Modules Desteği
ServBay ortamında varsayılan olarak Go Modules ile bağımlılık yönetimi aktif ve önerilmektedir. Bu çözüm, Go’nun 1.11 sürümünden beri resmi standarttır. ServBay’in terminal ortamında go mod
komutlarını (go mod init
, go get
, go mod tidy
gibi) doğrudan kullanabilir, eski $GOPATH
ayarlarını düşünmenize gerek kalmaz.
Ön Koşullar
- macOS üzerinde ServBay’i başarıyla kurup çalıştırmanız gereklidir.
- Temel Go programlama bilgisine sahip olmalısınız.
- Terminalde temel komut satırı kullanımına aşina olmalısınız.
Go Kurulumu
ServBay’in kullanıcı dostu grafik arayüzü (GUI) ile Go kurmak oldukça kolaydır:
- ServBay uygulamasını başlatın.
- Sol menüde
Paketler
bölümüne tıklayın. - Açılan listeden
Go
kategorisini bulun. Go
başlığına tıklayın, ServBay’de mevcut tüm Go sürümlerini göreceksiniz.- İstediğiniz Go sürümünü seçin (genellikle son kararlı sürüm olan Go 1.24 önerilir). İlgili sürümün yanında bulunan
Kur
düğmesine tıklayın. - ServBay otomatik olarak seçtiğiniz Go sürümünü indirip kuracaktır. Kurulum süresi internet hızınıza bağlıdır.
Kurulum tamamlanınca, ilgili sürümün durumu “Kurulu” olarak görünür. Dilerseniz farklı Go sürümlerini de kurup aralarında geçiş yapabilirsiniz.
Go Kullanımı
Go kurulduktan sonra, terminalde doğrudan go
komutlarını kullanabilirsiniz.
Go’nun doğru kurulup etkinleştirildiğini ve hangi sürümün aktif olduğunu doğrulamak için şunu çalıştırın:
bash
go version
1
Terminalde örneğin aşağıdakine benzer bir çıktı göreceksiniz, bu ServBay ile yönetilen Go sürümünüzü gösterir:
go version go1.24.1 darwin/arm64
1
Basit Bir Go Web Uygulaması Oluşturmak ve Çalıştırmak
Şimdi, ServBay ortamında temel bir Go HTTP sunucusu oluşturup çalıştıracağız.
Proje Dizini Oluşturun: Go projeniz için ServBay’in varsayılan web kök dizini olan
/Applications/ServBay/www
altında bir klasör oluşturmanızı öneririz. Örneğin,go-servbay-demo
adlı bir klasör oluşturalım.bashcd /Applications/ServBay/www mkdir go-servbay-demo cd go-servbay-demo
1
2
3Go Modules Başlatın: Proje kök dizininde (
go-servbay-demo
),go mod init
ile Go Modules başlatın. Modül yolu olarak genellikle proje veya kod deposuna özel bir tanımlayıcı kullanılır, örnekte klasör adını kullanıyoruz.bashgo mod init go-servbay-demo
1Bu komut, projeye ait bağımlılıkları takip etmek için bir
go.mod
dosyası oluşturacaktır.Go Kodunu Yazın:
main.go
adında bir kaynak dosyası oluşturun ve aşağıdaki kodu ekleyin:gopackage main import ( "fmt" "log" "net/http" "os" ) func handler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() fmt.Fprintf(w, "Hello from Go on ServBay!\nHostname: %s\nPath: %s\n", hostname, r.URL.Path) } func main() { http.HandleFunc("/", handler) port := "8080" // Sunucunun dinleyeceği portu tanımla log.Printf("Go web sunucusu %s portunda başlatılıyor...", port) log.Printf("Şuradan erişebilirsiniz: http://localhost:%s", port) // HTTP sunucusunu başlat err := http.ListenAndServe(":"+port, nil) if err != nil { log.Fatalf("Sunucu başlatılırken hata oluştu: %s\n", err) } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Bu kod, 8080 portunda dinleyen basit bir HTTP sunucusu tanımlar. Her istek için, “Hello from Go on ServBay!”, geçerli ana bilgisayar adı ve istek yolu cevap olarak döner.
Go Uygulamasını Çalıştırın: Hâlâ ServBay terminalinde proje dizinindeyseniz (
/Applications/ServBay/www/go-servbay-demo
), Go programınızı derleyip çalıştırmak için:bashgo run main.go
1Başarılıysa terminalde aşağıdaki gibi log göreceksiniz ve sunucu çalışmaya başlar:
2024/05/20 15:00:00 Go web sunucusu 8080 portunda başlatılıyor... 2024/05/20 15:00:00 Şuradan erişebilirsiniz: http://localhost:8080
1
2Uygulamayı Tarayıcıda Görüntüleyin: Web tarayıcınızdan
http://localhost:8080
adresine gidin. “Hello from Go on ServBay! Hostname: your-mac-hostname Path: /” benzeri bir yanıt göreceksiniz.
ServBay Sitesiyle Reverse Proxy Yapılandırması (Şiddetle Tavsiye Edilir)
Uygulamayı doğrudan localhost:8080
ile test edebilirsiniz; fakat yerel geliştirmede, hatırlaması kolay bir alan adı (örn. go-app.servbay.demo
) ve ServBay’in web sunucusunu (Caddy, Apache veya Nginx) reverse proxy olarak kullanmak önerilir. Böylece Go uygulamanıza gerçek bir sistemdeki gibi standart HTTP/HTTPS portlarından erişir, ServBay’in avantajlarını (otomatik HTTPS, hizmet entegrasyonu vs.) kullanırsınız.
- ServBay’de Site Oluşturun:
- ServBay GUI’de,
Siteler
bölümüne gidin. Site Ekle
butonuna tıklayın.- Alan adı: Örneğin
go-app.servbay.demo
. - Site türü: Reverse proxy seçin.
- IP adresi:
127.0.0.1
girin. - Port:
8080
girin.
- ServBay GUI’de,
Kaydedip Sunucu Konfigürasyonunu Yenileyin: ServBay GUI’de siteyi kaydedin ve ilgili web sunucusunu (Caddy ya da Nginx) yeniden yükleyin veya başlatın ki değişiklikler uygulansın.
Uygulamaya Alan Adı ile Erişin: Artık web tarayıcınızda
https://go-app.servbay.demo
adresinden Go web uygulamanıza erişebilirsiniz. ServBay web sunucusu, gelen istekleri otomatik şekilde Go uygulamanıza yönlendirecektir.
Go Sürümlerinin Yönetimi
ServBay ile farklı Go sürümlerini yönetmek ve geçiş yapmak son derece kolaydır.
- Sürüm değişimi: ServBay GUI’de
Paketler
->Go
menüsünde kurulu tüm Go sürümlerini göreceksiniz. Sol menüdekiAyarlar
kısmından istediğiniz Go sürümünü varsayılan olarak seçebilirsiniz. - Geçişi doğrulama: Değişimden sonra terminali yeniden açıp
go version
ile etkin sürümü kontrol edin.
Proje Bazında Go Sürümü Yönetimi İçin .servbay.config
Kullanımı
Sistem genelinde Go sürümünü değiştirmek dışında, ServBay ile proje tabanlı bir sürüm kontrolü de mümkündür; bunun için proje kökünde .servbay.config
dosyası oluşturabilirsiniz.
Nasıl Çalışır?
ServBay terminalinde, .servbay.config
dosyası olan bir klasöre cd
ile girdiğinizde, ServBay bu dosyayı otomatik algılar ve okur. Eğer dosyada GO_VERSION
tanımlıysa, ilgili terminal oturumunda Go komutları otomatik olarak seçilen sürümü kullanır.
Konfigürasyon Dosya Formatı:
.servbay.config
basit bir metin dosyasıdır, anahtar-değer çiftleri içerir. Proje için Go sürümünü belirtmek için aşağıdaki örnekteki gibi ayarlanabilir:
ini
# .servbay.config dosyası örneği
# Bu proje için Go 1.22 kullanılacak
GO_VERSION=1.22
# Aynı dosyada diğer geliştirme araçlarının sürümleri de seçilebilir
# PHP_VERSION=8.3
# NODE_VERSION=20
# PYTHON_VERSION=3.11
# ... diğer olası ayarlar ...
# GOPROXY=https://goproxy.cn,direct
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
Avantajları:
- Otomatik sürüm geçişi: Her defasında sistem genelini değiştirmeye gerek kalmaz, proje klasörüne girildiğinde ilgili Go sürümü otomatik seçilir.
- Proje izolasyonu: Her projenin beklediği Go ortamında derlenip çalıştırılmasını, sürüm çatışmalarını engeller.
- Ekip uyumu:
.servbay.config
dosyasını Git gibi bir sistemle paylaşırsanız, ekip arkadaşlarınız da projeyi klonladıklarında aynı Go ortamını anında kullanır.
Kullanım Senaryosu:
Varsayalım iki projeniz var:
project-a
Go 1.12 gerektiriyorproject-b
en yeni Go 1.22’yi kullanıyor
Her projenin kökünde bir .servbay.config
dosyası oluşturabilirsiniz:
/Applications/ServBay/www/project-a/.servbay.config
:iniGO_VERSION=1.12
1/Applications/ServBay/www/project-b/.servbay.config
:iniGO_VERSION=1.22
1
ServBay terminalinde cd /Applications/ServBay/www/project-a
der ve go version
komutunu çalıştırırsanız Go 1.12.x görürsünüz. cd /Applications/ServBay/www/project-b
ile ise Go 1.22.x etkin olur.
Not: .servbay.config
sadece ServBay ortamındaki temel Go sürümünü belirler. Proje bağımlılık yönetimi için yine Go Modules (go.mod
dosyası) kullanılması tavsiye edilir.
Sıkça Sorulan Sorular (SSS)
S: ServBay terminalinde
go
komutu “command not found” hatası veriyor, ne yapmalıyım?C: Öncelikle, terminalinizin ServBay’in PATH ortam değişkenini içerdiğini kontrol edin. Ardından GUI’de,
Paketler
->Go
bölümünden en az bir Go sürümünün kurulduğunu ve birinin varsayılan olarak seçildiğini doğrulayın.S: ServBay’de Go’yu en güncel sürüme nasıl yükseltirim?
C: ServBay’in
Paketler
->Go
bölümünü düzenli kontrol edin. Eğer yeni bir Go sürümü destekleniyorsa, listede çıkar ve rahatça kurabilirsiniz. Kurduktan sonra, GUI ile bu sürüme geçebilirsiniz.S: Go Modules ile çalışırken ağ sorunu yaşıyorum veya bağımlılıkları indirmek yavaş, ne yapmalıyım?
C: Go Modules varsayılan olarak
proxy.golang.org
üzerinden bağımlılık indirir. Çin anakarası veya erişimin kısıtlı olduğu bölgelerde bağlantı sorunları olabilir. GOPROXY ortam değişkenini ayarlayarakhttps://goproxy.cn
veyahttps://goproxy.io
gibi hızlı proxy’leri kullanın. ServBay ayarlarında veya.servbay.config
içinde (GOPROXY=https://goproxy.cn,direct
) bu değeri tanımlayabilirsiniz.S: Go web uygulamam başlatılırken “address already in use” (port meşgul) hatası alıyorum, ne yapmalıyım?
C: Bu hata, kodda seçtiğiniz portun (örneğin 8080) sistemde başka bir işlem tarafından kullanıldığını gösterir. İki yolunuz var: ya Go kodunuzda farklı, boş bir port kullanırsınız (örn. 8081, 9000), ya da o portu kullanan işlemi sonlandırırsınız. macOS’ta,
lsof -i :<port_numarası>
(örn.lsof -i :8080
) ile portu kullanan PID’yi bulupkill <PID>
ile sonlandırabilirsiniz.S:
.servbay.config
dosyasıyla Go sürümünü değiştirmek ve sistem genelinde sürüm değiştirmek arasında fark nedir? Hangisini kullanmalıyım?C: Sistem genelinde geçiş (GUI’den yapılır) tüm ortamda varsayılan Go sürümünü değiştirir.
.servbay.config
ise, sadece ilgili klasöre girince terminal oturumunda geçici olarak Go sürümünü değiştirir. Projelerinizde tercihen.servbay.config
kullanarak sürüm ihtiyacını yönetin - böylece izolasyon ve tekrarlanabilirlik elde edersiniz, özellikle farklı Go sürümleri isteyen birçok projeyle çalışırken. Sistem geneli ise sık kullandığınız ana Go sürümü için uygundur.
Özet
ServBay, macOS üzerinde Go (Golang) geliştiren mühendisler için son derece verimli ve kullanıcı dostu bir yerel geliştirme ortamı sunar. Kolay arayüzüyle birden çok Go sürümünü hızlıca kurup yönetebilir, .servbay.config
ile proje bazında sürüm kontrolü sağlayabilirsiniz. Go Modules ile bağımlılıkları yönetip ServBay’in dahili web sunucusu ile reverse proxy ve uygulama barındırma işlemlerini kolayca gerçekleştirebilir, Go uygulamalarınızı hızlıca kurup test edebilirsiniz. ServBay, karmaşık ortam yapılandırmalarını ortadan kaldırarak, Go koduna ve inovasyonunuza daha fazla odaklanmanızı sağlar.