V1
1 パッケージメイン 2 3 インポート( 4 " ログイン" 5 " ネット/ HTTP " 6 ) 7 8 FUNCメイン(){//根路由 9 http.HandleFunc(" / " http.ResponseWriter、R * W、FUNC(HTTP。リクエスト){ 10 w.Write([]バイト(" こんにちは、これはバージョン1である"))// 字符串转换成字节 11 }) 12 http.HandleFunc(" / BYE " 、sayBye) 13 14 ログ。 println(" ... V1サーバーの起動" //)ログの印刷 15 log.Fatal(http.ListenAndServe(" 400 "、ゼロ))// 一般的に行われていない 16 } 17 18はある FUNC sayBye(W http.ResponseWriter、 * R&LT http.Request){ 19 w.Write([]バイト(" バイバイこのバージョン1は、IS " )) 20です }
結果
V2
パッケージメイン インポート( " ログ" " ネット/ HTTP " ) 、メインFUNC(){ MUX: = http.NewServeMux() mux.Handle(" / "、&はmyHandler {}) mux.HandleFunc(" / BYE " 、sayBye) log.Println(" 起動サーバ... V2 " ) log.Fatal(http.ListenAndServe(" 40 " 、MUX)) } sayBye FUNC(http.ResponseWriter W、R * http.Request){ wです。(([]バイトを書きます"バイバイこれはバージョン2です!" )) } はmyHandler構造体を入力し、{} FUNC( *はmyHandler)ServeHTTP(W http.ResponseWriter、R * http.Request){ w.Write([]バイト(" ハローV2、要求URLは:" + r.URL .String())) }
結果
V3
パッケージのメイン インポート( " ログ" " ネット/ HTTP " " OS " " OS /信号" " 時間" ) メインFUNC(){ サーバー: =&http.Server { ADDR: " :40000 " 、 WriteTimeout:time.Second *図2は、 } 終了: = (チャンos.Signal)する signal.Notify(os.Interruptを終了) :MUX = http.NewServeMux() mux.Handle("/"& はmyHandler {}) mux.HandleFunc(" / BYE "sayByeは) (FUNCを行く){ < - 終了し た場合 ERR:= server.Close();誤る=!nilの{ log.Fatal(" 閉じるサーバー:" 、ERR) } }() server.Handler = マルチプレクサ log.Print(" ... V3を、サーバの起動" ) ERR: = server.ListenAndServe() であれば!ERR = nilの{ 場合、ERR == http.ErrServerClosed { log.Print("サーバーは要求の下では閉じ。" ) } 他{ log.Fatalが(" サーバーが予期しない閉鎖" ) } } } sayBye FUNC(http.ResponseWriter W、R * http.Request){ time.Sleep( 3 * 時間.Second) w.Write([]バイト(" バイバイこれはバージョン3である" )) } はmyHandler構造体を入力し、{} FUNC( *はmyHandler)ServeHTTP(W http.ResponseWriter、R * http.Request){ w.Write ([]バイト("こんにちはV3、リクエストURLは次のとおりです。" +r.URL.String())) }
結果
変化に2秒4秒後にタイムアウトを書きます