关于go:go强制类型转换

39次阅读

共计 1406 个字符,预计需要花费 4 分钟才能阅读完成。

一、介绍

golang 中的类型转换分 强制类型转换 类型断言
一般变量类型 int,float,string 都能够应用 type(a) 这种模式来进行强制类型转换

二、数字的类型转换 int 和 float

1、整数类型 int

func TestInt(t *testing.T) {
    var i int = -1
    var i8 int8 = int8(i)
    var i16 int16 = int16(i)
    var i32 int32 = int32(i)
    var i64 int64 = int64(i)
    t.Log(i, i8, i16, i32, i64) //-1 -1 -1 -1 -1

    var n int = 1111111
    var n8 int8 = int8(n)
    var n16 int16 = int16(n)
    var n32 int32 = int32(n)
    var n64 int64 = int64(n)
    t.Log(n, n8, n16, n32, n64) //1111111 71 -3001 1111111 1111111
}

咱们发现当 在转换 n 的过程中,转成 int8 和 int16 的时候,呈现了谬误,为什么会这样?
在于 int 类型在 mac 上是默认的 64 个 bit,
int8 示意 -128 到 127 之间的整数值(8 个 bit)
int16 示意 -32768 和 32767 之间的整数值 (16 个 bit)
他们之间可能存储的范畴是不雷同的,如果超过了某个类型的范畴就会出错。

2、正整数类型 uint

func TestUint(t *testing.T) {
    var i uint = 1
    var i8 uint8 = uint8(i)
    var i16 uint16 = uint16(i)
    var i32 uint32 = uint32(i)
    var i64 uint64 = uint64(i)
    t.Log(i, i8, i16, i32, i64) //1 1 1 1 1

    var u uint = 1111111
    var u8 uint8 = uint8(u)
    var u16 uint16 = uint16(u)
    var u32 uint32 = uint32(u)
    var u64 uint64 = uint64(u)
    t.Log(u, u8, u16, u32, u64) //1111111 71 62535 1111111 1111111
}

在类型范畴内的数据转换正确,范畴外的转换谬误。

int 和 uint 之间的强制转换

func TestInt2(t *testing.T) {
    var i int = -1
    var i8 uint8 = uint8(i)
    var i16 uint16 = uint16(i)
    var i32 uint32 = uint32(i)
    var i64 uint64 = uint64(i)
    t.Log(i, i8, i16, i32, i64) //-1 255 65535 4294967295 18446744073709551615

    var n int = 1
    var n8 uint8 = uint8(n)
    var n16 uint16 = uint16(n)
    var n32 uint32 = uint32(n)
    var n64 uint64 = uint64(n)
    t.Log(n, n8, n16, n32, n64) //1 1 1 1 1

    var u int = 1111111
    var u8 uint8 = uint8(u)
    var u16 uint16 = uint16(u)
    var u32 uint32 = uint32(u)
    var u64 uint64 = uint64(u)
    t.Log(u, u8, u16, u32, u64) //1111111 71 62535 1111111 1111111
}

咱们发现当每种类型范畴不一样的话,转换不当心还是会有很大的谬误。

正文完
 0