我正在尝试创建一个GoLang http.HandleFunc(),它将侦听post请求并解析json文件。处理程序似乎在启动时失败并返回错误:
2017/01/24 13:35:08 listen tcp:8080:bind:每个只使用一次 通常允许套接字地址(协议/网络地址/端口)。
我假设这是一个致命的错误。
以下是我的功能:
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))
如何让此Handler工作而不会出现错误?
答案 0 :(得分:0)
我已经纠正了您的代码中的一些问题,并对丢失的信息做出了最佳猜测。以下是示例工作代码,它将接受具有" name"的消息。和"文字"字段:
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))
}