类型转换
golang不同类型之间的转换只能进行显式转换(强制转换)
表达式:
T(v)
转换以后不会改变原来变量的值 只是对原来变量的值新建了一个新的变量
1 2 3
| var s1 string = "hello" var s2 int = int(s1[0]) fmt.Println(s2)
|
将大类型转换为小类型时会数据溢出
1 2 3
| var n1 int64 = 888888 var n2 int8 = int8(n1) fmt.Println(n2)
|
如果转换后增加的值在当前赋值的范围内,则会数据溢出
如果转换前增加的值在当前赋值的范围外,则直接报内存溢出错误 不会编译
1 2 3 4
| var n1 int64 = 888888 var n2 int8 = int8(n1) + 127 fmt.Println(n2) var n3 int8 = int8(n1) + 128
|
基本数据类型和string类型之间的转换
方式一 使用fmt.Sprintf(format string,a ...interface{}) string
进行格式化,第一个参数差对照表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var n1 int = 10 var str1 string = fmt.Sprintf("%d",n1) fmt.Printf("str1的类型为:%T,str1 = %q\n",str1,str1)
var n2 float64 = 3.14 var str2 string = fmt.Sprintf("%f",n2) fmt.Printf("str2的类型为:%T,str2 = %q\n",str2,str2)
var b3 byte = 'a' var str3 string = fmt.Sprintf("%c",b3) fmt.Printf("str3的类型为:%T,str3 = %q\n",str3,str3)
var b4 bool = true var str4 string = fmt.Sprintf("%t",b4) fmt.Printf("str4的类型为:%T,str4 = %q\n",str4,str4)
|
方式二 使用strconv
包的函数
比第一种方式更复杂一些
1 2 3 4 5 6 7 8 9 10 11
| var n1 int = 10 var s1 string = strconv.FormatInt(int64(n1),10) fmt.Printf("s1的类型是:%T,s1 = %q\n",s1,s1)
var n2 float64 = 3.1415926 var s2 string = strconv.FormatFloat(n2,'f',6,64) fmt.Printf("s2的类型是:%T,s2 = %q\n",s2,s2)
var n3 bool = true var s3 string = strconv.FormatBool(n3) fmt.Printf("s3的类型是否:%T,s3 = %q\n",s3,s3)
|
string类型转换为基本数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| var s2 string = "true" var n2 bool n2 , _ = strconv.ParseBool(s2) fmt.Printf("n2的类型时:%T,n2的値:%v \n",n2,n2)
var s1 string = "123" var n1 int64 n1 , _ = strconv.ParseInt(s1,10,64) fmt.Printf("n1的类型时:%T,n1的値:%v \n",n1,n1)
var s3 string = "3.14" var n3 float64 n3,_ = strconv.ParseFloat(s3,64) fmt.Printf("n3的类型时:%T,n3的値:%v \n",n3,n3)
var s4 string = "hello" var n4 int64 n4,_ = strconv.ParseInt(s4,10,64) fmt.Printf("n4的类型时:%T,n4的値:%v \n",n4,n4)
|