Я нахожусь в процессе создания функции запроса HTTP POST в Go, которая будет принимать различные типы данных через параметр, но я застрял при назначении значения из оператора switch переменной requestData.
В идеале, requestData будетиметь тип nil, пока мы не перейдем к оператору switch, а затем присвоим ему значение и тип.Любая помощь приветствуется:)
Сообщение об ошибке в requestData: «синтаксическая ошибка: непредвиденный тип, ожидаемый тип»
Мой код:
main() {
..
// CASE 1: we are passing the form of url.Values type
form := url.Values{}
form.Add("note", "john2424")
form.Add("http", "clear")
response := POST("www.google.co.uk", client, form) // first POST request
// CASE 2: we are passing the JSON data using []byte type
jsonData := []byte(`{"ids":[12345]}`)
response := POST("www.google.co.uk", client, jsonData) // second POST request
}
func POST(website string, client *http.Client, data interface{}) (bodyString string) {
var requestData type // <<<<<<< Change requestData to a variable from switch case
switch data.(type) { // switch case based on type
case url.Values: // URL form data
formattedData := data.(url.Values) // convert interface to url.Values
requestData := strings.NewReader(formattedData.Encode()) // *Reader type
case []byte: // JSON
formattedData := data.([]byte) // convert interface to []byte
requestData := bytes.NewBuffer(formattedData) // *Buffer type
default: // anything else
}
request, err := http.NewRequest("POST", website, requestData)
if err != nil {
log.Fatal(err)
}
response, err := client.Do(request)
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Fatal(err)
} else {
bodyString = string(body)
}
return
}