Go 프로 그래 밍 기초 4-Http 서버

1,http 서버
package main
import(
    "net/http"
    "log"
)
func main(){//              "/",      
    http.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){ 
        w.Write([]byte("Hello,this is version 1!"))
    })
    http.HandleFunc("/bye",sayBye)
    log.Println("Starting server ... v1")
    log.Fatal(http.ListenAndServe(":4000",nil))
}
func sayBye( w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Bye bye,this is version 1!"))
}
go run test.go
2018/07/09 14:32:08 Starting server ... v1

브 라 우 저 액세스 열기:http://localhost:4000/ Go编程基础4-Http服务器_第1张图片브 라 우 저 방문 열기:http://localhost:4000/bye Go编程基础4-Http服务器_第2张图片
어떻게 mux 사용자 정의 ServeHTTP 를 사용 하여 http server 를 실현 합 니까?
package main
import(
    "net/http"
    "log"
)
func main(){
    mux := http.NewServeMux()
    mux.Handle("/",&myHandler{})
    mux.HandleFunc("bye",sayBye)

    log.Println("Starting server ... v2")
    log.Fatal(http.ListenAndServe(":4000",mux))
}
type myHandler struct {}
func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Hello,this is version 2!"))
}
func sayBye(w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Bye bye,this is version 2!"))
}
go run test.go
2018/07/09 15:37:35 Starting server ... v2

브 라 우 저 액세스 열기:http://localhost:4000/ Go编程基础4-Http服务器_第3张图片브 라 우 저 방문 열기:http://localhost:4000/bye
브 라 우 저 액세스 열기:http://localhost:4000/abcdef 기본 값 도 여기에 일치 합 니 다Go编程基础4-Http服务器_第4张图片
일치 하지 않 는 모든 경로 가"/"경로 와 일치 합 니 다.
package main
import(
    "net/http"
    "log"
)
func main(){
    mux := http.NewServeMux()
    mux.Handle("/",&myHandler{}) //                 
    mux.HandleFunc("bye",sayBye)

    log.Println("Starting server ... v2")
    log.Fatal(http.ListenAndServe(":4000",mux))
}
type myHandler struct {}
func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Hello v2,the request url is:"+ r.URL.String()))
}
func sayBye(w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Bye bye,this is version 2!"))
}
go run test.go
2018/07/09 15:50:23 Starting server ... v2

브 라 우 저 액세스 열기:http://localhost:4000/nihao 기본 값 도/여기에 일치 합 니 다Go编程基础4-Http服务器_第5张图片
서버 정 보 를 어떻게 사용자 정의 합 니까?
import(
    "net/http"
    "log"
    "time"
)
func main(){
    server :=&http.Server{
        Addr: ":4000",
        WriteTimeout:2 * time.Second,
    }
    mux := http.NewServeMux()
    mux.Handle("/",&myHandler{}) //                 
    mux.HandleFunc("bye",sayBye)
    server.Handler=mux

    log.Println("Starting server ... v2")
    log.Fatal(server.ListenAndServe)
}
type myHandler struct {}
func (*myHandler) ServeHTTP(w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Hello v2,the request url is:"+ r.URL.String()))
}
func sayBye(w http.ResponseWriter,r *http.Request){
    w.Write([]byte("Bye bye,this is version 2!"))
}
go run test.go
2018/07/09 15:57:46 Starting server ... v2
2018/07/09 15:57:46 0x120ef70
       :http://localhost:4000     

클 라 이언 트 가 자발적으로 끊 을 수 있 습 니 다.
package main
import(
    "net/http"
    "log"
    "time"
    "os"
    "os/signal"
)
func main(){
    server :=&http.Server{
        Addr: ":4000",
        WriteTimeout:4 * time.Second,
    }

    quit := make(chan os.Signal)
    signal.Notify(quit,os.Interrupt)

    mux := http.NewServeMux()
    mux.Handle("/",&myHandler{}) //                 
    mux.HandleFunc("bye",sayBye)
    server.Handler=mux

    go func(){
        

어떻게 서로 다른 경로 의 퍼 가기 를 실현 합 니까?
package main

import (
    "log"
    "net/http"
    "time"
)

//    map,       
var mux map[string]func(http.ResponseWriter, *http.Request)

func main() {
    server := http.Server{
        Addr:        ":8090",
        Handler:     &myHandler{},
        ReadTimeout: 5 * time.Second,
    }
    //      ,/hello   /bye       ,     func
    mux = make(map[string]func(http.ResponseWriter, *http.Request)) //       
    mux["/hello"] = sayHello
    mux["/bye"] = sayBye
    err := server.ListenAndServe()
    if err != nil {
        log.Fatal(err)
    }
}

type myHandler struct{}

func (*myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    if h, ok := mux[r.URL.String()]; ok { //map   ,         ,   ,  ,ok=true
        h(w, r)
        return
    }
}
func sayHello(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Hello,this is version 3!"))
}
func sayBye(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("Bye,this is version 4!"))
}

go run test.go 브 라 우 저 접근:http://localhost:8090/hello돌아 가기:안녕하세요,버 전 3 입 니 다!브 라 우 저 접근:http://localhost:8090/bye돌아 가기:Bye,this is version 4!

좋은 웹페이지 즐겨찾기