0
点赞
收藏
分享

微信扫一扫

#yyds干货盘点#【愚公系列】2022年08月 Go教学课程 012-强制类型转换

前言

go语言中分为类型转换(type conversion)、类型断言(type assertion)和指针类型转换。

一、类型断言

package main
import "fmt"
func main() {
    var a interface{} =10
    t,ok:= a.(int)
    if ok{
        fmt.Println("int",t)
    }
    t2,ok:= a.(float32)
    if ok{
        fmt.Println("float32",t2)
    }
}

在这里插入图片描述
可见自动推断 a 是 int 类型。

二、类型转换

类型转换属于一种类型的变量转换为另外一种数据类型的变量。

package main
import "fmt"
func main() {
    var a float32 = 5.6
    var b int = 10
    fmt.Println (a * float32(b))
}

在这里插入图片描述
代码段中的 float32(b) 就是第二种强制类型转换, 普通变量类型int,float,string 都可以使用 type (a)这种形式来进行强制类型转换。

这种类型转换是通过构造类的构造方法创建一个新类型对象。

三、指针类型转换

package main
import "unsafe"
import "fmt"
func main() {
    var a int =10
    var b *int =&a
    var c *int64 = (*int64)(unsafe.Pointer(b))
    fmt.Println(*c)
}

在这里插入图片描述

指针的强制类型转换需要用到unsafe包中的函数实现。

总结

golang中的强制类型转换有三种语法形式,分别是 类型断言,类型转换,指针类型转换,语法上类型断言和指针类型转换和Java比较像。

注意点:低类型转换为高类型,保证精度。高类型转换为抵类型会丢失精度。具体的进度请看下面这张表。

类型 名称 长度 零值 说明
bool 布尔类型 1 false 其值不为真即为假,不可以用数字代表true或false
byte 字节型 1 0 uint8别名
rune 字符类型 4 0 专用于存储unicode编码,等价于uint32
int, uint 整型 4或8 0 有符号32位或无符号64位
int8 整型 1 0 -128~ 127,
uint8 整型 1 0 0~ 255
int16 整型 2 0 -32768 ~ 32767,
uint16 整型 2 0 0 ~ 65535
int32 整型 4 0 -2147483648到2147483647
uint32 整型 4 0 0到4294967295(42亿)
int64 整型 8 0 -9223372036854775808到9223372036854775807
uint64 整型 8 0 0到18446744073709551615 ( 1844京)
float32 浮点型 4 0.0 小数位精确到7位
float64 浮点型 8 0.0 小数位精确到15位
complex64 复数类型 8
complex128 复数类型 16 64位实数和虚数
uintptr 整型 4或8 足以存储指针的uint32或uint64整数
strina 字符串 "” utf-8字符串
举报

相关推荐

0 条评论