เจชเฉฐเจ เจธเจพเจฒ เจชเจนเจฟเจฒเจพเจ เจฎเฉเจ เจธเจผเฉเจฐเฉ เจเฉเจคเจพ เจธเฉ
เจเจน เจฒเฉเจ เจเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจฐเจตเจฐ เจฒเจฟเจเจฃ เจฌเจพเจฐเฉ เจนเฉเฅค เจเจ "เจนเฉเจฒเฉ เจตเจฐเจฒเจก" เจตเจฐเจเฉเจเจ เจธเจงเจพเจฐเจจ เจเฉเจเจผเจพเจ เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเฉเจ เจ เจคเฉ เจนเฉเจ เจฒเจฟเจเฉเจเจ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ เจตเจพเจฒเฉ เจเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเจพเจฒ เจธเจฎเจพเจชเจค เจเจฐเฉเจ:
- 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)
}
เจเจธ เจคเฉเจ เจฌเจพเจ
เจฆ เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจฐเจจ เจเจฐเจฆเฉ เจนเฉ เจ
เจคเฉ เจชเฉเจ เจจเฉเฉฐ เจเจชเจจ เจเจฐเจฆเฉ เจนเฉ
เจ เจธเฉเจ เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจเจ เจตเจพเจฐ เจนเฉเจเจกเจฒเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเฉ, เจชเจฐ เจชเจนเจฟเจฒเจพเจ เจเจน เจธเจฎเจเฉเจ เจเจฟ เจธเจญ เจเฉเจ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉเฅค
net/http
เจเจฆเจพเจนเจฐเจจ เจชเฉเจเฉเจ เจจเฉเฉฐ เจตเจฐเจคเจฟเจ net/http
HTTP เจนเฉเจเจกเจฒเจฐ
เจเจฆเฉเจ เจธเจพเจจเฉเฉฐ เจเฉเจ เจฌเฉเจจเจคเฉ เจฎเจฟเจฒเจฆเฉ เจนเฉ, เจคเจพเจ เจนเฉเจเจกเจฒเจฐ เจเจธเจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจเฉฑเจ เจเจตเจพเจฌ เจคเจฟเจเจฐ เจเจฐเจฆเจพ เจนเฉเฅค เจเฉ เจตเจฟเฉฑเจ เจนเฉเจเจกเจฒเจฐ เจเจธ เจคเจฐเฉเจนเจพเจ เจฒเจพเจเฉ เจเฉเจคเฉ เจเจ เจนเจจ:
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
เจชเจนเจฟเจฒเฉ เจเจฆเจพเจนเจฐเจจ http.HandleFunc เจธเจนเจพเจเจ เจซเฉฐเจเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเฅค เจเจน เจเฉฑเจ เจนเฉเจฐ เจซเฉฐเจเจธเจผเจจ เจจเฉเฉฐ เจธเจฎเฉเจเจฆเจพ เจนเฉ, เจเฉ เจฌเจฆเจฒเฉ เจตเจฟเฉฑเจ http.ResponseWriter เจ เจคเฉ http.Request เจจเฉเฉฐ ServeHTTP เจตเจฟเฉฑเจ เจฒเฉเจเจฆเจพ เจนเฉเฅค
เจฆเฉเจเฉ เจธเจผเจฌเจฆเจพเจ เจตเจฟเฉฑเจ, เจเฉเจฒเฉฐเจ เจตเจฟเฉฑเจ เจนเฉเจเจกเจฒเจฐ เจเฉฑเจ เจธเจฟเฉฐเจเจฒ เจเฉฐเจเจฐเจซเฉเจธ เจตเจฟเฉฑเจ เจชเฉเจธเจผ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเจจ, เจเฉ เจชเฉเจฐเฉเจเจฐเจพเจฎเจฐ เจจเฉเฉฐ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจตเจฟเจเจฒเจช เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค เจเจธ เจฒเจ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจฎเจฟเจกเจฒเจตเฉเจ เจฐ เจจเฉเฉฐ เจเฉฑเจ เจนเฉเจเจกเจฒเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจฒเจพเจเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจเจฟเฉฑเจฅเฉ ServeHTTP เจชเจนเจฟเจฒเจพเจ เจเฉเจ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจซเจฟเจฐ เจเจฟเจธเฉ เจนเฉเจฐ เจนเฉเจเจกเจฒเจฐ เจฆเฉ ServeHTTP เจตเจฟเจงเฉ เจจเฉเฉฐ เจเจพเจฒ เจเจฐเจฆเจพ เจนเฉเฅค
เจเจฟเจตเฉเจ เจเฉฑเจชเจฐ เจฆเฉฑเจธเจฟเจ เจเจฟเจ เจนเฉ, เจนเฉเจเจกเจฒเจฐ เจธเจฟเจฐเจซเจผ เจฌเฉเจจเจคเฉเจเจ เจฆเฉ เจเจตเจพเจฌ เจคเจฟเจเจฐ เจเจฐเจฆเฉ เจนเจจเฅค เจชเจฐ เจธเจฎเฉเจ เจฆเฉ เจเจฟเจธเฉ เจเจพเจธ เจฌเจฟเฉฐเจฆเฉ 'เจคเฉ เจเจฟเจนเฉเจพ เจเจพเจธ เจนเฉเจเจกเจฒเจฐ เจตเจฐเจคเจฟเจ เจเจพเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉ?
เจฐเฉเจเจฟเฉฐเจ เจฆเฉ เจฌเฉเจจเจคเฉ เจเจฐเฉ
เจธเจนเฉ เจเฉเจฃ เจเจฐเจจ เจฒเจ, เจเฉฑเจ HTTP เจฎเจฒเจเฉเจชเจฒเฉเจเจธเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเฅค เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจตเจฟเฉฑเจ เจเจธเจจเฉเฉฐ เจฎเฉเจเจธเจฐ เจเจพเจ เจฐเจพเจเจเจฐ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉ, เจชเจฐ เจเจน เจธเจญ เจเฉฑเจเฉ เจเจฟเจนเฉเจเจ เจนเจจเฅค เจฎเจฒเจเฉเจชเจฒเฉเจเจธเจฐ เจฆเจพ เจเฉฐเจฎ เจฌเฉเจจเจคเฉ เจฎเจพเจฐเจ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจเจพ เจ เจคเฉ เจเจเจฟเจค เจนเฉเจเจกเจฒเจฐ เจฆเฉ เจเฉเจฃ เจเจฐเจจเจพ เจนเฉเฅค
เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจฐเฉเจเจฟเฉฐเจ เจฒเจ เจธเจนเจพเจเจคเจพ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจคเจพเจ เจคเฉเจเฉ-เจงเจฟเจฐ เจฆเฉเจเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉเจเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจฌเจฟเจนเจคเจฐ เจนเฉ. เจเฉเจ เจธเจญ เจคเฉเจ เจเฉฑเจจเจค -
เจเฉฑเจ เจเจฎ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจซเจฐเฉเจฎเจตเจฐเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจเฉเจฐ-เจฎเจฟเจเจฐเฉ เจนเฉฑเจฒเจพเจ เจฆเฉ เจฒเฉเฉ เจชเจตเฉเจเฉ, เจ เจคเฉ เจเจน เจกเจฟเจซเฉเจฒเจ เจนเฉเจเจกเจฒเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจจเฉเฉฐ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจฃ เจฐเฉเจช เจตเจฟเฉฑเจ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค เจเจผเจฟเจเจฆเจพเจคเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจฒเจ, เจกเจฟเจซเฉเจฒเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจ เจคเฉ เจเฉฑเจ เจธเจงเจพเจฐเจจ เจฐเจพเจเจเจฐ เจฆเจพ เจธเฉเจฎเฉเจฒ เจเจพเจซเฉ เจนเฉเจตเฉเจเจพเฅค
เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฆเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ
เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, เจธเจพเจจเฉเฉฐ เจเฉฑเจ เจ เจเจฟเจนเฉ เจนเจฟเฉฑเจธเฉ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเฉ เจเจเจฃ เจตเจพเจฒเฉ เจเจจเฉเจเจธเจผเจจเจพเจ เจฒเจ "เจธเฉเจฃเฉเจเจพ" เจ เจคเฉ เจธเจพเจฐเฉเจเจ เจฌเฉเจจเจคเฉเจเจ เจจเฉเฉฐ เจธเจนเฉ เจนเฉเจเจกเจฒเจฐ เจจเฉเฉฐ เจฐเฉเจกเจพเจเจฐเฉเจเจ เจเจฐเฉเจเจพเฅค http.Server เจเจธ เจเฉฐเจฎ เจจเฉเฉฐ เจเจธเจพเจจเฉ เจจเจพเจฒ เจธเฉฐเจญเจพเจฒ เจธเจเจฆเจพ เจนเฉเฅค
เจนเฉเจ เจพเจ เจฆเจฟเจเจพเจเจเจฆเจพ เจนเฉ เจเจฟ เจธเจฐเจตเจฐ เจเจนเจจเจพเจ เจธเจพเจฐเฉ เจเฉฐเจฎเจพเจ เจฒเจ เจเจฟเฉฐเจฎเฉเจตเจพเจฐ เจนเฉ เจเฉ เจเฉเจจเฉเจเจธเจผเจจ เจชเฉเจฐเฉเจธเฉเจธเจฟเฉฐเจ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจนเจจเฅค เจเจน, เจเจฆเจพเจนเจฐเจจ เจฒเจ, TLS เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉเฅค http.ListenAndServer เจเจพเจฒ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฒเจ, เจเฉฑเจ เจฎเจฟเจเจฐเฉ HTTP เจธเจฐเจตเจฐ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค
เจนเฉเจฃ เจเจ เจนเฉเจฐ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจเจฆเจพเจนเจฐเจฃเจพเจ เจจเฉเฉฐ เจตเฉเจเฉเจ.
เจเจ เจเจจเจเฉเจฐเจฟเจชเจ เจจเฉเฉฐ เจเฉเฉเจจเจพ
เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ, เจธเจพเจกเฉ เจเจชเจฒเฉเจเฉเจธเจผเจจ HTTP เจชเฉเจฐเฉเจเฉเจเฉเจฒ 'เจคเฉ เจเฉฑเจฒเจฆเฉ เจนเฉ, เจชเจฐ HTTPS เจชเฉเจฐเฉเจเฉเจเฉเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจธเจฟเจซเจพเจฐเจธเจผ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเจน Go เจตเจฟเฉฑเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจคเฉเจ เจฌเจฟเจจเจพเจ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเฉฑเจ เจธเจฐเจเฉเจซเจฟเจเฉเจ เจ เจคเฉ เจชเฉเจฐเจพเจเจตเฉเจ เจเฉเฉฐเจเฉ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจนเฉ, เจคเจพเจ เจเจน ListenAndServeTLS เจจเฉเฉฐ เจธเจนเฉ เจธเจฐเจเฉเจซเจฟเจเฉเจ เจ เจคเฉ เจฎเฉเฉฑเจ เจซเจพเจเจฒเจพเจ เจจเจพเจฒ เจฐเจเจฟเจธเจเจฐ เจเจฐเจจ เจฒเจ เจเจพเจซเฉ เจนเฉเฅค
http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
เจคเฉเจธเฉเจ เจนเจฎเฉเจธเจผเจพ เจฌเจฟเจนเจคเจฐ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
autocert
.
เจเจธ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจฆเจพ เจธเจญ เจคเฉเจ เจเจธเจพเจจ เจคเจฐเฉเจเจพ 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 เจธเจฎเจฐเจฅเจจ เจจเฉเฉฐ เจฒเจพเจเฉ เจเจฐเจจ เจฆเจพ เจเจน เจเฉฑเจ เจเจธเจพเจจ เจคเจฐเฉเจเจพ เจนเฉเฅค
เจเจธเจเจฎ เจฐเฉเจ เจเฉเฉ เจฐเจฟเจนเจพ เจนเฉ
เจธเจเฉเจเจกเจฐเจก เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจตเจฟเฉฑเจ เจธเจผเจพเจฎเจฒ เจกเจฟเจซเฉเจฒเจ เจฐเจพเจเจเจฐ เจตเจงเฉเจ เจนเฉ, เจชเจฐ เจเจน เจฌเจนเฉเจค เจฌเฉเจจเจฟเจเจฆเฉ เจนเฉเฅค เจเจผเจฟเจเจฆเจพเจคเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจจเฉเฉฐ เจตเจงเฉเจฐเฉ เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจฐเฉเจเจฟเฉฐเจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจจเฉเจธเจเจก เจ เจคเฉ เจตเจพเจเจฒเจกเจเจพเจฐเจก เจฐเฉเจ เจธเจผเจพเจฎเจฒ เจนเฉเฉฐเจฆเฉ เจนเจจ, เจเจพเจ เจชเจพเจฅ เจชเฉเจเจฐเจจ เจ เจคเฉ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจธเฉเฉฑเจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจตเจฟเจงเฉเฅค
เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเจน เจชเฉเจเฉเจเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉ
เจฆเจฟเฉฑเจคเฉ เจเจ เจซเจพเจเจฒ 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 เจชเฉเจฐเฉเจซเจฟเจเจธ เจธเฉเฉฑเจ เจเจฐเจฆเฉ เจนเจพเจเฅค
เจซเจฟเจฐ เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจธเจพเจกเฉ เจฎเฉเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจตเจฟเฉฑเจ เจตเจพเจชเจธ 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())
เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจฐเฉเจเจพเจ เจฆเฉ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจ เจตเจฟเฉฑเจ เจเฉ เจฆเฉ เจธเฉเจ, เจตเฉฑเจกเฉ, เจเฉเฉฐเจเจฒเจฆเจพเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจเจพเจ เจฆเฉ เจขเจพเจเจเฉ เจ เจคเฉ เจฐเฉฑเจ-เจฐเจเจพเจ เจจเฉเฉฐ เจธเจฐเจฒ เจฌเจฃเจพเจเจฃเจพ เจธเฉฐเจญเจต เจฌเจฃเจพเจเจเจฆเฉ เจนเฉเฅค
เจฎเจฟเจกเจฒเจตเฉเจ เจฐ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ
เจธเจเฉเจเจฟเฉฐเจ เจตเจฟเฉฑเจ เจเฉฑเจ 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)
})
}
เจเฉฑเจฅเฉ เจฅเจฐเจก เจชเจพเจฐเจเฉ เจฐเจพเจเจเจฐ เจนเจจ, เจเจฟเจตเฉเจ เจเจฟ เจเฉ, เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจฎเจฟเจกเจฒเจตเฉเจ เจฐ เจเจพเจฐเจเจเฉเจธเจผเจฒเจคเจพ เจจเฉเฉฐ เจตเจงเจพเจเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเฉ เจนเจจเฅค
เจธเจฅเจฟเจฐ เจซเจพเจเจฒเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐเจจเจพ
เจเฉ เจธเจเฉเจเจกเจฐเจก เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจตเจฟเฉฑเจ เจเจฟเฉฑเจคเจฐ, 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
เจธเจนเฉ เจฌเฉฐเจฆ
เจเฉ เจตเจฟเฉฑเจ เจเฉฑเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพ เจตเฉ เจนเฉ เจเจฟเจธเจจเฉเฉฐ HTTP เจธเจฐเจตเจฐ เจฆเจพ เจธเจผเจพเจจเจฆเจพเจฐ เจฌเฉฐเจฆ เจเจฟเจนเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจน Shutdown() เจตเจฟเจงเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจธเจฐเจตเจฐ เจจเฉเฉฐ เจเฉฑเจ เจเฉเจฐเฉเจเฉเจจ เจตเจฟเฉฑเจ เจธเจผเฉเจฐเฉ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจ เจคเฉ เจซเจฟเจฐ เจเฉฑเจ เจฐเฉเจเจพเจตเจ เจธเจฟเจเจจเจฒ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฒเจ เจเฉเจจเจฒ เจจเฉเฉฐ เจธเฉเจฃเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจฟเจตเฉเจ เจนเฉ เจธเจฟเจเจจเจฒ เจชเฉเจฐเจพเจชเจค เจนเฉเฉฐเจฆเจพ เจนเฉ, เจธเจฐเจตเจฐ เจฌเฉฐเจฆ เจนเฉ เจเจพเจเจฆเจพ เจนเฉ, เจชเจฐ เจคเฉเจฐเฉฐเจค เจจเจนเฉเจ, เจชเจฐ เจเฉเจ เจธเจเจฟเฉฐเจเจพเจ เจฌเจพเจ เจฆ.
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 เจธเจฐเจตเจฐ เจตเจฟเจเจธเจฟเจค เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค
เจธเจเจฟเฉฑเจฒเจฌเจพเจเจธ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจเจฐเจฆเจพ เจนเฉ:
- เจฆเฉ เจธเจพเจฒเจพ เจชเฉเจฐเฉเจเจเฉเจเจฒ เจเฉเจฐเจธ
"เจฎเฉเจ เจเฉฑเจ เจชเฉเจฐเฉ เจตเฉเฉฑเจฌ เจกเจฟเจตเฉเจฒเจชเจฐ เจนเจพเจ" .- เจตเจฟเจฆเจฟเจ เจ เจเจจเจฒเจพเจเจจ เจเฉเจฐเจธ
"เจชเฉเจฐเฉเจซเฉเจธเจผเจจ เจเจพเจตเจพ เจกเจฟเจตเฉเจฒเจชเจฐ" .- เจชเฉเจฐเฉเจเจเฉเจเจฒ เจธเจพเจฒ เจฆเจพ เจเฉเจฐเจธ
"0 เจคเฉเจ PRO เจคเฉฑเจ PHP เจกเจฟเจตเฉเจฒเจชเจฐ" .
เจธเจฐเฉเจค: www.habr.com