1. 程式人生 > 其它 >8.30Go之資料型別轉換

8.30Go之資料型別轉換

8.30Go之資料型別轉換

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!!!