เด—เต‹เดฒเดพเด™เตเด™เดฟเตฝ เดตเต†เดฌเต เดธเต†เตผเดตเดฑเตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต - เดฒเดณเดฟเดคเด‚ เดฎเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏเดคเต เดตเดฐเต†

เด—เต‹เดฒเดพเด™เตเด™เดฟเตฝ เดตเต†เดฌเต เดธเต†เตผเดตเดฑเตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต - เดฒเดณเดฟเดคเด‚ เดฎเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏเดคเต เดตเดฐเต†

เด…เดžเตเดšเต เดตเตผเดทเด‚ เดฎเตเดฎเตเดชเต เดžเดพเตป เดคเตเดŸเด™เตเด™เดฟ เด—เต‹เดซเดฟเดทเต เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเด•, เด…เดคเต เด—เต‹เดฒเดพเด™เต เดชเด เดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เดฟ. เด—เต‹ เด’เดฐเต เดถเด•เตเดคเดฎเดพเดฏ เดญเดพเดทเดฏเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดฟ, เด…เดคเต เดจเดฟเดฐเดตเดงเดฟ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเดพเตฝ เดชเต‚เดฐเด•เดฎเดพเดฃเต. Go เดŽเดจเตเดจเดคเต เดฌเดนเตเดฎเตเด–เดฎเดพเดฃเต: เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดธเต†เตผเดตเตผ เดธเตˆเดกเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เดˆ เดฒเต‡เด–เดจเด‚ Go-เดฏเดฟเตฝ เด’เดฐเต เดธเต†เตผเดตเตผ เดŽเดดเตเดคเตเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเดพเดฃเต. "เดนเดฒเต‹ เดตเต‡เตพเดกเต!" เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เดพเดฐเตเดฏเด™เตเด™เดณเดฟเตฝ เดจเดฎเตเด•เตเด•เต เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเด‚, เดˆ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเตเดณเตเดณ เด’เดฐเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเตฝ เด…เดตเดธเดพเดจเดฟเด•เตเด•เดพเด‚:

- HTTPS-เดจเดพเดฏเดฟ เดจเดฎเตเด•เตเด•เต เดŽเตปเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚.
- เด’เดฐเต API เดฑเต‚เดŸเตเดŸเดฑเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด•.
- เดฎเดฟเดกเดฟเตฝเดตเต†เดฏเดฑเตเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต.
- เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดซเดฏเดฒเตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
- เดถเดฐเดฟเดฏเดพเดฏ เดทเดŸเตเดŸเตเดกเต—เตบ.

เดธเตเด•เดฟเตฝเดฌเต‹เด•เตเดธเต เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต: เดชเตเดฐเดพเดฏเต‹เด—เดฟเด• เด•เต‹เดดเตเดธเต "เด†เดฆเตเดฏเด‚ เดฎเตเดคเตฝ เดชเตˆเดคเตเดคเตบ เดกเต†เดตเดฒเดชเตเดชเตผ".

เดžเด™เตเด™เตพ เด“เตผเดฎเตเดฎเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเต: "Habr"-เดจเตเดฑเต† เดŽเดฒเตเดฒเดพ เดตเดพเดฏเดจเด•เตเด•เดพเตผเด•เตเด•เตเด‚ - "Habr" เดชเตเดฐเตŠเดฎเต‹เดทเดฃเตฝ เด•เต‹เดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดธเตเด•เดฟเตฝเดฌเต‹เด•เตเดธเต เด•เต‹เดดเตเดธเดฟเตฝ เดšเต‡เดฐเตเดฎเตเดชเต‹เตพ 10 เดฑเต‚เดฌเดฟเตพเดธเต เด•เดฟเดดเดฟเดตเต.

เดนเดฒเต‡เดพ เดตเต‡เตพเดกเต!

