Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不处理GET in net/http golang_Http_Go - Fatal编程技术网

不处理GET in net/http golang

不处理GET in net/http golang,http,go,Http,Go,我正在尝试关闭处理golang中的GET请求。 我只是想处理这个职位 有可能吗 这样做的原因是,每当我转到localhost:8080并多次刷新页面时,我都可以看到golang分配了越来越多的内存 以下是我的测试代码: package main import ( "fmt" "net/http" "encoding/json" ) type test_struct struct { Test string } var t test_struct func handleP

我正在尝试关闭处理golang中的GET请求。 我只是想处理这个职位

有可能吗

这样做的原因是,每当我转到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)
}

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

请注意,某些外部mux库只允许将处理程序注册到特定的HTTP方法,但基于此的决策和路由也会发生在这些库的“隐藏”处理程序中

您所做的是最好的:如果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)
}

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

请注意,某些外部mux库只允许将处理程序注册到特定的HTTP方法,但基于此的决策和路由也会发生在这些库的“隐藏”处理程序中

您所做的是最好的:如果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)
}

那么问题出在哪里呢?我可以看到Golang处理GET请求,即使函数没有定义这样做。每当我进入程序的端口时,我都能看到内存被分配,这增加了内存的使用。我希望避免这种行为。“我可以看到内存被分配,这会增加内存使用量”,可能不会。很难找到泄漏的内存。查看过程监视器或顶部没有帮助。那么问题出在哪里呢?默认情况下,所有类型的请求都在http.HandleFunc(“/”,handlePOST)中处理。我能用简单的方法把它关掉吗?@Mac不,你不能。您正在做的是最好的方法:如果HTTP方法不是
POST
,则不在处理程序中执行任何操作。那么问题出在哪里?我可以看到Golang处理GET请求,即使函数没有定义这样做。每当我进入程序的端口时,我都能看到内存被分配,这增加了内存的使用。我希望避免这种行为。“我可以看到内存被分配,这会增加内存使用量”,可能不会。很难找到泄漏的内存。查看过程监视器或顶部没有帮助。那么问题出在哪里呢?默认情况下,所有类型的请求都在http.HandleFunc(“/”,handlePOST)中处理。我能用简单的方法把它关掉吗?@Mac不,你不能。您所做的是最好的方法:如果HTTP方法不是
POST
,则不在处理程序中执行任何操作。