如何让GoLang的http.HandleFunc()无误地工作?

时间:2017-01-24 18:46:31

标签: json function go handler httplistener

我正在尝试创建一个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工作而不会出现错误?

1 个答案:

答案 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))
}