Мисоли бастаро истифода бурд net/http, он воситаи асосии Go барои таҳияи ҳам серверҳо ва ҳам мизоҷони HTTP мебошад. Барои фаҳмидани рамз, биёед маънои се унсури муҳимро дарк кунем: http.Handler, http.ServeMux ва http.Server.
/ HelloResponse is the JSON representation for a customized message
type HelloResponse struct {
Message string `json:"message"`
}
// HelloName returns a personalized JSON message
func HelloName(w http.ResponseWriter, r *http.Request) {
name := chi.URLParam(r, "name")
response := HelloResponse{
Message: fmt.Sprintf("Hello %s!", name),
}
jsonResponse(w, response, http.StatusOK)
}
// NewRouter returns an HTTP handler that implements the routes for the API
func NewRouter() http.Handler {
r := chi.NewRouter()
r.Get("/{name}", HelloName)
return r
}
// NewRouter returns a new HTTP handler that implements the main server routes
func NewRouter() http.Handler {
router := chi.NewRouter()
router.Mount("/api/v1/", v1.NewRouter())
return router
}
http.Serve(autocert.NewListener("example.com"), NewRouter())
Осонии кор бо хатсайрҳои мураккаби Go имкон медиҳад, ки сохторсозӣ ва нигоҳдории барномаҳои калон ва мураккаб содда карда шавад.
Кор бо миёнаравӣ
Саҳнабандӣ печонидани як коркардкунандаи HTTP бо дигареро дар бар мегирад, ки имкон медиҳад, ки аутентификатсия, фишурдасозӣ, сабткунӣ ва якчанд вазифаҳои дигарро зуд иҷро кунед.
Go инчунин дорои хусусиятест, ки бо номи хомӯшии зебои сервери HTTP номида мешавад. Инро метавон бо усули Shutdown() анҷом дод. Сервер дар goroutine оғоз карда мешавад ва сипас канал гӯш карда мешавад, то сигнали қатъро қабул кунад. Ҳамин ки сигнал қабул шуд, сервер хомӯш мешавад, аммо на дарҳол, балки пас аз чанд сония.
handler := server.NewRouter()
srv := &http.Server{
Handler: handler,
}
go func() {
srv.Serve(autocert.NewListener(domains...))
}()
// Wait for an interrupt
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
<-c
// Attempt a graceful shutdown
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
srv.Shutdown(ctx)
Хулоса
Go забони пуриқтидор бо китобхонаи стандартии қариб универсалӣ мебошад. Имкониятҳои пешфарзии он хеле васеъ мебошанд ва онҳоро бо истифода аз интерфейсҳо такмил додан мумкин аст - ин ба шумо имкон медиҳад серверҳои воқеан боэътимоди HTTP таҳия кунед.