go数据类型的转换
前言:
Go语言同其他语言不同,不存在隐式类型转换,
因此所有的类型转换都必须显式的声明。go在类型转换方面还是有点乱的。
正文:
整型之间的相互转换
转换方式: newNum := type(oldNum) 示例: newNum := int8(num) 转换为 int8
只能小的往大的数据类型转换,
大的数据类型转换成小的,会出现值不对的情况
int8 最大值为 127
int16 最大值为 32767
int32 最大值为 2147483647
int64 最大值为 9223372036854775807
示例:
fmt.Println(math.MaxInt8,math.MaxInt16) //输出 127 32767
fmt.Println(math.MaxInt32,math.MaxInt64) //输出 2147483647 9223372036854775807
var num int16 = 500
fmt.Printf("%T\n", num) // 输出 int16
newNum := int8(num) //转换为 int8
fmt.Println(newNum) //输出 -12
可以看到,int16转换为int8 值变成了-12
整型转换为浮点型:float32() 或 float64()
转换方式:newNum := float32(num)
num := 33
fmt.Printf("%T", num) //输出 int
newNum := float32(num) //转换为float32
fmt.Printf("%T", newNum) //输出 float32
fmt.Println(newNum) //输出 33
整型转换为字符串
方式1: 通过 string()转换,不推荐
方式2:通过strconv.Itoa(num) 推荐
示例1:使用 string()方式
num := 65
fmt.Printf("%T", num) //输出int
newNum := string(num) //转换为string
fmt.Println(newNum) //输出 A 65对应的ASCII码表的字母是A
使用string方式转换后,并不是把数字 65转换成为字符串 65,
而是把 数字65转换成了字符A ,所以不推荐
示例2:使用strconv.Itoa 方式
num := 22
fmt.Printf("%T\n", num) //输出int
str := strconv.Itoa(num) //转换为string
fmt.Printf("%T", str) //输出string 类型
fmt.Println(str) //输出22 但是是字符串类型
字符串转整型:
使用 strconv.Atoi
示例:
str := "66"
fmt.Printf("%T,%v \n", str,str) //输出 string,66
num,_ := strconv.Atoi(str)
fmt.Printf("%T,%v \n", num,num) //输出 int,66
浮点转字符串
使用 strconv.FormatFloat(num, 'f', 5, 64) 方式
示例:
num := 2.5123123
str := strconv.FormatFloat(num, 'f', 5, 64) //转换为float64,保留5位小数
fmt.Printf("%s , %T \n", str) //输出2.51231 string
字符串转为布尔类型
使用方式:strconv.ParseBool
1, t, T, TRUE, true, True, 可以转换成true
0, f, F, FALSE, false, False 可以转换为false
示例:
str := "T"
bo, _ := strconv.ParseBool(str) //字符串转换为布尔
fmt.Println(bo) //输出true
fmt.Printf("%T", bo) //输出bool
数字转布尔
数字是不能直接转换为布尔的,需要先转换为字符串,再转换为布尔。
具体原因就是 ParseBool 函数的参数只接受string类型。
示例:
num := 1
str := strconv.Itoa(num) //转换为数字
bo, _ := strconv.ParseBool(str) //转换为布尔值
fmt.Println(bo) //输出true
fmt.Printf("%T", bo) //输出bool
完结
但行好事,莫问前程!
本文来自博客园,作者:yangphp,转载请注明原文链接:https://www.cnblogs.com/ypeih/p/17270455.html