代码
// 基本数据类型转换为string类型
package main
import (
"fmt"
"strconv"
)
func main() {
// 第一种方式使用fmt.Sprintf
var v1 int = 100
// v2的类型为float64
var v2 = 3.14
// v3的类型为int32
v3 := 'm'
var v4 bool = false
var str string
str = fmt.Sprintf("%d", v1)
fmt.Printf("v1的原值为%v, 类型为%T, 转换成string类型值为%q\n", v1, v1, str) // v1的原值为100, 类型为int, 转换成string类型值为"100"
str = fmt.Sprintf("%f", v2)
fmt.Printf("v2的原值为%v, 类型为%T, 转换成string类型值为%q\n", v2, v2, str) // v2的原值为3.14, 类型为float64, 转换成string类型值为"3.140000"
str = fmt.Sprintf("%c", v3)
fmt.Printf("v3的原值为%v, 类型为%T, 转换成string类型值为%q\n", v3, v3, str) // v3的原值为109, 类型为int32, 转换成string类型值为"m"
str = fmt.Sprintf("%t", v4)
fmt.Printf("v4的原值为%v, 类型为%T, 转换成string类型值为%q\n", v4, v4, str) // v4的原值为false, 类型为bool, 转换成string类型值为"false"
// 第二种方式使用strconv包的函数
var v5 uint8 = 100
var v6 bool = true
var v7 int = 999999
var v8 float32 = 3.1415926
var v9 float64 = 3.1415926
str = strconv.FormatUint(uint64(v5), 10)
fmt.Printf("v5的原值为%v, 类型为%T, 转换成string类型值为%q\n", v5, v5, str) // v5的原值为100, 类型为uint8, 转换成string类型值为"100"
str = strconv.FormatBool(v6)
fmt.Printf("v6的原值为%v, 类型为%T, 转换成string类型值为%q\n", v6, v6, str) // v6的原值为true, 类型为bool, 转换成string类型值为"true"
str = strconv.FormatInt(int64(v7), 10)
fmt.Printf("v7的原值为%v, 类型为%T, 转换成string类型值为%q\n", v7, v7, str) // v7的原值为999999, 类型为int, 转换成string类型值为"999999"
// 注意转换之后有精度的损失
// 第二个参数表示转换格式byte类型,如 'f', 'b'等
// 第三个参数表示精度,如保留几位小数
// 第四个参数表示位数为int型
str = strconv.FormatFloat(float64(v8), 'f', 10, 64)
fmt.Printf("v8的原值为%v, 类型为%T, 转换成string类型值为%q\n", v8, v8, str) // v8的原值为3.1415925, 类型为float32, 转换成string类型值为"3.1415925026"
str = strconv.FormatFloat(v9, 'f', 10, 64)
fmt.Printf("v8的原值为%v, 类型为%T, 转换成string类型值为%q\n", v9, v9, str) // v8的原值为3.1415926, 类型为float64, 转换成string类型值为"3.1415926000"
// 使用strconv包的Itoa函数
// strconv.Itoa 等价于 strconv.FormatInt(int64(i), 10)
var v10 uint8 = 127
str = strconv.Itoa(int(v10))
fmt.Printf("v10的原值为%v, 类型为%T, 转换成string类型值为%q\n", v10, v10, str) // v10的原值为127, 类型为uint8, 转换成string类型值为"127"
}
总结
查看源代码