Json 如何获得GoLang';s http.HandleFunc()是否可以正常工作?
我正在尝试创建一个GoLang http.HandleFunc(),它将侦听post请求并解析json文件。处理程序在启动时似乎失败并返回错误: 2017/01/24 13:35:08收听tcp:8080:bind:每个只使用一次 通常允许使用套接字地址(协议/网络地址/端口) 我认为这是一个致命的错误 以下是我的职责:Json 如何获得GoLang';s http.HandleFunc()是否可以正常工作?,json,function,go,handler,httplistener,Json,Function,Go,Handler,Httplistener,我正在尝试创建一个GoLang http.HandleFunc(),它将侦听post请求并解析json文件。处理程序在启动时似乎失败并返回错误: 2017/01/24 13:35:08收听tcp:8080:bind:每个只使用一次 通常允许使用套接字地址(协议/网络地址/端口) 我认为这是一个致命的错误 以下是我的职责: http.HandleFunc("/", func(w http.ResponseWriter, request *http.Request) { //de
http.HandleFunc("/", func(w http.ResponseWriter, request *http.Request) {
//debug
fmt.Fprintf(w, "Hello, %q", html.EscapeString(request.URL.Path))
var m Message
if request.Body == nil {
http.Error(w, "Please send a request body", 400)
return
}
err := json.NewDecoder(request.Body).Decode(&m)
if err != nil {
http.Error(w, err.Error(), 400)
return
}
})
log.Fatal(http.ListenAndServe(":8080", nil))
如何使此处理程序正常工作而不出错?我已修复了代码中的几个问题,并对丢失的信息进行了最佳猜测。下面是示例工作代码,它将接受包含“name”和“text”字段的消息:
你的代码片段没有任何意义;为什么会有一个
延迟res.Body.Close()
调用“中间无处”?此错误表示端口上已经有另一个进程或线程在侦听。您的计算机上是否有另一个程序用于端口8080
?@TimCooper我不确定它应该放在哪里?有什么建议吗?@jordanliewis我运行netstat-nctcp |查找“8080”,但什么也没有得到,我找到了答案。处理程序在Windows上继续作为进程运行,直到您关闭Eclipse或终止该进程。完成此操作后,可以无错误地运行处理程序。如何让处理程序在代码中停止以进行测试?我找不到太多的区别。我看到您添加了main函数和struct,我已经添加了。我只是显示处理程序的功能和日志,而不是我的全部代码。我完成了代码,这样我就可以运行它并验证它是否有效——这些信息可能会让我提出一个更好的问题。好的,谢谢。请让我知道你是否得到了错误。我没有得到错误,正如上面的评论所指出的,你必须有一个进程挂在该端口上。
package main
import (
"encoding/json"
"fmt"
"html"
"log"
"net/http"
)
type Message struct {
Name string `json:"name"`
Text string `json:"text"`
}
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, request *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(request.URL.Path))
var m Message
if request.Body == nil {
http.Error(w, "Please send a request body", 400)
return
}
err := json.NewDecoder(request.Body).Decode(&m)
if err != nil {
http.Error(w, err.Error(), 400)
return
}
log.Println(m)
})
log.Fatal(http.ListenAndServe(":8080", nil))
}