>백엔드 개발 >Golang >golang http를 사용하는 방법

golang http를 사용하는 방법

(*-*)浩
(*-*)浩원래의
2019-12-03 10:43:243011검색

golang http를 사용하는 방법

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 메소드를 구현합니다.

golang http를 사용하는 방법

golang http를 사용하는 방법

golang http를 사용하는 방법

이로부터 우리는 자체 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()의 비밀은 무엇인가요?

golang http를 사용하는 방법

여기서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.