2017-04-22 182 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. 看起来您的服务器的旧实例正在运行,因此当您尝试再次运行它时,它只会失败。始终检查错误!