類型轉換有哪些需要注意的地方

類型轉換的語法:T(x)。

其中T叫做目標類型,x叫做源值,可以是一個變量,也可以是一個代表值的常量,還可以是一個單值的表達式。x的類型叫做源類型。

Go語言規範中規定了哪些從源類型到目標類型的轉換是合法的,編譯器會幫我們檢查出這些不合法的錯誤轉換,這些我們不需要關心。我們需要關心的是那些Go語言編譯器很難檢測出來的問題。

  • 對於整數類型值,整數長廊之間的類型轉換,原則上只要源值在目標類型的可表示範圍內就是合法的。

舉個栗子:把無類型的常量255轉換成uint8類型的值。

uint8(255)
  • 需要特別注意的是,源整數類型的可表示範圍較大,而目標類型的可表示範圍較小的情況。

舉個栗子:

var srcInt = int16(-255)
dsInt := int8(srcInt)

dsInt 的值現在變成了 1

  • 當把一個浮點數類型的值轉換爲整數類型時,前者的小數部分會被全部截掉。

  • 直接把一個整數值轉換爲一個string類型的值是可行的,但是需要注意:被轉換的整數值應該可以代表一個有效的Unicode代碼點,否則轉換的結果將會是"�"(僅由高亮的問號組成的字符串值)。

例如:

string(-1)
  • string類型和各種切片類型之間互轉時需要注意:一個string類型向[]byte類型轉換時,代表着以UTF-8編碼的字符串會被拆分成零散的獨立的字節。

舉例子

fmt.Println(len("我"))

結果是3。 Unicode字符集中除了ASCII之外的部分,編碼時3個字節才能表示一個字符。

  • 一個值從string類型向[]rune類型轉換時,代表着字符串會被拆分成一個個Unicode字符。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章