Go類型轉(zhuǎn)換和斷言總結(jié)

普通類型轉(zhuǎn)換

將類型名作為函數(shù)名,被轉(zhuǎn)換的值作為參數(shù)。使用于跨度小的轉(zhuǎn)換。

//[]byte和string的轉(zhuǎn)換
b := []byte{'a','b','c'}
str := string(b)
b = []byte(str)

//int int64 int32的轉(zhuǎn)換
var x int = 0x123456789
y := int32(a)
z := int64(a)
x = int(y)

string和int

int => string

//int => string
d := 12345
s := strconv.Itoa(d)

//int64 => string
var d64 int64 = 12345
s := strconv.FormatInt(d64, 10) //第二個(gè)參數(shù)是進(jìn)制

//沒有int32 轉(zhuǎn) string的,不過可以先把int32轉(zhuǎn)成int64
var d32 int32 = 12345
s = strconv.FormatInt(int64(d32), 10)

string => int

//string => int
s := "12345"
d := strconv.Atoi(s)

//string => int64
d64,err := strconv.ParseInt(s, 10, 64)
//參數(shù)2是進(jìn)制,參數(shù)1是必須滿足的int類型:0對(duì)應(yīng)int 8對(duì)應(yīng)int8 32對(duì)應(yīng)int32依次類推
//返回值是int64

strconv.ParseInt("123", 16, 8) 會(huì)報(bào)錯(cuò),因?yàn)橐鬂M足int8,所以16進(jìn)制的數(shù)最多只能給2位

string和float

float64轉(zhuǎn)字符串

var f64 float64 = 1232323232.3456323232
strconv.FormatFloat(f64, 'f', 3, 64)

參數(shù)含義分別為:格式,保留小數(shù)位數(shù),滿足的類型(32或64)

第二個(gè)參數(shù)(格式)限定為:b e E f g G 中的一個(gè) 分別對(duì)應(yīng)不同的格式。格式和結(jié)果對(duì)應(yīng)如下:

  • b 5168738262720215p-22
  • e 1.232e+09
  • E 1.232E+09
  • f 1232323232.346 有四舍五入
  • g 1.23e+09
  • G 1.23E+09

string轉(zhuǎn)float

s := "12345.6789"
strconv.ParseFloat(s, 64)
//第二個(gè)參數(shù)只要滿足的類型float32 或 float64

interface的處理

以面向?qū)ο蟮乃季S來看,幾乎所有的類型都可以理解成interface的子類。然而要調(diào)用子類方法時(shí)必須將interface轉(zhuǎn)換為特定子類。

interface的類型轉(zhuǎn)換方式較為特殊

var a interface{} = "xxxxx"
s := a.(string) //轉(zhuǎn)換成字符串

直接斷言,如果失敗會(huì)報(bào)panic錯(cuò)誤

var a interface{} = "xxxxx"
s := a.(int)//會(huì)報(bào)panic錯(cuò)誤

因此斷言前可以添加判斷

var i interface{} = "ssss"
str, ok := i.(int)
if !ok {
    fmt.Println("is not int")
} else {
    fmt.Println(str)
}

與switch結(jié)合

var i interface{} = "sssss"
switch i.(type){
    case "int":
        fmt.Println("it's int")
    case "string":
        fmt.Println("it's string")
    default:
        fmt.Println("unknown type")
    }
}

變量.(type)可以直接反射出變量的類型。并且只能和switch結(jié)合使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容