Go-เดฏเดฟเตฝ เด’เดฐเต เดตเต†เดฌเต เดธเต†เตผเดตเตผ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเดจเตเดจเดคเต เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเดฃเต. เดฎเตเด•เดณเดฟเตฝ เดตเดพเด—เตเดฆเดพเดจเด‚ เดšเต†เดฏเตเดค "เดนเดฒเต‹, เดตเต‡เตพเดกเต!" เดคเดฟเดฐเดฟเด•เต† เดจเตฝเด•เตเดจเตเดจ เด’เดฐเต เดนเดพเตปเดกเตโ€Œเดฒเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฑเต† เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เด‡เดคเดพ.

package main
 
import (
"fmt"
"net/http"
)
 
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!")
})
http.ListenAndServe(":80", nil)
}

เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เดจเดฟเด™เตเด™เตพ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเดšเตเดšเต เดชเต‡เดœเต เดคเตเดฑเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ เดฒเต‡เดพเด•เตเด•เตฝเดนเต‡เดพเดธเตเดฑเตเดฑเดฟเตฝ, เด…เดชเตเดชเต‹เตพ เดจเดฟเด™เตเด™เตพ เด‰เดŸเดจเต† "เดนเดฒเต‹, เดตเต‡เตพเดกเต!" เดŽเดจเตเดจ เดตเดพเดšเด•เด‚ เด•เดพเดฃเตเด‚. (เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚, เดŽเดฒเตเดฒเดพเด‚ เดถเดฐเดฟเดฏเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ).

เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดคเดฟเตฝ เดžเด™เตเด™เตพ เดนเดพเตปเดกเตโ€Œเดฒเตผ เด†เดตเตผเดคเตเดคเดฟเดšเตเดšเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ เด†เดฆเตเดฏเด‚ เด‡เดคเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเตเดตเต†เดจเตเดจเต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเด‚.

เดจเต†เดฑเตเดฑเต/http

เด‰เดฆเดพเดนเดฐเดฃเด‚ เดชเดพเด•เตเด•เต‡เดœเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต net/http, เดธเต†เตผเดตเดฑเตเด•เดณเตเด‚ HTTP เด•เตเดฒเดฏเดจเตเดฑเตเด•เดณเตเด‚ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เด—เต‹เดฏเตเดŸเต† เดชเตเดฐเดพเดฅเดฎเดฟเด• เด‰เดชเด•เดฐเดฃเดฎเดพเดฃเต. เด•เต‹เดกเต เดฎเดจเดธเดฟเดฒเดพเด•เตเด•เดพเตป, เดฎเต‚เดจเตเดจเต เดชเตเดฐเดงเดพเดจ เด˜เดŸเด•เด™เตเด™เดณเตเดŸเต† เด…เตผเดคเตเดฅเด‚ เดจเดฎเตเด•เตเด•เต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเด•เดพเด‚: http.Handler, http.ServeMux, http.Server.

HTTP เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เตพ

เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดฒเดญเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดนเดพเตปเดกเตโ€Œเดฒเตผ เด…เดคเต เดชเดพเดดเตโ€Œเดธเต เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด’เดฐเต เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. Go-เดฏเดฟเดฒเต† เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดฐเต€เดคเดฟเดฏเดฟเตฝ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเต:

type Handler interface {
        ServeHTTP(ResponseWriter, *Request)
}

