不处理net / http golang中的GET

时间:2017-09-05 09:06:17

标签: http go

我试图在golang中关闭处理GET请求。 我只是想处理POST。

有可能吗?

这样做的原因是,每当我转到localhost:8080并多次刷新页面时,我可以看到golang分配的内存越来越多。

这是我的测试代码:

package main

import (
  "fmt"
  "net/http"
  "encoding/json"
)
type test_struct struct {
    Test string 
}
var t test_struct

func handlePOST(rw http.ResponseWriter, req *http.Request) {
    switch req.Method {
    case "POST":
    decoder := json.NewDecoder(req.Body)
    decoder.Decode(&t)
    defer req.Body.Close()
    fmt.Println(t.Test)
    }
}
func main() {
    http.HandleFunc("/", handlePOST)
    http.ListenAndServe(":8080", nil)
}

1 个答案:

答案 0 :(得分:2)

您无法处理GET个请求,Go的HTTP服务器(或者更确切地说是它的http.ServeMux)只允许您在将请求分派给处理程序之前指定路径模式。与HTTP方法相关的路由只能在处理程序级别进行。

请注意,某些外部mux库允许您仅将处理程序注册到特定的HTTP方法,但基于此的决策和路由也会发生在" hidden"这些图书馆的处理程序。

您正在做的是最好的:如果HTTP方法不是您想要处理的方法,或者更好的方法,只需在处理程序中不执行任何操作:发送回http.StatusMethodNotAllowed错误响应:

func myHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != http.MethodPost {
        http.Error(w, "Only POST is allowed", http.StatusMethodNotAllowed)
        return
    }

    var t test_struct // Use local var not global, else it's a data race
    decoder := json.NewDecoder(r.Body)
    if err := decoder.Decode(&t); err != nil {
        fmt.Println("Error decoding:", err)
    }
    fmt.Println(t.Test)
}