http服务器启动时有什么方法可以打印一些东西吗?例如"Server is started at port 8080"
在Node中(使用Express),它会像这样:
app.listen(8080, function() { console.log('Server started at port 8080') });
这是我的代码:
func main() {
http.HandleFunc("/", MyHandler)
http.ListenAndServe(":8080", nil)
}
谢谢.
4条答案
按热度按时间p4rjhz4m1#
你不能在
ListenAndServe
之后打印日志消息,因为它会阻塞并且永远不会返回,所以基本上你有两个主要的选择:1.打印“Starting server on port....”,就是这样-但是如果
ListenAndServe
不能启动,它会返回一个错误,所以除非有一些错误或恐慌打印,因为这一点,你可以假设服务器启动。1.在一个单独的goroutine中调用
ListenAndServe
,确保没有返回错误,并打印“Server started...”等。我个人更喜欢第一种方法。
qoefvg9y2#
要像Not_a_Golfer提到的那样在goroutine中运行
ListenAndServe
,可以使用一个无缓冲的阻塞通道在goroutine中运行它,同时保持服务器的活动状态。下面的示例创建了一个名为
done
的通道,其中<-done
将在等待goroutine完成时保持服务器活动,而在本例中它不会完成。通常,goroutine会通过执行done <- true
来告诉main函数它已经完成。下面是一个更大的示例,它让服务器分别使用
Listen
和Serve
来验证它是否可以运行。这样做的好处是您可以轻松捕获错误的端口。u91tlkcl3#
或者在goroutine中运行log命令:
elcex8rz4#
使用Go的log包:
http.ListenAndServe
打开服务器端口,并永久阻止等待客户端。如果无法打开端口,log.Fatal
调用将报告问题并退出程序。