เด†เดฆเตเดฏ เด‰เดฆเดพเดนเดฐเดฃเด‚ http.HandleFunc เดธเดนเดพเดฏเดฟ เดซเด‚เด—เตเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต เดฎเดฑเตเดฑเตŠเดฐเต เดซเด‚เด—เตโ€Œเดทเตป เดชเตŠเดคเดฟเดฏเตเดจเตเดจเต, เด…เดคเต ServeHTTP-เตฝ http.ResponseWriter, http.Request เดŽเดจเตเดจเดฟเดต เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดฎเดฑเตเดฑเตŠเดฐเต เดตเดฟเดงเดคเตเดคเดฟเตฝ เดชเดฑเดžเตเดžเดพเตฝ, เด—เต‹เดฒเดพเด™เตเด™เดฟเดฒเต† เดนเดพเตปเดกเตโ€Œเดฒเตผเดฎเดพเดฐเต† เด’เดฐเตŠเดฑเตเดฑ เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดชเตเดฐเดคเดฟเดจเดฟเดงเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดชเตเดฐเต‹เด—เตเดฐเดพเดฎเตผเด•เตเด•เต เดงเดพเดฐเดพเดณเด‚ เด…เดตเดธเดฐเด™เตเด™เตพ เดจเตฝเด•เตเดจเตเดจเต. เด…เดคเดฟเดจเดพเตฝ, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เด’เดฐเต เดนเดพเตปเดกเตโ€Œเดฒเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเดพเดฃเต เดฎเดฟเดกเดฟเตฝเดตเต†เดฏเตผ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต, เด…เดตเดฟเดŸเต† ServeHTTP เด†เดฆเตเดฏเด‚ เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เดคเตเดŸเตผเดจเตเดจเต เดฎเดฑเตเดฑเตŠเดฐเต เดนเดพเตปเดกเตโ€Œเดฒเดฑเดฟเดจเตเดฑเต† ServeHTTP เดฐเต€เดคเดฟ เดตเดฟเดณเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดฎเตเด•เดณเดฟเตฝ เดธเต‚เดšเดฟเดชเตเดชเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดนเดพเตปเดกเตโ€Œเดฒเตผเดฎเดพเตผ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเต‹เดŸเตเดณเตเดณ เดชเตเดฐเดคเดฟเด•เดฐเดฃเด™เตเด™เตพ เดฐเต‚เดชเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดธเดฎเดฏเดคเตเดคเต เดเดคเต เดนเดพเตปเดกเตโ€Œเดฒเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚?

เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เต เด…เดญเตเดฏเตผเดคเตเดฅเดฟเด•เตเด•เตเด•

เดถเดฐเดฟเดฏเดพเดฏ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเดชเตเดชเต เดจเดŸเดคเตเดคเดพเตป, HTTP เดฎเตพเดŸเตเดŸเดฟเดชเตเดฒเด•เตโ€Œเดธเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด•. เดจเดฟเดฐเดตเดงเดฟ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เดณเดฟเตฝ เด‡เดคเดฟเดจเต† เดฎเด•เตโ€Œเดธเตผ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดฑเต‚เดŸเตเดŸเตผ เดŽเดจเตเดจเต เดตเดฟเดณเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ เด…เดตเดฏเต†เดฒเตเดฒเดพเด‚ เด’เดจเตเดจเตเดคเดจเตเดจเต†เดฏเดพเดฃเต. เด…เดญเตเดฏเตผเดคเตเดฅเดจ เดชเดพเดค เดตเดฟเดถเด•เดฒเดจเด‚ เดšเต†เดฏเตเดฏเตเด•เดฏเตเด‚ เด‰เดšเดฟเดคเดฎเดพเดฏ เดนเดพเตปเดกเตโ€Œเดฒเตผ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดฎเตพเดŸเตเดŸเดฟเดชเตเดฒเด•เตโ€Œเดธเดฑเดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚.

เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เดฟเดจเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดชเดฟเดจเตเดคเตเดฃ เด†เดตเดถเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดพเดฃเต เดจเดฒเตเดฒเดคเต. เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเต‹เด—เดฎเดฟเดšเตเดš เด’เดจเตเดจเต เด—เตŠเดฑเดฟเดฒเตเดฒ/เดฎเด•เตเดธเต ะธ go-chi/chi, เดˆ เดฒเตˆเดฌเตเดฐเดฑเดฟเด•เตพ เด’เดฐเต เดชเตเดฐเดถเตเดจเดตเตเดฎเดฟเดฒเตเดฒเดพเดคเต† เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต. เด…เดตเดฐเตเดŸเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต†, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดตเตˆเตฝเดกเตเด•เดพเตผเดกเต เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดฎเดฑเตเดฑเต เดจเดฟเดฐเดตเดงเดฟ เดœเต‹เดฒเดฟเด•เตพ เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚. เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต HTTP เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เดณเตเดฎเดพเดฏเตเดณเตเดณ เด…เดจเตเดฏเต‹เดœเตเดฏเดคเดฏเดพเดฃเต เด…เดตเดฐเตเดŸเต† เดจเต‡เดŸเตเดŸเด‚. เดคเดคเตเดซเดฒเดฎเดพเดฏเดฟ, เดญเดพเดตเดฟเดฏเดฟเตฝ เดชเดฐเดฟเดทเตเด•เตเด•เดฐเดฟเด•เตเด•เดพเดตเตเดจเตเดจ เดฒเดณเดฟเดคเดฎเดพเดฏ เด•เต‹เดกเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดดเตเดคเดพเด‚.

เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดšเดŸเตเดŸเด•เตเด•เต‚เดŸเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดคเดฟเด•เดšเตเดšเตเด‚ เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดธเตŠเดฒเตเดฏเต‚เดทเดจเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เด‡เดคเต เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดนเดพเตปเดกเตโ€Œเดฒเดฑเตเด•เดณเตเดŸเต† เด‰เดชเดฏเต‹เด—เดคเตเดคเต† เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดญเต‚เดฐเดฟเดญเดพเด—เด‚ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เดณเตเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดŸเต†เดฏเตเด‚ เดฒเดณเดฟเดคเดฎเดพเดฏ เดฑเต‚เดŸเตเดŸเดฑเดฟเดจเตเดฑเต†เดฏเตเด‚ เดธเด‚เดฏเต‹เดœเดจเด‚ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

เด…เดจเตเดตเต‡เดทเดฃ เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต

เด•เต‚เดŸเดพเดคเต†, เด‡เตปเด•เดฎเดฟเด‚เด—เต เด•เดฃเด•เตเดทเดจเตเด•เตพเด•เตเด•เดพเดฏเดฟ "เด•เต‡เตพเด•เตเด•เตเดจเตเดจเดคเตเด‚" เดŽเดฒเตเดฒเดพ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เดณเตเด‚ เดถเดฐเดฟเดฏเดพเดฏ เดนเดพเตปเดกเตเดฒเดฑเดฟเดฒเต‡เด•เตเด•เต เดฑเต€เดกเดฏเดฑเด•เตเดŸเต เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดฎเดพเดฏ เด’เดฐเต เด˜เดŸเด•เด‚ เดžเด™เตเด™เตพเด•เตเด•เต เด†เดตเดถเตเดฏเดฎเดพเดฃเต. http.Server เดจเต เดˆ เดŸเดพเดธเตเด•เตเด•เดฟเดจเต† เดŽเดณเตเดชเตเดชเดคเตเดคเดฟเตฝ เดจเต‡เดฐเดฟเดŸเดพเตป เด•เดดเดฟเดฏเตเด‚.

เด•เดฃเด•เตเดทเดจเตเด•เตพ เด•เตˆเด•เดพเดฐเตเดฏเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดŽเดฒเตเดฒเดพ เดœเต‹เดฒเดฟเด•เตพเด•เตเด•เตเด‚ เดธเต†เตผเดตเดฑเดพเดฃเต เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดฏเต†เดจเตเดจเต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต เด•เดพเดฃเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดคเต, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, TLS เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. http.ListenAndServer เด•เต‹เตพ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เดพเตป เด’เดฐเต เดธเดพเดงเดพเดฐเดฃ HTTP เดธเต†เตผเดตเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เด‡เดชเตเดชเต‹เตพ เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดจเต‹เด•เตเด•เดพเด‚.

เดจเดฎเตเด•เตเด•เต เดŽเตปเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ เดŽเดจเตเดจเต เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต

เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ, เดžเด™เตเด™เดณเตเดŸเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป HTTP เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต, เดชเด•เตเดทเต‡ HTTPS เดชเตเดฐเต‹เดŸเตเดŸเต‹เด•เตเด•เต‹เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด—เต‹เดฏเดฟเตฝ, เด‡เดคเต เดชเตเดฐเดถเตเดจเด™เตเด™เดณเดฟเดฒเตเดฒเดพเดคเต† เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด‚ เด’เดฐเต เดธเตเดตเด•เดพเดฐเตเดฏ เด•เต€เดฏเตเด‚ เดฒเดญเดฟเดšเตเดšเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดถเดฐเดฟเดฏเดพเดฏ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด‚ เด•เต€ เดซเดฏเดฒเตเด•เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต ListenAndServeTLS เดŽเดดเตเดคเดฟเดฏเดพเตฝ เดฎเดคเดฟเดฏเดพเด•เตเด‚.

http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดฒเตเดฒเดพเดฏเตเดชเตเดชเต‹เดดเตเด‚ เดฎเดฟเด•เดšเตเดšเดคเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚.

เดจเดฎเตเด•เตเด•เต เดŽเตปเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ เดฏเดพเดจเตเดคเตเดฐเดฟเด•เดฎเดพเดฏเดฟ เดชเตเดคเตเด•เตเด•เดพเดจเตเดณเตเดณ เดธเดพเดงเตเดฏเดคเดฏเตเดณเตเดณ เดธเต—เดœเดจเตเดฏ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดจเตฝเด•เตเดจเตเดจเต. เดธเต‡เดตเดจเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดชเดพเด•เตเด•เต‡เดœเต เด†เดตเดถเตเดฏเดฎเดพเดฃเต autocert.

http.Serve-เดจเตŠเดชเตเดชเด‚ autocert.NewListener เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เด‡เดคเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดŽเดณเตเดชเตเดชเดตเดดเดฟ. HTTP เดธเต†เตผเดตเตผ เด…เดญเตเดฏเตผเดคเตเดฅเดจเด•เตพ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเตเดฎเตเดชเต‹เตพ TLS เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดชเตเดคเตเด•เตเด•เดพเดจเตเด‚ เดˆ เดฐเต€เดคเดฟ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต:

http.Serve(autocert.NewListener("example.com"), nil)

เดจเดฎเตเดฎเตพ เดฌเตเดฐเต—เดธเดฑเดฟเตฝ เดคเตเดฑเดจเตเดจเดพเตฝ example.com, เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต HTTPS เดชเตเดฐเดคเดฟเด•เดฐเดฃเด‚ เดฒเดญเดฟเด•เตเด•เตเด‚ "เดนเดฒเต‹, เดตเต‡เตพเดกเต!".

เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดฎเดพเดฏ เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เด†เดตเดถเตเดฏเดฎเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพ autocert.Manager เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚. เดคเตเดŸเตผเดจเตเดจเต เดžเด™เตเด™เตพ เดžเด™เตเด™เดณเตเดŸเต† เดธเตเดตเดจเตเดคเด‚ http.Server เด‰เดฆเดพเดนเดฐเดฃเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต (เด‡เดคเตเดตเดฐเต† เดžเด™เตเด™เตพ เด‡เดคเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต) เด•เต‚เดŸเดพเดคเต† เดฎเดพเดจเต‡เดœเดฐเต† TLSConfig เดธเต†เตผเดตเดฑเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เตเด•:

m := &autocert.Manager{
Cache:      autocert.DirCache("golang-autocert"),
Prompt:     autocert.AcceptTOS,
HostPolicy: autocert.HostWhitelist("example.org", "www.example.org"),
}
server := &http.Server{
    Addr:      ":443",
    TLSConfig: m.TLSConfig(),
}
server.ListenAndServeTLS("", "")

เดธเตเดตเดฏเดฎเต‡เดตเดฏเตเดณเตเดณ เดธเตผเดŸเตเดŸเดฟเดซเดฟเด•เตเด•เดฑเตเดฑเต เดชเตเดคเตเด•เตเด•เดฒเดฟเดจเตŠเดชเตเดชเด‚ เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ HTTPS เดชเดฟเดจเตเดคเตเดฃ เดจเดŸเดชเตเดชเดฟเดฒเดพเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดŽเดณเตเดชเตเดชเดตเดดเดฟเดฏเดพเดฃเดฟเดคเต.

