根据switch语句更改变量类型

时间:2018-10-28 14:55:11

标签: variables go interface switch-statement

我正在Go中创建一个POST HTTP请求函数,该函数将通过参数接受不同的数据类型,但是当将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
}

1 个答案:

答案 0 :(得分:0)

将输入的数据放入交换机

typedData:=switch data.(type) {

然后使用该实例进行转换

case []byte: // JSON
        requestData := bytes.NewBuffer(typedData) // *Buffer type

尽管@mkopriva的游乐场示例看起来像是一个更好的主意