【愚公系列】2022年07月 Go教学课程 012-强制类型转换

举报
愚公搬代码 发表于 2022/07/31 00:04:50 2022/07/31
【摘要】 前言go语言中分为类型转换(type conversion)、类型断言(type assertion)和指针类型转换。 一、类型断言package mainimport "fmt"func main() { var a interface{} =10 t,ok:= a.(int) if ok{ fmt.Println("int",t) } t2,ok:= a.(float32) if o...

前言

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字符串
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。