Go, modern web uygulamaları ve sistem yazılımı oluşturmak için ilginç bir programlama dilidir. Piyasaya sürülmesinden sonra büyük ses getirdi ve Docker, Kubernetes, Terraform, Dropbox ve Netflix gibi hizmetleri güçlendirdi .
Ayrıca Go'nun güçlü yerleşik paket koleksiyonu, onu web programlama için mükemmel bir seçim haline getiriyor. Bu makale size Go'da temel bir web sunucusunun nasıl yazılacağını gösterecektir .
Gerekli paketleri içe aktarın
Net/HTTP paketi, bir web sunucusu ve istemcisi oluşturmak için gereken her şeyi sağlar. Bu paket, web programlamayı yönetmek için bazı yararlı işlevler sunar.
Aşağıdaki satırı kaynak kodunuzun başına ekleyerek içe aktarabilirsiniz:
import "net/http"
Makale ayrıca dizeleri biçimlendirmek için fmt paketini ve hataları işlemek için log paketini kullanacak. Bunları yukarıda gösterildiği gibi tek tek içe aktarabilirsiniz veya tek bir içe aktarma ifadesi kullanarak tüm paketleri içe aktarabilirsiniz:
import (
"fmt"
"log"
"net/http"
)
Gerekli paketleri içe aktardıktan sonra ana fonksiyonu yazmaya devam edebilirsiniz. Devam edin ve kaynak dosyayı .go uzantısıyla kaydedin . Vim kullanıyorsanız , Vim'i kaydedip çıkmak için aşağıdaki komutu kullanın:
:wq server.go
Ana işlevi yazın
Go programları doğrudan "ana" olarak adlandırılan ana işlevin içinde bulunur. Burada bir sunucu araması yapmanız gerekecek . Aşağıdaki satırları kaynak koduna ekleyin ve ne yaptıklarını görün:
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Örnek, func anahtar sözcüğünü kullanarak ana işlevi tanımlamaktır . Go'nun açılış parantezinin konumuyla ilgili katı kuralları vardır, bu nedenle başlangıç parantezinin doğru çizgide olduğundan emin olun. Main'deki ilk ifade, kök yola ( "/" ) gönderilen tüm web isteklerinin http.HandlerFunc türünde bir işlev olan indeks tarafından ele alınacağını tanımlar .
İkinci satır, http.ListenAndServe işlevi aracılığıyla web sunucusunu başlatır . Sunucuya, sunucunun 8080 numaralı bağlantı noktasından gelen HTTP isteklerini sürekli olarak dinlemesi sinyalini verir. Bu fonksiyonun ikinci parametresi programın sonuna kadar bloke edilmesi için gereklidir.
http.ListenAndServe her zaman bir hata döndürdüğünden , örnek bu çağrıyı bir log.Fatal çağrısının içine sarar . Bu ifade, sunucu tarafında oluşturulan tüm hata mesajlarını günlüğe kaydeder.
İşleme fonksiyonlarını uygulayın
Gördüğünüz gibi ana işlev, istemci isteklerini işlemek için işleyici işlev dizinini çağırır. Ancak örnek, sunucusu için bu işlevselliği henüz tanımlamamıştır.
İndeks fonksiyonunu kullanılabilir hale getirmek için gerekli ifadeleri ekleyelim:
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
Bu işlev http.ResponseWriter ve http.Request türünde iki farklı bağımsız değişken alır . http.ResponseWriter parametresi, sunucunun gelen isteğe verdiği yanıtı http.Request nesnesi biçiminde içerir .
Fmt paketindeki Fprintf işlevi, metin dizelerini görüntülemek ve değiştirmek için kullanılır. Makale bunu sunucunun web isteklerine yanıtını görüntülemek için kullanıyor. Son olarak r.URL.Path[1:] öğesi , kök yoldan sonraki verileri getirmek için kullanılır.
Kalan tüm parçaları ekleyin
Kalan tüm bileşenleri ekledikten sonra Go web sunucunuz hazır olacaktır. Kod şöyle görünecek:
import (
"fmt"
"log"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi there, welcome to %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", index)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Bu Go web sunucusu kodunu yürütülebilir bir dosya olarak derlemek için ilk satır gereklidir.

Bu Go web sunucusu kodunu yürütülebilir bir dosya olarak derleyin