เด‡เดทเตโ€ŒเดŸเดพเดจเตเดธเตƒเดค เดฑเต‚เดŸเตเดŸเตเด•เตพ เดšเต‡เตผเด•เตเด•เตเดจเตเดจเต

เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดณเตเดณ เดกเดฟเดซเต‹เตพเดŸเตเดŸเต เดฑเต‚เดŸเตเดŸเตผ เดจเดฒเตเดฒเดคเดพเดฃเต, เดŽเดจเตเดจเดพเตฝ เดตเดณเดฐเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดชเดฐเดฎเดพเดฃเต. เดฎเดฟเด•เตเด• เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพเด•เตเด•เตเด‚ เดจเต†เดธเตเดฑเตเดฑเดกเต, เดตเตˆเตฝเดกเตเด•เดพเตผเดกเต เดฑเต‚เดŸเตเดŸเตเด•เตพ เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดชเดพเดคเตเดคเต เดชเดพเดฑเตเดฑเต‡เดฃเตเด•เดณเตเด‚ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเตเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดณเตเดณ เดจเดŸเดชเดŸเดฟเด•เตเดฐเดฎเด‚ เด‰เตพเดชเตเดชเต†เดŸเต† เด•เต‚เดŸเตเดคเตฝ เดธเด™เตเด•เต€เตผเดฃเตเดฃเดฎเดพเดฏ เดฑเต‚เดŸเตเดŸเดฟเด‚เด—เต เด†เดตเดถเตเดฏเดฎเดพเดฃเต.

เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดจเดฟเด™เตเด™เตพ เดชเดพเด•เตเด•เต‡เดœเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚ เด—เตŠเดฑเดฟเดฒเตเดฒ/เดฎเด•เตเดธเต ะธ go-chi/chi. เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดŽเด™เตเด™เดจเต† เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดžเด™เตเด™เตพ เดชเด เดฟเด•เตเด•เตเด‚ - เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเด‚ เดšเตเดตเดŸเต† เด•เดพเดฃเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

เดžเด™เตเด™เดณเตเดŸเต† API-เดฏเตเดŸเต† เดฑเต‚เดŸเตเดŸเตเด•เตพ เด…เดŸเด™เตเด™เตเดจเตเดจ api/v1/api.go เดซเดฏเตฝ เดจเตฝเด•เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต:

/ 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
}

เดชเตเดฐเดงเดพเดจ เดซเดฏเดฒเดฟเดฒเต† เดฑเต‚เดŸเตเดŸเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดžเด™เตเด™เตพ api/vq เดชเตเดฐเดฟเดซเดฟเด•เตเดธเต เดธเดœเตเดœเดฎเดพเด•เตเด•เดฟ.

เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดงเดพเดจ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเดฟเดฒเต† api/v1/ เดชเตเดฐเดฟเดซเดฟเด•เตโ€Œเดธเดฟเดจเต เด•เต€เดดเดฟเดฒเตเดณเตเดณ เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดฐเดงเดพเดจ เดฑเต‚เดŸเตเดŸเดฑเดฟเดฒเต‡เด•เตเด•เต เด‡เดคเต เดฎเต—เดฃเตเดŸเต เดšเต†เดฏเตเดฏเดพเด‚:

// 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 เดนเดพเตปเดกเตโ€Œเดฒเตผ เดฎเดฑเตเดฑเตŠเดจเตเดจเตเดฎเดพเดฏเดฟ เดชเตŠเดคเดฟเดฏเตเดจเตเดจเดคเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดชเตเดฐเดพเดฎเดพเดฃเต€เด•เดฐเดฃเด‚, เด•เด‚เดชเตเดฐเดทเตป, เดฒเต‹เด—เดฟเด‚เด—เต, เดฎเดฑเตเดฑเต เดšเดฟเดฒ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดŽเดจเตเดจเดฟเดต เดตเต‡เด—เดคเตเดคเดฟเตฝ เดจเดฟเตผเดตเดนเดฟเด•เตเด•เตเดจเตเดจเดคเต เดธเดพเดงเตเดฏเดฎเดพเด•เตเด•เตเดจเตเดจเต.

