Json 如何获得GoLang';s http.HandleFunc()是否可以正常工作?

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

我正在尝试创建一个GoLang http.HandleFunc(),它将侦听post请求并解析json文件。处理程序在启动时似乎失败并返回错误:

2017/01/24 13:35:08收听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))

如何使此处理程序正常工作而不出错?

我已修复了代码中的几个问题,并对丢失的信息进行了最佳猜测。下面是示例工作代码,它将接受包含“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))
}