เบซเปเบฒเบเบตเบเปเบญเบเบซเบเปเบฒเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ
เบเบปเบเบเบงเบฒเบกเบเบตเปเปเบกเปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฝเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเปเบ Go. เปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบชเบดเปเบเบเบตเปเบเปเบฒเบเบเบฒเบเปเบเบฑเปเบ "เบชเบฐเบเบฒเบเบเบตเปเบฅเบ!" เปเบฅเบฐเบชเบดเปเบเบชเบธเบเบเปเบงเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบตเปเบกเบตเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
- เบเบฒเบเบเปเบฒเปเบเป Let's Encrypt เบชเปเบฒเบฅเบฑเบ HTTPS.
โ เปเบฎเบฑเบโเบงเบฝเบโเปเบเบฑเบ router APIโ.
- เปเบฎเบฑเบโเบงเบฝเบโเบฎเปเบงเบกโเบเบฑเบโเปเบเบทเปเบญเบโเบกเบทโเบเบฒเบโ.
- เบเบฒเบโเบเบธเบโเปเบเปเบโเบเบญเบโเปเบเบฅโเป staticโ.
- เบเบฒเบโเบเบดเบโเบเบตเปโเบเบทเบโเบเปเบญเบโ.
Skillbox เปเบเบฐเบเปเบฒ: เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ
"เบเบฑเบเบเบฑเบเบเบฐเบเบฒ Python เบเบฑเปเบเปเบเปเปเบฅเบตเปเบกเบเบปเปเบ" .เบเบงเบเปเบฎเบปเบฒเปเบเบทเบญเบ: เบชเปเบฒเบฅเบฑเบเบเบนเปเบญเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบ "Habr" - เบชเปเบงเบเบซเบผเบธเบ 10 rubles เปเบกเบทเปเบญเบฅเบปเบเบเบฐเบเบฝเบเปเบเบซเบผเบฑเบเบชเบนเบ Skillbox เปเบเบเปเบเปเบฅเบฐเบซเบฑเบเบชเบปเปเบเปเบชเบตเบก "Habr".
เบชเบฐโเบเบฒเบโเบเบตโเบเบฒเบงโเปเบฅเบ!
เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเปเบฒเบเปเบงเบฑเบเปเบเบตเบเปเบงเบตเปเบ 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)
}
เบซเบผเบฑเบเบเบฒเบเบเบตเป, เบเปเบฒเบเปเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเปเบฅเบฐเปเบเบตเบเบซเบเปเบฒ
เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเปเบเบปเบงเบเบฑเบเบเบฒเบเบซเบผเบฒเบเปเบเบทเปเบญเปเบเบเบฒเบเบซเบผเบฑเบ, เปเบเปเบเบณเบญเบดเบเปเบซเปเปเบฎเบปเบฒเปเบเบปเปเบฒเปเบเบงเปเบฒเบเบธเบเบขเปเบฒเบเปเบฎเบฑเบเบงเบฝเบเปเบเบงเปเบ.
net/http
เบเบปเบงเบขเปเบฒเบเบเบตเปเปเบเปเบเบธเบ net/http
เบเบปเบงเบเบฑเบเบเบฒเบ HTTP
เปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบฎเปเบญเบเบเป, เบเบนเปเบเบฑเบเบเบฒเบเบเบฐเบงเบดเปเบเบฒเบฐเบกเบฑเบเปเบฅเบฐเบชเปเบฒเบเบเปเบฒเบเบญเบ. Handlers เปเบ Go เปเบกเปเบเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเปเปเปเบเบเบตเป:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
เบเบปเบงเบขเปเบฒเบเบเปเบฒเบญเบดเบเปเบเปเบซเบเปเบฒเบเบตเปเบเบนเปเบเปเบงเบ http.HandleFunc. เบกเบฑเบเบซเปเปเบเบฑเบเบเบฑเบเบญเบทเปเบ, เปเบเบดเปเบเปเบเปเปเบงเบฅเบฒ http.ResponseWriter เปเบฅเบฐ http.Request เปเบเบปเปเบฒเปเบเปเบ ServeHTTP.
เปเบเบเปเบฒเบชเบฑเบเบเปเบฒเบเปเบญเบทเปเบเป, handlers เปเบ Golang เปเบกเปเบเบเปเบฒเบชเบฐเปเบซเบเบตเปเบเบเบฒเบเปเบเปเบเบญเบเบเบฝเบง, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบฅเบทเบญเบเบซเบผเบฒเบเบเบฑเบ programmer. เบเบฑเปเบเบเบฑเปเบ, เบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบ, เบชเบทเปเบเบฒเบเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเปเบเปเบเบปเบงเบเบฑเบเบเบฒเบ, เบเปเบญเบเบเบตเป ServeHTTP เบเปเบฒเบญเบดเบเปเบฎเบฑเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเบซเบฒเบงเบดเบเบตเบเบฒเบ ServeHTTP เบเบญเบเบเบปเบงเบเบฑเบเบเบฒเบเบญเบทเปเบ.
เบเบฑเปเบเบเบตเปเปเบเปเบเปเบฒเบงเบกเบฒเบเปเบฒเบเปเบเบดเบ, เบเบนเปเบเบฑเบเบเบฒเบเบเบฝเบเปเบเปเบชเปเบฒเบเบเบฒเบเบเบญเบเบชเบฐเบซเบเบญเบเบเปเปเบเบฒเบเบฎเปเบญเบเบเป. เปเบเปเบงเปเบฒเบเบปเบงเบเบฑเบเบเบฒเบเบชเบฐเปเบเบฒเบฐเปเบเบเบตเปเบเบงเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเบเบธเบเปเบเบเบถเปเบเปเบเปเบงเบฅเบฒ?
เบฎเปเบญเบเบเปเปเบชเบฑเปเบเบเบฒเบ
เปเบเบทเปเบญเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเบทเบเบเปเบญเบ, เปเบเป HTTP multiplexer. เปเบเบเปเบฒเบเบงเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบกเบฑเบเบเบทเบเปเบญเบตเปเบเบงเปเบฒ muxer เบซเบผเบท router, เปเบเปเบเบงเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเบชเบดเปเบเบเบฝเบงเบเบฑเบ. เบซเบเปเบฒเบเบตเปเบเบญเบ multiplexer เปเบกเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบชเบฑเปเบเบเบฒเบเบเบฒเบเบฎเปเบญเบเบเปเปเบฅเบฐเปเบฅเบทเบญเบเบเบปเบงเบเบฑเบเบเบฒเบเบเบตเปเปเบซเบกเบฒเบฐเบชเบปเบก.
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเบเปเบฒเบเบปเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบ, เบกเบฑเบเบเบตเบเบงเปเบฒเบเบตเปเบเบฐเปเบเปเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบเบญเบเบเบฒเบเบชเปเบงเบเบเบตเบชเบฒเบก. เบเบฒเบโเบชเปเบงเบโเบเบตเปโเบเปเบฒเบงโเบซเบเปเบฒโเบเบตเปโเบชเบธเบ -
เบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบเบฎเปเบฒเบเบเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบเปเบเบชเบฐเบเบฒเบเบฐเบเบฒเบเบเบปเบเบเบฐเบเบดเบเบฐเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเปเบเปเปเบเบเบตเปเบเปเปเปเบกเปเบเบกเบฒเบเบเบฐเบเบฒเบ, เปเบฅเบฐเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบซเบผเบฒเบเปเบเบเบฒเบเบเปเบฒเปเบเปเบเบปเบงเบเบฑเบเบเบฒเบเปเบเบเบญเบเบเบปเปเบ. เปเบเบทเปเบญเบชเปเบฒเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบชเปเบงเบเปเบซเบเป, เบเบฒเบเบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบญเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบเปเบฅเบตเปเบกเบเบปเปเบเปเบฅเบฐ router เปเบเบเบเปเบฒเบเบเบฒเบเบเบฐเบเบฝเบเบเป.
เบเบฒเบเบเบฐเบกเบงเบเบเบปเบเปเบเบเบชเบญเบเบเบฒเบก
เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเบเบฐ "เบเบฑเบ" เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเปเบเบปเปเบฒเปเบฅเบฐเบเปเบฝเบเปเบชเบฑเปเบเบเบฒเบเบเบฒเบเบฎเปเบญเบเบเปเบเบฑเบเบซเบกเบปเบเปเบเบซเบฒเบเบปเบงเบเบฑเบเบเบฒเบเบเบตเปเบเบทเบเบเปเบญเบ. http.Server เบชเบฒเบกเบฒเบเบเบฑเบเบเบฒเบเบเบฑเบเบงเบฝเบเบเบฒเบเบเบตเปเปเบเปเบขเปเบฒเบเบเปเบฒเบเบเบฒเบ.
เบเปเปเปเบเบเบตเปเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเปเบฒเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบเบกเบตเบเบงเบฒเบกเบฎเบฑเบเบเบดเบเบเบญเบเบเปเปเบซเบเปเบฒเบงเบฝเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบเบธเบเปเบเปเบเบเบฒเบเปเบเบทเปเบญเบกเบเปเป. เบเบปเบงเบขเปเบฒเบเบเบตเป, เปเบฎเบฑเบเบงเบฝเบเปเบเบเปเบเปเปเบเปเบเบเบญเบ TLS. เปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบ http.ListenAndServer, เปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ HTTP เบกเบฒเบเบเบฐเบเบฒเบเบเบทเบเบเปเบฒเปเบเป.
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบเบซเบผเบฒเบ.
เปเบเบตเปเบกเปเบซเปเปเบเบปเปเบฒเบฅเบฐเบซเบฑเบ
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบฅเปเบเบเปเบฒเบเปเบเบฃเปเบเบเป HTTP, เปเบเปเปเบเบฐเบเบณเปเบซเปเปเบเปเปเบเบฃเปเบเบเป HTTPS. เบเบตเปเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเปเบเบเบเปเปเบกเบตเบเบฑเบเบซเบฒเปเบ Go. เบเปเบฒเบเปเบฒเบเปเบเปเบฎเบฑเบเปเบเบขเบฑเปเบเบขเบทเบเปเบฅเบฐเบฅเบฐเบซเบฑเบเบชเปเบงเบเบเบปเบง, เบกเบฑเบเบเบฝเบเบเปเบเบตเปเบเบฐเบฅเบปเบเบเบฐเบเบฝเบ ListenAndServeTLS เบเปเบงเบเปเบเบขเบฑเปเบเบขเบทเบเบเบตเปเบเบทเบเบเปเบญเบเปเบฅเบฐเปเบเบฅเปเบเบตเปเบชเปเบฒเบเบฑเบ.
http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
เปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบเปเบเบตเบเบงเปเบฒเบเบตเปเบชเบฐเปเปเบต.
autocert
.
เบงเบดเบเบตเบเบตเปเบเปเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเบเปเบฒเบซเบเบปเบเบเปเบฒเบกเบฑเบเปเบกเปเบเบเบฒเบเบเปเบฒเปเบเปเบงเบดเบเบตเบเบฒเบ autocert.NewListener เบเบฐเบชเบปเบกเบเบฐเบชเบฒเบเบเบฑเบ http.Serve. เบงเบดเบเบตเบเบฒเบเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเปเบเปเบฎเบฑเบเปเบฅเบฐเบเบฑเบเบเบธเบเปเบเบขเบฑเปเบเบขเบทเบ TLS เปเบเบเบฐเบเบฐเบเบตเปเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ HTTP เบเปเบฒเปเบเบตเบเบเบฒเบเบฎเปเบญเบเบเป:
http.Serve(autocert.NewListener("example.com"), nil)
เบเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบขเบนเปเปเบเบเบปเบงเบเปเบญเบเปเบงเบฑเบ
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบก, เบเปเบฒเบเบเบงเบเปเบเปเบเบปเบงเบเบฑเบเบเบฒเบ 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 เบขเปเบฒเบเปเบเบฑเบกเบเบตเปเบเปเบงเบเบเบฒเบเบเปเปเบญเบฒเบเบธเปเบเบขเบฑเปเบเบขเบทเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบ.
เปเบเบตเปเบกเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบเปเบฒเบซเบเบปเบเปเบญเบ
router เปเบฅเบตเปเบกเบเบปเปเบเบเบตเปเบฅเบงเบกเบขเบนเปเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบกเบฒเบเบเบฐเบเบฒเบเปเบกเปเบเบเบต, เปเบเปเบงเปเบฒเบกเบฑเบเปเบกเปเบเบเบทเปเบเบเบฒเบเบซเบผเบฒเบ. เปเบญเบฑเบเบเบฅเบดเปเบเบเบฑเบเบชเปเบงเบเปเบซเบเปเบเปเบญเบเบเบฒเบเบเบฒเบเบเบณเบเบปเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบเบฑเบเบเปเบญเบเบเบงเปเบฒ, เบฅเบงเบกเบเบฑเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบเปเบญเบเบเบฑเบ เปเบฅเบฐ เบชเบฑเบเบเบฒเบฅเบฑเบเปเบเบ, เบซเบผเบทเบเบฑเปเบเบเบญเบเบเบฒเบเบเบณเบเบปเบเบฎเบนเบเปเบเบเปเบชเบฑเปเบเบเบฒเบ เปเบฅเบฐเบเบฒเบฅเบฒเบกเบดเปเบเบต.
เปเบเบเปเบฅเบฐเบเบตเบเบตเปเบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเบฐเปเบเปเปเบเบฑเบเปเบเบฑเบ
เปเบซเปเปเบกเปเบเปเบเบฅเป api/v1/api.go เบเบตเปเบกเบตเปเบชเบฑเปเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ API เบเบญเบเบเบงเบเปเบฎเบปเบฒ:
/ 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 เบชเปเบฒเบฅเบฑเบเปเบชเบฑเปเบเบเบฒเบเปเบเปเบเบฅเปเบเบปเปเบเบเป.
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบ mount เบเบตเปเบเบฑเบ router เบเบปเปเบเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฒเบเปเบเป api / v1 / prefix เบเบฑเบเบเบทเบเปเบเบเปเบญเบเปเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบปเปเบเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒ:
// 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 เบเบฑเบเปเบชเบฑเปเบเบเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบเปเบฎเบฑเบเปเบซเปเบกเบฑเบเปเบเบฑเบเปเบเปเบเปเบเบตเปเบเบฐเปเบฎเบฑเบเปเบซเปเปเบเบเบชเปเบฒเบเปเบฅเบฐเบเปเบฒเบฅเบธเบเบฎเบฑเบเบชเบฒเบเบญเบเบเปเบฒเบฎเปเบญเบเบชเบฐเบซเบกเบฑเบเบเบฐเบซเบเบฒเบเปเบซเบเป, เบชเบฐเบฅเบฑเบเบชเบฑเบเบเปเบญเบ.
เปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบเบปเบงเบเบฒเบ
Staging เบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบฒเบเบซเปเปเบเบปเบงเบเบฑเบเบเบฒเบ 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)
})
}
เบกเบต router เบเบญเบเบเบฒเบเบชเปเบงเบเบเบตเบชเบฒเบก, เปเบเบฑเปเบ: chi, เบเบตเปเบญเบฐเบเบธเบเบฒเบเปเบซเปเบเปเบฒเบเบชเบฒเบกเบฒเบเบเบฐเบซเบเบฒเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเบฒเบ.
เปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบฅเปเบเบปเบเบเบตเป
เบซเปเบญเบเบชเบฐเบซเบกเบธเบเบกเบฒเบเบเบฐเบเบฒเบ Go เบเบฐเบเบญเบเบกเบตเบเบงเบฒเบกเบชเบฒเบกเบฒเบเปเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเปเบเบทเปเบญเบซเบฒเบเบปเบเบเบตเป, เบฅเบงเบกเบเบฑเบเบฎเบนเบเบเบฒเบ, JavaScript เปเบฅเบฐเปเบเบฅเป 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
เบกเบฑเบเปเบเบฑเบเบกเบนเบเบเปเบฒเบเบตเปเบเปเบฒเปเบงเปเบขเปเบฒเบเปเบเปเบเบญเบเบงเปเบฒ http.Dir เบชเบฐเปเบเบเปเบเบทเปเบญเปเบเบเบญเบเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเปเบฒเบกเบฑเบเบเปเปเบกเบตเปเบเบฅเป index.html เบเบปเปเบเบเป. เปเบเบเปเบฅเบฐเบเบตเบเบตเป, เปเบเบทเปเบญเบเปเบญเบเบเบฑเบเบเปเปเปเบซเปเปเบเปเบฅเบเบฐเบเปเบฅเบตเบเบทเบเบเปเบฒเบฅเบฒเบ, เบเปเบฒเบเบเบงเบเปเบเปเบเบธเบ unindexed
เบเบฒเบเบเบดเบเบเบตเปเบเบทเบเบเปเบญเบ
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 เบเบตเปเปเบเบทเปเบญเบเบทเปเบเปเปเบเปเป.
Skillbox เปเบเบฐเบเปเบฒ:
- เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบชเบญเบเบเบต
"เบเปเบญเบเปเบเบฑเบเบเบฑเบเบเบฑเบเบเบฐเบเบฒเปเบงเบฑเบ PRO" .- เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบชเบถเบเบชเบฒเบญเบญเบเปเบฅเบเป
"เบเบฑเบเบเบฑเบเบเบฐเบเบฒ Java เบกเบทเบญเบฒเบเบตเบ" .- เบซเบผเบฑเบเบชเบนเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ
"เบเบฑเบเบเบฑเบเบเบฐเบเบฒ PHP เบเบฒเบ 0 เปเบเบดเบ PRO" .
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com