json - 如何让 GoLang 的 http.HandleFunc() 正常工作?

标签 json function go handler httplistener

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

2017/01/24 13:35:08 listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

我假设它抛出了一个 fatal error 。

下面是我的函数:

 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 正常工作而不出现错误?

最佳答案

我已经解决了您的代码中的几个问题,并对丢失的信息做出了最佳猜测。以下是示例工作代码,它将接受具有“名称”和“文本”字段的消息:

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

关于json - 如何让 GoLang 的 http.HandleFunc() 正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836655/

相关文章:

amazon-web-services - 有没有办法确定在编译期间从 go 模块调用了哪些函数?

python - 在 Python/Django 中反序列化 JSON 日期字段

ruby-on-rails - rails 3.2 : Replace null values with empty string from json serialization

json - 从带有多个对象的 JSON 文件批量加载 MongoDB

C - 如何从数组中提取偶数并将它们放入另一个名为 EvenNumbers 的数组中?

python - 更新成对 Pandas df中的值

arrays - 将多个返回函数分配给容器(列表)

go - 为什么 post 请求在 gin golang 中不起作用?

go - 在 Go 中递归选择子项的有效方法?

wcf - 使用 jQuery 访问 JSON WCF 服务时未找到 404