Go 웹 서버 의 구조
우선 두 가지 가장 간단 한 서버 를 구축 합 니 다.
package main
import (
"net/http"
)
func main() {
http.ListenAndServe("", nil)
}
http 패키지 의 ListenAndServe 함 수 를 사용 합 니 다.사용 자 는 서버 대상 을 사용자 정의 하여 서버 에 대해 더 많은 설정 을 할 수 있 습 니 다.예 를 들 어 시간 초과 설정,기록 로그 등 작업 을 할 수 있 습 니 다.
package main
import (
"net/http"
)
func main() {
server := http.Server{
Addr: "127.0.0.1",
Handler: nil,
}
server.ListenAndServe()
}
http.server 구조의 공개 설정 은 다음 과 같 습 니 다.
type Server struct {
Addr string
Handler Handler
ReadTimeOut time.Duration
WriteTimeOut time.Duration
MaxHeaderBytes int
TLSConfig *tls.Config
ConnState func(net.Conn,ConnState)
ErrorLog *log.Logger
}
HTTPS 서 비 스 를 제공 하려 면 감청 함 수 를 server.ListenAndServeTLS("cert.pem","key.pem")로 바 꾸 기만 하면 됩 니 다.
프로세서 와 처리 함수
위 에 생 성 된 서버 는 처리 프로그램 을 쓰 지 않 아 요청 을 처리 할 수 없습니다.프로세서 나 처리 함 수 를 추가 해 야 합 니 다.
예 를 들 어 프로세서 추가:
package main
import (
"fmt"
"net/http"
)
type MyHandler struct{}
func (h *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World")
}
func main() {
handler := MyHandler{}
server := http.Server{
Addr: "127.0.0.1:8080",
Handler: &handler,
}
server.ListenAndServe()
}
여러 개의 프로 세 서 를 사용 하여 다른 요청 을 처리 하려 면:
package main
import (
"fmt"
"net/http"
)
type HelloHandler struct{}
func (h *HelloHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello")
}
type WorldHandler struct{}
func (h *WorldHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "World!")
}
func main() {
hello := HelloHandler{}
world := WorldHandler{}
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.Handle("/hello", &hello)
http.Handle("/world", &world)
server.ListenAndServe()
}
http.server 에서 handler 를 가리 키 지 않 으 면 서버 는 기본 Default ServeMux 프로 세 서 를 사용 하고 http.Handle 함 수 를 사용 하여 프로 세 서 를 Default ServeMux 에 연결 합 니 다.Handle 은 http 패키지 의 방법 이지 만 Default ServeMux.Handle 방법 을 사용 합 니 다.
위의 정의 에서 프로세서 에는 모두 함수 ServeHTTP 가 있 습 니 다.go 언어 에서 하나의 프로 세 서 는 ServeHTTP 방법 을 가 진 인터페이스 입 니 다.Default ServeMux 다 중 복합 기 는 ServeMux 구조의 인 스 턴 스 이 고 후자 도 ServeHTTP 방법 을 가지 고 있 기 때문에 자신의 프로 세 서 를 정의 하려 면 ServeHTTP 만 실현 하면 됩 니 다.
이 방식 은 요청 을 추가 할 때마다 handler 를 만 드 는 것 이 번 거 로 울 수 있 습 니 다.프로세서 함 수 를 사용 할 수 있 습 니 다.처리 함수 만 정의 하고 handler 를 만 들 필요 가 없습니다.
package main
import (
"fmt"
"net/http"
)
func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello")
}
func world(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "World!")
}
func main() {
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.HandleFunc("/hello", hello)
http.HandleFunc("/world", world)
server.ListenAndServe()
}
Go 는 handle Func 함 수 를 가지 고 있 습 니 다.(w http.ResponseWriter,r*http.Request)인자 가 있 는 함 수 를 handler 로 바 꿀 수 있 습 니 다.http.Handle 함수 와 마찬가지 로 Default ServeMux 를 호출 하 는 함수 입 니 다.
함수 프로 토 타 입:
func Handle(pattern string, handler Handler) {
DefaultServeMux.Handle(pattern, handler)
}
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.