8.30Go之資料型別轉換
阿新 • • 發佈:2021-08-30
Go語言當中的型別轉換
特點:
Go語言不存在隱式型別轉換,所有的型別轉換都必須顯式的宣告:
valueOfTypeB = typeB(valueOfTypeA)
/*
型別 B 的值 = 型別 B(型別 A 的值)
*/
Go語言當中資料型別轉換的一些特性
-
只能在定義正確的情況下轉換成功。例如:從一個取值範圍較小的型別轉換到一個取值範圍較大的型別
-
從一個取值範圍較大的型別轉換到取值範圍較小的型別時(將 int32 轉換為 int16 或將 float32 轉換為 int),會發生精度丟失(截斷)的情況。--->不會失敗,會丟失精度
-
-
有相同底層型別的變數之間可以進行相互轉換(如將 int16 型別轉換成 int32 型別),不同底層型別的變數相互轉換時會引發編譯錯誤(如將 bool 型別轉換為 int 型別)
底層型別相同指的是值型別,值型別可以向引用型別轉型。例如:將一串int轉成string型別
示例:
package main
import (
"fmt"
"math"
)
func main() {
/*列印資料型別的最大最小值*/
fmt.Println("int8 range is:", math.MinInt8, math.MaxInt8)
/*宣告一個int32整數型*/
var num int32 = 1047483647
//格式化輸出變數的16進位制形式和10進位制形式
fmt.Printf("int32: 0x%x %d\n", num, num)
/*數值轉型為int16*/
num2 := int16(num)
fmt.Printf("int16: 0x%x %d\n", num2, num2)
/*
上下兩次列印的結果上看發生了精度丟失
*/
/*宣告一個float變數*/
var num3 float32 = math.Pi //圓周率
fmt.Println(int(num3)) //精度丟失,小數點後的數全部丟失
/*
浮點數在轉換為整型時,會將小數部分去掉,只保留整數部分。
*/
}
fmt.Printf
的%x
動詞將數值以十六進位制格式輸出,輸出 num 在轉換前的 32 位的值。
It's a lonely road!!!