เด’เดฐเต เด‰เดฆเดพเดนเดฐเดฃเดฎเดพเดฏเดฟ, เดจเดฎเตเด•เตเด•เต http.Handler เด‡เดจเตเดฑเตผเดซเต‡เดธเต เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เดพเด‚, เด…เดคเดฟเดจเตเดฑเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดžเด™เตเด™เตพ เดธเต‡เดตเดจ เด‰เดชเดฏเต‹เด•เตเดคเดพเด•เตเด•เดณเตเดŸเต† เด†เดงเดฟเด•เดพเดฐเดฟเด•เดคเดฏเต‹เดŸเต† เด’เดฐเต เดนเดพเตปเดกเตโ€Œเดฒเตผ เดŽเดดเตเดคเตเด‚.

func RequireAuthentication(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if !isAuthenticated(r) {
            http.Redirect(w, r, "/login", http.StatusTemporaryRedirect)
            return
        }
        // Assuming authentication passed, run the original handler
        next.ServeHTTP(w, r)
    })
}

เด‡เดจเตเดฑเตผเดฎเต€เดกเดฟเดฏเดฑเตเดฑเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เดฟเดจเตเดฑเต† เดชเตเดฐเดตเตผเดคเตเดคเดจเด‚ เดตเดฟเดชเตเดฒเต€เด•เดฐเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจ เดšเดฟ เดชเต‹เดฒเตเดณเตเดณ เดฎเต‚เดจเตเดจเดพเด‚ เด•เด•เตเดทเดฟ เดฑเต‚เดŸเตเดŸเดฑเตเด•เตพ เด‰เดฃเตเดŸเต.

เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เดซเดฏเดฒเตเด•เดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต

Go-เดฏเตเดŸเต† เดธเตเดฑเตเดฑเดพเตปเดกเต‡เตผเดกเต เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเดฟเตฝ เดšเดฟเดคเตเดฐเด™เตเด™เดณเตเด‚ เดœเดพเดตเดพเดธเตเด•เตเดฐเดฟเดชเตเดฑเตเดฑเต, CSS เดซเดฏเดฒเตเด•เดณเตเด‚ เด‰เตพเดชเตเดชเต†เดŸเต†เดฏเตเดณเตเดณ เดธเตเดฑเตเดฑเดพเดฑเตเดฑเดฟเด•เต เด‰เดณเตเดณเดŸเด•เตเด•เดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดธเต—เด•เดฐเตเดฏเด™เตเด™เตพ เด‰เตพเดชเตเดชเต†เดŸเตเดจเตเดจเต. http.FileServer เดซเด‚เด—เตโ€Œเดทเตป เดตเดดเดฟ เด…เดต เด†เด•เตโ€Œเดธเดธเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚. เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตโ€ŒเดŸ เดกเดฏเดฑเด•เตโ€ŒเดŸเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดซเดฏเดฒเตเด•เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจ เด’เดฐเต เดนเดพเตปเดกเตโ€Œเดฒเตผ เด‡เดคเต เดจเตฝเด•เตเดจเตเดจเต.

