我如何才能將空介面的型別切換到 int64
var vari interface{}
vari = 7466
switch v := vari.(type) {
case int64:
fmt.Println("integer", v)
default:
fmt.Println("unknown")
}
這列印未知。如果我為 int 而不是 int64 這樣做,它作業正常(列印“整數 7466”)。我怎樣才能得到 int64?
uj5u.com熱心網友回復:
文字7466是一個無型別常量,在這種情況下,它被解釋為int,而不是int64。因此,要么測驗 的情況int,要么執行:
vari = int64(7466)
這是因為int和int64是不同的型別。
uj5u.com熱心網友回復:
這里有兩種情況需要考慮:
您絕對知道分配給介面的值具有某種已知的整數型別。例子:
var vari interface{} vari = 7466 // could be int64|32|16|8(7466) v, ok := vari.(int) // or int64|32|16|8 if !ok { fmt.Println("unknown") return 0 } return int64(v)你不知道介面中值的型別是什么。反射包可能會幫助你。操場
func getInt64(v interface{}) (int64, error) { switch reflect.TypeOf(v).Kind() { case reflect.Int8: d, _ := v.(int8) return int64(d), nil case reflect.Int16: d, _ := v.(int16) return int64(d), nil case reflect.Int32: d, _ := v.(int32) return int64(d), nil case reflect.Int64: d, _ := v.(int64) return d, nil case reflect.Int: d, _ := v.(int) return int64(d), nil // ... tackle uint if needed } return 0, fmt.Errorf("not interger: %v", v) }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/393692.html
上一篇:兩個gob編碼器產生不同的結果
