Go dili içerisinde, build-in bir paket olan
net/http/ oldukça pratik bir şekilde web server işlemleri gerçekleştirmemizi mümkün kılmakta.
Get,
Head,
Post,
PostForm isteklerini HTTP ve HTTPS üzerinden gerçekleştirebilen http paketi ile ilgili olarak bu yazıda
ListenAndServe örneğinden bahsedeceğim. Temel kullanımı şu şekilde:
http.Handle("/foo", fooHandler)
http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
log.Fatal(http.ListenAndServe(":8080", nil)) |
http.Handle("/foo", fooHandler)http.HandleFunc("/bar", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})log.Fatal(http.ListenAndServe(":8080", nil))
Temel uygulamamızda ise 9000 nolu port üzerinden url path değerini sayfa içeriğine basacağız.O halde başlayalım.
Örnek işlemler süresince
localhost üzerinden işlemlerinizi yürütebilirsiniz. Ben
remote server üzerinden
örneklendirmeyi paylaşıyor olacağım.Aşağıdaki örnek en basit haliyle
ornekwebsitesi-veya-ip-adresi:9000 üzerinden yayın yapmamızı mümkün kılmakta. İlgili post adresinden sonraki slash (/) işareti ardındaki değeri sayfadaki
Current Value satırına ekleyeceğiz.
package main
import (
"fmt"
"net/http"
"html"
"log"
)
func urlHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Current Value: %s", html.EscapeString(r.URL.Path))
}
func main() {
http.HandleFunc("/", urlHandler)
log.Fatal(http.ListenAndServe(":9000", nil))
} |
package main
import (
"fmt"
"net/http"
"html"
"log"
)
func urlHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Current Value: %s", html.EscapeString(r.URL.Path))
}
func main() {
http.HandleFunc("/", urlHandler)
log.Fatal(http.ListenAndServe(":9000", nil))
}
Yukarıdaki kodu çalıştırdığınızda (go run *.go) 9000 port üzerinden yayınlanan içeriği görüntüleyebilirsiniz. İnternet tarayıcınızdan ilgili sayfayı açtığınızda karşınıza
Current Value: yazısı çıkacaktır. URL kısmında, port sonrasına ekleyeceğiniz herhangi bir değerle (/deneme vb.) birlikte sayfa güncelleyerek ve
Current Value: satırına eklenmiş olacaktır.Örnekte yer alan
html paketi URL’e eklenen değerin düzenlenmesinde,
log ise olası bir hatanın loglanmasında kullanılmaktadır. Daha basit bir yapı içerisinde örneğimizi şu şekilde de işleme alabiliriz.
package main
import (
"fmt"
"net/http"
)
func urlHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Current Value: %s", r.URL.Path)
}
func main() {
http.HandleFunc("/", urlHandler)
http.ListenAndServe(":9000", nil)
} |
package main
import (
"fmt"
"net/http"
)
func urlHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Current Value: %s", r.URL.Path)
}
func main() {
http.HandleFunc("/", urlHandler)
http.ListenAndServe(":9000", nil)
}
Her iki örnekte de yer alan
r.URL.Path url sonrasında eklenen değeri bize verecektir. İlgili değeri çekerken port sonrası değer alınacağı için veri / (slash) işaretini de kapsamaktadır. Şayet / (slash) işareti olmadan ilgili değeri kullanmak istersek
r.URL.Path[1:] ile 1. karakter sonrasını seçebiliriz.