一般来讲,使用 v1 := T(v) 这个通用方法进行转换即可。但实际使用过程中往往不止这一种转换方式,同时也有一些注意事项,现总结如下。

版本:Go 1.14

数字字符串的相互转换

数字字符串

初始变量:

var i int = 97
var i64 int64 = 97
var f32 float32 = 97.02
var f64 float64 = 97.02
原类型目标类型转换方法结果&备注
intstringstring(i)"a"。该方法将97当做ASCII/UTF8码值,无法得到预期的"97"
intstringstrconv.Itoa(i)"97"
intstringstrconv.FormatInt(int64(i), 10)"97"
intstringfmt.Sprintf("%d", i)"97"
int64stringstring(i64)"a"。该方法将97当做ASCII/UTF8码值,无法得到预期的"97"
int64stringstrconv.Itoa(int(i64))"97"
int64stringstrconv.FormatInt(i64, 10)"97"
int64stringfmt.Sprintf("%d", i64)"97"
其他整型string
float32stringstrconv.FormatFloat(float64(f32), 'f', 10, 32)"97.0199966431"
float32stringfmt.Sprintf("%f", f32)97.019997
float64stringstrconv.FormatFloat(f64, 'f', 10, 64)"97.0200000000"
float32stringfmt.Sprintf("%f", f64)97.020000

字符串数字

初始变量:

var s1 string = "97"
var s2 string = "97.02"
原类型目标类型转换方法结果&备注
stringintstrconv.Atoi(s1)97。对于strconv.Atoi(s2)会报错strconv.Atoi: parsing "97.02": invalid syntax并返回0
stringintstrconv.ParseInt(s1, 10, 0)不符合预期,结果期望是int类型,实际上是int64类型。另外,对于strconv.ParseInt(s2, 10, 0)会报错strconv.ParseInt: parsing "97.02": invalid syntax,并返回0
stringint64strconv.ParseInt(s1, 10, 64)97
stringfloat32strconv.ParseFloat(s2, 64)97.02

数字数字的相互转换

初始变量:

var i int = 97
var i64 int64 = 97
var f32 float32 = 97.02
var f64 float64 = 97.02
原类型目标类型转换方法结果&备注
intint64int64(i)97
intfloat32float32(i)97
intfloat64float64(i)97
int64intint(i64)97
int64float32float32(i64)97
int64float64float64(i64)97
float32intint(f32)97
float32int64int64(f32)97
float32float64float64(f32)97.0199966430664
float64intint(f64)97
float64int64int64(f64)97
float64float32float32(f64)97.02

字符串字符串的相互转换

初始变量:

s1 string = "Hello World!"
s2 string = "Hello 世界!"
原类型目标类型转换方法结果&备注
string[]byte[]byte(s1)[72 101 108 108 111 32 87 111 114 108 100 33][]byte类型就是[]uint8类型。
string[]rune[]rune(s2)[72 101 108 108 111 32 19990 30028 33][]rune类型就是[]int32类型。

mumingv
24 声望1 粉丝

持之以恒,方得始终