小编典典

Go语言如何在运行时检查变量类型

go

我很少有这样声明的 C 函数

CURLcode curl_wrapper_easy_setopt_long(CURL* curl, CURLoption option, long param);
CURLcode curl_wrapper_easy_setopt_str(CURL* curl, CURLoption option, char* param);

我想将这些公开为一个像这样的 Go 函数

func (e *Easy)SetOption(option Option, param interface{})

所以我需要能够在运行时检查参数类型。我该怎么做,这是个好主意吗(如果不是这种情况下的好做法)?


阅读 207

收藏
2021-12-15

共1个答案

小编典典

似乎 Go 有专门用于此的特殊形式的开关(称为类型 switch):

func (e *Easy)SetOption(option Option, param interface{}) {

    switch v := param.(type) { 
    default:
        fmt.Printf("unexpected type %T", v)
    case uint64:
        e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(v)))
    case string:
        e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(v)))
    } 
}
2021-12-15