一般来讲,应用 v1 := T(v)
这个通用办法进行转换即可。但理论应用过程中往往不止这一种转换形式,同时也有一些注意事项,现总结如下。
版本:Go 1.14
数字
与字符串
的互相转换
数字
转字符串
初始变量:
var i int = 97var i64 int64 = 97var f32 float32 = 97.02var f64 float64 = 97.02
原类型 | 指标类型 | 转换方法 | 后果&备注 |
---|---|---|---|
int | string | string(i) | "a" 。该办法将97当做ASCII/UTF8码值,无奈失去预期的"97" 。 |
int | string | strconv.Itoa(i) | "97" |
int | string | strconv.FormatInt(int64(i), 10) | "97" |
int | string | fmt.Sprintf("%d", i) | "97" |
int64 | string | string(i64) | "a" 。该办法将97当做ASCII/UTF8码值,无奈失去预期的"97" 。 |
int64 | string | strconv.Itoa(int(i64)) | "97" |
int64 | string | strconv.FormatInt(i64, 10) | "97" |
int64 | string | fmt.Sprintf("%d", i64) | "97" |
其余整型 | string | 略 | |
float32 | string | strconv.FormatFloat(float64(f32), 'f', 10, 32) | "97.0199966431" |
float32 | string | fmt.Sprintf("%f", f32) | 97.019997 |
float64 | string | strconv.FormatFloat(f64, 'f', 10, 64) | "97.0200000000" |
float32 | string | fmt.Sprintf("%f", f64) | 97.020000 |
字符串
转数字
初始变量:
var s1 string = "97"var s2 string = "97.02"
原类型 | 指标类型 | 转换方法 | 后果&备注 |
---|---|---|---|
string | int | strconv.Atoi(s1) | 97 。对于strconv.Atoi(s2) 会报错strconv.Atoi: parsing "97.02": invalid syntax 并返回0 。 |
string | int | strconv.ParseInt(s1, 10, 0) | 不合乎预期 ,后果冀望是int 类型,实际上是int64 类型。另外,对于strconv.ParseInt(s2, 10, 0) 会报错strconv.ParseInt: parsing "97.02": invalid syntax ,并返回0 。 |
string | int64 | strconv.ParseInt(s1, 10, 64) | 97 |
string | float32 | strconv.ParseFloat(s2, 64) | 97.02 |