मूल HTTP Server
In this page:
http.HandleFunc("/path", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "text")
})
http.ListenAndServe(":port", nil)
Writing a Handler Function
एक HTTP handler func(w http.ResponseWriter, r *http.Request) से मेल खाता एक function है, जहां w को लिखना request करने वाले को response body के रूप में bytes वापस भेजता है।
उदाहरण: Writing a Handler Function
package main
import (
"fmt"
"net/http"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello from a Go HTTP handler!")
}
func main() {
http.HandleFunc("/hello", helloHandler)
fmt.Println("handler registered for /hello")
}
Login to try C/C++/Java/PHP code in the editor
Testing a Handler Without a Real Server
चूंकि इस sandbox में एक असली listener शुरू करना हमेशा के लिए block हो जाएगा, handlers को httptest.NewRecorder और httptest.NewRequest का उपयोग करके सीधे चलाया जा सकता है, जो बिना कोई असली network socket खोले एक HTTP request/response simulate करते हैं।
उदाहरण: Testing a Handler Without a Real Server
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func helloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, HTTP!")
}
func main() {
req := httptest.NewRequest(http.MethodGet, "/hello", nil)
rec := httptest.NewRecorder()
helloHandler(rec, req)
fmt.Println("status:", rec.Code)
fmt.Println("body:", rec.Body.String())
}
Login to try C/C++/Java/PHP code in the editor
Setting a Status Code
w.WriteHeader(code) कोई body लिखे जाने से पहले response के लिए explicitly HTTP status code सेट करता है -- इसे छोड़ने पर पहली write होते ही default 200 OK हो जाता है।
उदाहरण: Setting a Status Code
package main
import (
"fmt"
"net/http"
"net/http/httptest"
)
func notFoundHandler(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusNotFound)
fmt.Fprintln(w, "resource not found")
}
func main() {
req := httptest.NewRequest(http.MethodGet, "/missing", nil)
rec := httptest.NewRecorder()
notFoundHandler(rec, req)
fmt.Println("status:", rec.Code, "body:", rec.Body.String())
}
Login to try C/C++/Java/PHP code in the editor
- किसी interactive/CI sandbox में http.ListenAndServe call करना, जो असली network connections का इंतज़ार करते हुए हमेशा के लिए block हो जाता है -- यहां runnable examples को असल में एक listener शुरू करने के बजाय handlers को सीधे call करना चाहिए।
- http.HandleFunc से एक ही route pattern को दो बार register करना, जो startup पर panic करता है।
- non-200 response चाहिए होने पर body लिखने से पहले एक HTTP status code लिखना भूल जाना -- WriteHeader को Write से पहले call होना चाहिए।
- http.HandleFunc एक URL pattern से मेल खाते requests handle करने के लिए एक function register करता है।
- एक handler function एक http.ResponseWriter (response लिखने के लिए) और एक *http.Request (incoming request describe करते हुए) प्राप्त करता है।
- http.ListenAndServe server शुरू करता है, किसी दिए address पर connections के लिए block और listen करते हुए।
- http.NewRequest plus सीधे किसी handler को call करना बिना असली network listener के handler logic demonstrate करने का एक सरल तरीका है।
Chapter Quiz — Complete all 10 topics to unlock
0/10 topics done
Complete these topics first: