Go Packages
Bu yazı go dilinin paket sistemi hakkında bilgi verir. Paket sistemi, kütüphanelerin, isim alanlarının ve modüllerin bazı özelliklerini tek bir yapıda birleştirir. Şimdi bu bölümü daha ayrıntılı olarak inceleyelim:
- Paket Bildirimi (Package Clause):
Her Go kaynak dosyası, “encoding/json/json.go” gibi, bir paket beyanı ile başlar. Paket beyanı şu şekildedir:
package jsonBurada “json”, “paket adı” olarak adlandırılan basit bir tanımlayıcıdır. Paket adları genellikle kısa ve öz olur.
2. Paket Kullanımı (Package Usage)
Bir paketi kullanmak için, içe aktaran kaynak dosyası import bildirimi içinde paket yolunu belirtir. “Yol” teriminin anlamı dil tarafından belirtilmemiş olsa da, pratikte ve gelenek olarak, bu, depodaki kaynak paketinin bölünmüş dizin yoludur. Örneğin:
import "encoding/json"Sonra paket adı (yolun ayrı olduğu), içe aktarılan kaynak dosyada paketten öğeleri belirtmek için kullanılır:
var dec = json.NewDecoder(reader)gBu tasarım netlik sağlar. Bir ismin pakete özgü olup olmadığını her zaman söz diziminden anlayabiliriz: İsim vs. pkg.Isim.
3. Paket Yolu, Paket Adı (Package Path and Package Name)
Get Volkan Kocaali’s stories in your inbox
Join Medium for free to get updates from this writer.
Paket yollarının benzersiz olması gerekir, ancak paket adları için böyle bir gereklilik yoktur. Yol, içe aktarılan paketi benzersiz şekilde tanımlamalıdır, ancak ad, paketin içeriğine başvuran paket istemcileri için bir gelenek olarak kullanılır. Paket adı benzersiz olmak zorunda değildir ve içe aktarılan her bir kaynak dosyasında import bildirimi içinde yerel bir tanımlayıcı sağlanarak geçersiz kılınabilir. Örneğin:
import "log" // Standart paket
import googlelog "google/base/go/log" // Google'a özgü paketHer şirket kendi log paketine sahip olabilir ancak paket adını benzersiz yapmak gerekli değildir. Aksine, Go tarzı, paket adlarını kısa ve anlaşılır tutmayı ve çakışma endişesinden ziyade açık bir şekilde ifade etmeyi önerir.
4. Paket Yönetimi (Package Management)
Go modül sistemi, dış bağımlılıkları yönetmek için kullanılır. Bir proje için gerekli olan dış paketler go.mod dosyasında belirtilir ve go get komutuyla indirilir.
Örnek
Basit bir HTTP sunucusu oluşturacak ve bu sunucunun gorilla/mux paketini kullanarak birkaç farklı endpoint'i yönetmesini sağlayacaktır.
Öncelikle, mux paketini projemize dahil edelim. Terminalde aşağıdaki komutu çalıştırarak projemize gorilla/mux paketini ekleyebiliriz:
go get -u github.com/gorilla/muxArdından, bir HTTP sunucusu oluşturacak ve farklı endpoint’leri yönetecek olan main.go dosyasını oluşturalım:
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func HomeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Home Page")
}
func HelloHandler(w http.ResponseWriter, r *http.Request) {
vars := mux.Vars(r)
name := vars["name"]
fmt.Fprintf(w, "Hello, %s!", name)
}
func main() {
router := mux.NewRouter()
// Home Page için handler
router.HandleFunc("/", HomeHandler)
// /hello/{name} endpoint'i için handler
router.HandleFunc("/hello/{name}", HelloHandler)
// Sunucuyu başlat
fmt.Println("Server start ...")
http.ListenAndServe(":8080", router)
}Bu örnekte, gorilla/mux paketini kullanarak bir HTTP sunucusu oluşturuyoruz. Ana sayfa için / ve "/hello/{name}" endpoint'leri için iki farklı handler tanımlıyoruz. gorilla/mux paketinin sağladığı Vars() fonksiyonunu kullanarak name parametresini yakalıyoruz ve bu parametreyle birlikte gelen isme göre bir yanıt döndürüyoruz.
Bu kodu main.go adıyla bir dosyaya kaydedin ve ardından terminalde aşağıdaki komutu çalıştırarak sunucuyu başlatabilirsiniz:
go run main.goBu örnek, Go’da paket kullanımını ve HTTP sunucu oluşturmayı göstermektedir.
Reference:









