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

版本:Go 1.14

数字字符串的互相转换

数字字符串

初始变量:

var i int = 97var i64 int64 = 97var f32 float32 = 97.02var 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