Go语言中,不同类型的变量之间不能自动转换,需要显式转换,这与Java和C都有区别
var i int32 =100
var n1 float32 = float(i) //将int32转换为float32
注意:若将int64转换成int8,编译时不会报错,但是结果按照溢出处理,所以转换需要考虑范围。
func main() {
var in64 int64 = 1651235425
var in8 int8 = int8(in64)
fmt.Println("in64=", in64, "in8=", in8)
输出:
in64= 1651235425 in8= 97
其他基本数据类型与String的转换
fmt包
- 可通过fmt.Sprintf(“参数”,表达式),Sprintf根据format参数生成格式化的字符串并返回该字符串。
func main() {
var num1 int = 99
var num2 float64 = 2.4467
var str string = fmt.Sprintf("%d", num1)
var str2 string = fmt.Sprintf("%f", num2)
fmt.Printf("str类型:%T;str值:%s str2类型:%T,str2 值:%s", str, str, str2, str2)
}
输出:
str类型:string;str值:99 str2类型:string,str2 值:2.446700
Strconv包
- 可通过strconv包的函数
func main() {
var num int = 99
var num2 float64 = 23.456
var bools bool = true
str := strconv.FormatInt(int64(num), 10)
fmt.Printf("str type %T value %q \n", str, str)
str1 := strconv.FormatFloat(num2, 'f', 10, 64) // 10为显示十位数字,
fmt.Printf("str1 type is %T , value is %q \n", str1, str1)
str2 := strconv.FormatBool(bools)
fmt.Printf("str2 type is %T ,value is %q \n", str2, str2)
}
输出结果:
str type string value "99"
str1 type is string , value is "23.4560000000"
str2 type is string ,value is "true"
Int转String还可以使用Itoa函数
var ints int = 10
str := strconv.Itoa(ints)
fmt.Println(str)
String转其他基本数据类型
使用strconv包的ParseXXX
下面我们仅以bool类型为例,其它类型同理
var str1 = "true"
boo, _ := strconv.ParseBool(str1)
该函数会返回两个值,第一个是bool 第二个返回错误,, _
可以忽略第二个返回值。我们此处只关心bool类型
注意
将String转换成其他数据类型时,要确保其参数能被转换成有效数据,若将“hello"转换成整数,那么Go会将其转换成0,其他类型也是转换成0所对应的值,如:bool型为false