go 표준 라이브러리가 실용적이고 API 디자인이 단순하다고 합니다. 이번에는 go 표준 라이브러리의 net/http 패키지를 사용하여 세 가지 버전이 포함된 간단한 http 웹 서버를 구현해 보겠습니다.
가장 간단한 버전 (배우는 것을 권장함: go)
직접 사용하기
http.HandleFunc(partern,function(http.ResponseWriter,*http.Request){})
HandleFunc는 두 개의 매개변수를 허용하는데 첫 번째는 라우팅 주소이고 두 번째는 처리 방법입니다.
//v1 func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("httpserver v1")) }) http.HandleFunc("/bye", sayBye) log.Println("Starting v1 server ...") log.Fatal(http.ListenAndServe(":1210", nil)) } func sayBye(w http.ResponseWriter, r *http.Request) { w.Write([]byte("bye bye ,this is v1 httpServer")) }
Custom Handler
표준 라이브러리 소스 코드 보기 v1 버전은 실제로 핸들 메소드를 호출합니다. 실제로, ServeHTTP는 핸들러의 ServeHTTP 메소드를 구현합니다.
이로부터 우리는 자체 Handler를 사용자 정의할 수 있으며, 코드는 다음과 같습니다:
// v2 func main() { mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) log.Println("Starting v2 httpserver") log.Fatal(http.ListenAndServe(":1210", mux)) } type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("this is version 2")) } func sayBye(w http.ResponseWriter, r *http.Request) { w.Write([]byte("bye bye ,this is v2 httpServer")) }
사용자 정의된 서버 구성
우리는 이전에 Handler에 칼을 만들었으니 한번 살펴보겠습니다. 아래를 보세요. http.ListenAndServe()의 비밀은 무엇인가요?
여기서 http 서버 구성을 사용자 정의할 수 있다는 것이 밝혀졌습니다. 이는 모두 서버 구조에 있습니다. 이 개체는 수신 주소 포트를 구성하고, 읽기 및 쓰기 시간 제한을 구성하고, 핸들러를 구성하고, 구성할 수 있습니다. 요청 헤더의 최대 바이트 수.. .. 모두 현재 프로그램을 얻기 위해 이전 프로그램을 약간 수정했습니다:
// v3 func main() { mux := http.NewServeMux() mux.Handle("/", &myHandler{}) mux.HandleFunc("/bye", sayBye) server := &http.Server{ Addr: ":1210", WriteTimeout: time.Second * 3, //设置3秒的写超时 Handler: mux, } log.Println("Starting v3 httpserver") log.Fatal(server.ListenAndServe()) } type myHandler struct{} func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Write([]byte("this is version 3")) } func sayBye(w http.ResponseWriter, r *http.Request) { // 睡眠4秒 上面配置了3秒写超时,所以访问 “/bye“路由会出现没有响应的现象 time.Sleep(4 * time.Second) w.Write([]byte("bye bye ,this is v3 httpServer")) }
위 내용은 golang http를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!