func NewRouter() http.Handler {
    router := chi.NewRouter()
    r.Get("/{name}", HelloName)
 
// ะะฐัั‚ั€ะพะนะบะฐ ั€ะฐะทะดะฐั‡ะธ ัั‚ะฐั‚ะธั‡ะตัะบะธั… ั„ะฐะนะปะพะฒ
staticPath, _ := filepath.Abs("../../static/")
fs := http.FileServer(http.Dir(staticPath))
    router.Handle("/*", fs)
    
    return r

เดชเตเดฐเดงเดพเดจ index.html เดซเดฏเตฝ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, http.Dir เดกเดฏเดฑเด•เตเดŸเดฑเดฟเดฏเตเดŸเต† เด‰เดณเตเดณเดŸเด•เตเด•เด™เตเด™เตพ เดชเตเดฐเดฆเตผเดถเดฟเดชเตเดชเดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต เด“เตผเดฎเตเดฎเดฟเด•เตเด•เตเด•. เดˆ เดธเดพเดนเดšเดฐเตเดฏเดคเตเดคเดฟเตฝ, เดกเดฏเดฑเด•เตเดŸเดฑเดฟ เดตเดฟเดŸเตเดŸเตเดตเต€เดดเตเดš เดšเต†เดฏเตเดฏเดชเตเดชเต†เดŸเดพเดคเดฟเดฐเดฟเด•เตเด•เดพเตป, เดจเดฟเด™เตเด™เตพ เดชเดพเด•เตเด•เต‡เดœเต เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดฃเด‚ unindexed.

เดถเดฐเดฟเดฏเดพเดฏ เดทเดŸเตเดŸเตเดกเต—เตบ

HTTP เดธเต†เตผเดตเดฑเดฟเดจเตเดฑเต† เดฎเดจเต‹เดนเดฐเดฎเดพเดฏ เดทเดŸเตเดŸเตเดกเต—เตบ เดชเต‹เดฒเต†เดฏเตเดณเตเดณ เด’เดฐเต เดธเดตเดฟเดถเต‡เดทเดคเดฏเตเด‚ Go-เดฏเดฟเดฒเตเดฃเตเดŸเต. เดทเดŸเตเดŸเตเดกเต—เตบ() เดฐเต€เดคเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด‡เดคเต เดšเต†เดฏเตเดฏเดพเด‚. เดธเต†เตผเดตเตผ เด’เดฐเต เด—เต‹เดฑเต‚เดŸเตเดŸเต€เดจเดฟเตฝ เด†เดฐเด‚เดญเดฟเดšเตเดšเต, เดคเตเดŸเตผเดจเตเดจเต เด’เดฐเต เดคเดŸเดธเตเดธ เดธเดฟเด—เตเดจเตฝ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดšเดพเดจเตฝ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเดจเตเดจเต. เดธเดฟเด—เตเดจเตฝ เดฒเดญเดฟเดšเตเดšเดฏเตเดŸเตป, เดธเต†เตผเดตเตผ เด“เดซเดพเด•เตเด‚, เดชเด•เตเดทเต‡ เด‰เดŸเดจเดŸเดฟ เด…เดฒเตเดฒ, เด•เตเดฑเดšเตเดšเต เดจเดฟเดฎเดฟเดทเด™เตเด™เตพเด•เตเด•เต เดถเต‡เดทเด‚.

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)

เด’เดฐเต เดจเดฟเด—เดฎเดจเดคเตเดคเดฟเตฝ

เดเดคเดพเดฃเตเดŸเต เดธเดพเตผเดตเดคเตเดฐเดฟเด• เดจเดฟเดฒเดตเดพเดฐเดฎเตเดณเตเดณ เดฒเตˆเดฌเตเดฐเดฑเดฟเดฏเตเดณเตเดณ เดถเด•เตเดคเดฎเดพเดฏ เดญเดพเดทเดฏเดพเดฃเต เด—เต‹. เด…เดคเดฟเดจเตเดฑเต† เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟ เด•เดดเดฟเดตเตเด•เตพ เดตเดณเดฐเต† เดตเดฟเดถเดพเดฒเดฎเดพเดฃเต, เด‡เดจเตเดฑเตผเดซเต‡เดธเตเด•เดณเตเดŸเต† เดธเดนเดพเดฏเดคเตเดคเต‹เดŸเต† เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด…เดตเดฏเต† เดถเด•เตเดคเดฟเดชเตเดชเต†เดŸเตเดคเตเดคเดพเตป เด•เดดเดฟเดฏเตเด‚ - เด‡เดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ HTTP เดธเต†เตผเดตเดฑเตเด•เตพ เดตเดฟเด•เดธเดฟเดชเตเดชเดฟเด•เตเด•เดพเตป เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต.

เดธเตเด•เดฟเตฝเดฌเต‹เด•เตเดธเต เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต:

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•