亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用反射確定類型是否為字符串

使用反射確定類型是否為字符串

Go
米琪卡哇伊 2023-05-22 15:48:32
關于如何在運行時確定對象類型的一些現有答案..god help usif reflect.TypeOf(err) ==  string { }那不編譯if reflect.TypeOf(err) ==  "string" { }那個或這個都沒有:if reflect.TypeOf(err).Kind() ==  "string" { }我們如何做到這一點?如果我使用其中一個答案給出的 typeof 函數,我會得到:
查看完整描述

2 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

比較像字符串


if reflect.TypeOf(err).String() == "string" {

    fmt.Println("hello")

}

或者使用類型斷言


type F = func()


func typeof(v interface{}) string {

    switch v.(type) {

    case int:

        return "int"

    case string:

        return "string"

    case F:

        return "F"

    //... etc

    default:

        return "unknown"

    }

}

然后


var f F

if typeof(f) == "F"{

    fmt.Println("hello F")

}


查看完整回答
反對 回復 2023-05-22
?
MM們

TA貢獻1886條經驗 獲得超2個贊

要使用反射比較類型,請比較 reflect.Type 值:


var stringType = reflect.TypeOf("") // this can be declared at package-level


if reflect.TypeOf(v) == stringType {

    // v has type string

}

給定一個任意類型名稱X,您可以使用以下方法構造該類型:


var xType = reflect.TypeOf((*X)(nil)).Elem()


if reflect.TypeOf(v) == xType {

    // v has type X

}

如果你想檢查一個值是否是某種類型,那么使用類型斷言:


if _, ok := v.(string); ok {

   // v is a string

}

如果要將類型映射到字符串,請使用由 reflect.Type 鍵入的映射:


var typeName = map[reflect.Type]string{

    reflect.TypeOf((*int)(nil)).Elem():    "int",

    reflect.TypeOf((*string)(nil)).Elem(): "string",

    reflect.TypeOf((*F)(nil)).Elem():      "F",

}


...


if n, ok := typeName[reflect.TypeOf(f)]; ok {

    fmt.Println(n)

} else {

    fmt.Println("other")

}


查看完整回答
反對 回復 2023-05-22
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號