1、go在不同类型的变量之间赋值时需要显示转化(强制转换),
表达式T(v)将值v转换为类型
T:就是数据类型,比如int32,int64,float32等等
v:就是需要转换的变量
var i int = 42
var f float64 =float64(i)
var u uint8 = uint8(f)
fmt.Println(i,f,u)
2、注意事项
1)go中,数据类型的转换可以是从表示范围小->表示范围大,也可以范围大到范围小
2)被转换的是新变量存储的数据,变量本身的数据类型并没有变化
3)在转换中,比如将int64转成int8,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样
因此在转换中,需要考虑范围。
3、基本类型转string类型
1)fmt.Sprintf("%参数", 表达式)
//基本类型转string
var a int =99
var b float64 = 23.345
var c bool = true
var d byte = 'h'
var str string //空字符串
//使用fmt.Sprintf方法
str = fmt.Sprintf("%d",a);
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=99
str = fmt.Sprintf("%f",b);
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=23.345000
str = fmt.Sprintf("%t",c);
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=true
str = fmt.Sprintf("%c",d);
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=h
2)使用strconv包的函数
//使用strconv包的函数
str = strconv.FormatInt(int64(a),10) //第一个参数是int64类型,第二个参数表示几进制显示
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=99
str = strconv.FormatFloat(b,'f',10,64) //第一个参数是变量,第二个参数表示格式,
// f是常规模式,还有科学计数法格式等,第三个参数是小数精度保留几位,第四个参数是代表float64
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=23.3450000000
str = strconv.FormatBool(c)
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=true
str = strconv.FormatInt(int64(d),10)
fmt.Printf("str类型是%T str=%v\n",str,str) //str类型是string str=104//strcov包中有函数Itoa,只转int型的,其他类型需要int()强制转换
var num int = 345
str = strconv.Itoa(num)
fmt.Printf("str类型是%T str=%v\n",str,str)
4、string类型转其他类型
var str string = "true"
var str1 string ="123"
var b bool
var a bool
//字符串转布尔类型
b,_=strconv.ParseBool(str);
fmt.Printf("b type %T b=%v \n",b,b) //b type bool b=true
a,_=strconv.ParseBool(str1)
fmt.Printf("a type %T,a %v\n",a,a) //a type bool,a false
//字符串转int型
var n1 int64
var n2 int
//参数1:字符串;参数二:10进制;参数三:64位
n1,_= strconv.ParseInt(str1,10,64)
fmt.Printf("n1 type %T n1=%v \n",n1,n1) //n1 type int64 n1=123
n2 = int(n1);
fmt.Printf("n2 type %T n2=%v\n",n2,n2)//n2 type int n2=123
n1,_ = strconv.ParseInt(str,10,64)
fmt.Printf("n1 type %T n1= %v\n",n1,n1) //n1 type int64 n1= 0
var str3 string = "123.456"
var str4 string = "qee"
var f1 float64
//参数1:字符串 参数二:64位
f1,_=strconv.ParseFloat(str3,64)
fmt.Printf("f1 type %T f1 = %v\n" ,f1,f1)//f1 type float64 f1 = 123.456
f1,_=strconv.ParseFloat(str4,64)
fmt.Printf("f1 type %T f1 = %v\n" ,f1,f1)//f1 type float64 f1 = 0
2)注意:在将String转成基本数据类型时,要确保String类型能转为有效的数据,比如”123“能转为一个
整数,但是不能将"hello"转为一个整数,go会直接转为0,其他类型,float->0,bool->false。