英文:
How do I get GoLang's http.HandleFunc() to work without error?
问题
我正在尝试创建一个GoLang的http.HandleFunc()
函数,用于监听POST请求并解析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.
我猜测这是一个致命错误。
以下是我的函数代码:
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))
请问如何使这个处理程序正常工作,避免出现错误?
英文:
I am trying to create a GoLang http.HandleFunc() that will listen for post requests and parse a json file. The Handler seems to fail as it starts and returns an error:
> 2017/01/24 13:35:08 listen tcp :8080: bind: Only one usage of each
> socket address (protocol/network address/port) is normally permitted.
I am assuming that it is throwing a fatal error.
Below is my function:
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))
How can I get this Handler to work and not get the error?
答案1
得分: 1
我已经修复了你的代码中的一些问题,并根据缺失的信息做出了最佳猜测。以下是一个示例工作代码,它将接受一个具有"name"和"text"字段的消息:
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))
}
希望对你有帮助!
英文:
I've remedied several of the problems with your code and made best guesses around missing information. Here is sample working code that will accept a message that has "name" and "text" fields:
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))
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论