Go 是一種強類型的語言,所以如果在賦值的時候兩邊類型不一致會報錯。一個類型的值可以被轉換成另一種類型的值。由于 Go 語言不存在隱式類型轉換,因此所有的類型轉換都必須顯式的聲明。
強制類型轉換語法
使用?type (a)
?這種形式來進行強制類型轉換,比如:
var a int32 = 10
var b int64 = int64(a)
通過在變量前面添加指定類型,就可以進行強制類型轉換。
注意事項
高位轉低位的時候,需要注意,會存在精度丟失。比如上述 16 轉 8 位的時候,就丟失了:
var n1 int16 = 130
fmt.Println(int8(n1)) // 變成 -126
其他常用類型轉換
string 轉成 int
int, err := strconv.Atoi(string)
int 轉成 string
string := strconv.Itoa(int)
string 轉成 int64
int64, err := strconv.ParseInt(string, 10, 64)
int64 轉成 string
string := strconv.FormatInt(int64, 10)
float 轉 string
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
比如:
package mainimport ("fmt""strconv"
)func main() {num := 250.56str := strconv.FormatFloat(num, 'f', 4, 64)fmt.Printf("type:%T value:%#v\n", str, str)
}
輸出:
type:string value:"250.5600"
類型轉換的規則
類型轉換只能在定義正確的情況下轉換成功,例如從一個取值范圍較小的類型轉換到一個取值范圍較大的類型(將?int16
?轉換為?int32
)。
當從一個取值范圍較大的類型轉換到取值范圍較小的類型時(將?int32
?轉換為?int16
?或將?float32
?轉換為?int
),會發生精度丟失(截斷)的情況。浮點數在轉換為整型時,會將小數部分去掉,只保留整數部分。