4

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

 2 years ago
source link: https://blog.51cto.com/u_15437432/5576246
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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)
	}
}
#yyds干货盘点#【愚公系列】2022年08月 Go教学课程 012-强制类型转换_整型

可见自动推断 a 是 int 类型。

二、类型转换

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

package main
import "fmt"
func main() {
	var a float32 = 5.6
	var b int = 10
	fmt.Println (a * float32(b))
}
#yyds干货盘点#【愚公系列】2022年08月 Go教学课程 012-强制类型转换_强制类型转换_02

代码段中的 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)
}
#yyds干货盘点#【愚公系列】2022年08月 Go教学课程 012-强制类型转换_强制类型转换_03

指针的强制类型转换需要用到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字符串

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK