随心的博客

好记性不如个烂笔头,随心记录!

返回顶部

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

完结

posted @ 2023-03-29 21:37  yangphp  阅读(83)  评论(0编辑  收藏  举报