Golang - 发送 API POST 请求 - 参数不足错误

Golang - Sending API POST Request - Not enough arguments error

以下代码尝试发送 POST API 请求,其中的有效负载位于 RequestDetails.FormData 中。当我 运行 main.go 函数时,出现以下错误。

go run main.go
# command-line-arguments
./main.go:53:17: not enough arguments in call to http.HandleFunc
./main.go:53:33: not enough arguments in call to reqDetails.Send
        have ()
        want (http.ResponseWriter, *http.Request)
./main.go:53:33: reqDetails.Send() used as value

代码如下。有人知道我在这里做错了什么吗?非常感谢您的帮助。

//main.go

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

// RequestDetails contains input data for Send
type RequestDetails struct {
    EndPoint string
    FormType string
    FormData map[string]string
}

// Send sends API POST request to an endpoint
func (rd RequestDetails) Send(w http.ResponseWriter, r *http.Request) {

    json_data, err := json.Marshal(rd.FormData)

    if err != nil {
        log.Fatal(err)
    }

    resp, err := http.Post(rd.EndPoint, rd.FormType, bytes.NewBuffer(json_data))

    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(resp)

}

func main() {
    m := map[string]string{
        "AuthParamOne":   "AP0000001",
        "AuthParamTwo":   "AP0000002",
        "AuthParamThree": "AP0000003",
    }

    reqDetails := RequestDetails{
        EndPoint: "https://httpbin.org/post",
        FormType: "application/json",
        FormData: m,
    }

    http.HandleFunc(reqDetails.Send())
}

你必须在下面使用 HandleFunc:

func HandleFunc(pattern string, handler func(ResponseWriter, *Request))

对于上面的代码,请遵循:

http.HandleFunc("/test",reqDetails.Send) //-> add reference instead of calling 'reqDetails.Send()'

参考:https://pkg.go.dev/net/http#HandleFunc

请投票:)

在您的 Send 方法中,您没有使用 w http.ResponseWriter、r *http.Request,所以您似乎不需要它们:

func (rd RequestDetails) Send() {...

同样在您的最后一行中,HandleFunc 需要不同的参数,这在您的情况下再次没有必要。只需尝试 运行 发送方法:

reqDetails.Send()

整个main.go文件:

//main.go

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

// RequestDetails contains input data for Send
type RequestDetails struct {
    EndPoint string
    FormType string
    FormData map[string]string
}

// Send sends API POST request to an endpoint
func (rd RequestDetails) Send() {

    json_data, err := json.Marshal(rd.FormData)

    if err != nil {
        log.Fatal(err)
    }

    resp, err := http.Post(rd.EndPoint, rd.FormType, bytes.NewBuffer(json_data))

    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(resp)

}

func main() {
    m := map[string]string{
        "AuthParamOne":   "AP0000001",
        "AuthParamTwo":   "AP0000002",
        "AuthParamThree": "AP0000003",
    }

    reqDetails := RequestDetails{
        EndPoint: "https://httpbin.org/post",
        FormType: "application/json",
        FormData: m,
    }

    reqDetails.Send()
}