2017-04-22 186 views
-1

以前,當我運行一個golang文件在CMD中創建一個http服務器時,我關閉了cmd,服務器也關閉了。如何關閉Go http服務器?

但是現在,運行該程序後,cmd允許我輸入另一個命令。我關閉cmd,服務器仍然運行。

D:\Projects\Go\src\middleware>go run middleware.go 
2017/04/22 22:35:37 Start 

D:\Projects\Go\src\middleware> 

問題是什麼?

操作系統:Windows 10創

我的代碼:

package main 

import (
    "log" 
    "net/http" 
) 

func middlewareOne(next http.Handler) http.Handler { 
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
     log.Println("Executing middlewareOne") 
     next.ServeHTTP(w, r) 
     log.Println("Executing middlewareOne again") 
    }) 
} 

func middlewareTwo(next http.Handler) http.Handler { 
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 
     log.Println("Executing middlewareTwo") 
     if r.URL.Path != "/" { 
      return 
     } 
     next.ServeHTTP(w, r) 
     log.Println("Executing middlewareTwo again") 
    }) 
} 

func final(w http.ResponseWriter, r *http.Request) { 
    log.Println("Executing finalHandler") 
    w.Write([]byte("OK")) 
} 

func main() { 
    log.Print("Start") 
    finalHandler := http.HandlerFunc(final) 

    http.Handle("/", middlewareOne(middlewareTwo(finalHandler))) 
    http.ListenAndServe(":3000", nil) 

} 
+3

打印從ListenAndServe返回的錯誤 – JimB

回答

0

請改變你這樣的代碼,看看你得到了什麼錯誤。

err := http.ListenAndServe(":3000", nil) 

if err != nil { 
    panic(err) 
} 

P.S. 看起來您的服務器的舊實例正在運行,因此當您嘗試再次運行它時,它只會失敗。始終檢查錯誤!