如题,整理一下。
1. int – string
func TestStrconvInt(t *testing.T) {
// int
// int >> string
var a1 int
a1 = 11
s1 := strconv.Itoa(a1)
fmt.Printf("s1: %s\n", s1)
// string >> int
s2 := "22"
if a2, err := strconv.Atoi(s2); err == nil {
fmt.Printf("a2: %d\n", a2)
} else {
log.Fatal(err)
}
// int64
// int64 >> string
var a3 int64
a3 = 9223372036854775807 // 2^63 - 1
s3 := strconv.FormatInt(a3, 10)
fmt.Printf("s3: %s\n", s3)
// string >> int64
var a4 int64
var err4 error
s4 := "9223372036854775807" // 2^63 - 1
if a4, err4 = strconv.ParseInt(s4, 10, 64); err4 == nil {
fmt.Printf("a4: %d\n", a4)
} else {
log.Fatal(err4)
}
// int32
// int32 >> string
var a5 int32
a5 = 2147483647 // 2^31 - 1
s5 := strconv.FormatInt(int64(a5), 10)
fmt.Printf("s5: %s\n", s5)
// string >> int32
var a6 int32
s6 := "2147483647" // 2^31 - 1
if a6_1, err := strconv.ParseInt(s6, 10, 32); err == nil { // a6_1 为 int64 类型
a6 = int32(a6_1)
fmt.Printf("a6: %d\n", a6)
} else {
log.Fatal(err)
}
var a7 int64
a7 = 2147483648
var a8 int32
a8 = int32(a7) // 溢出了
fmt.Printf("a8: %d\n", a8) // a8: -2147483648
var a9 interface{}
a9 = a3 // 赋予 int64 类型的值
var a10 int64
a10 = a9.(int64)
fmt.Printf("a10: %d\n", a10) // a10: 9223372036854775807
var a11 interface{}
a11 = a5 // 赋予 int32 类型的值
var a12 int64
//a12 = a11.(int64) // panic: interface conversion: interface {} is int32, not int64
a12 = int64(a11.(int32))
fmt.Printf("a12: %d\n", a12) // a12: 2147483647
}
2. float – string
func TestStrconvFloat(t *testing.T) {
// float64
// float64 >> string
var a1 float64
a1 = 3.1415926535
s1 := strconv.FormatFloat(a1, 'f', -1, 64)
fmt.Printf("s1: %s\n", s1) // s1: 3.1415926535
// float32
// float32 >> string
var a3 float32
a3 = 3.1415926535
s3 := strconv.FormatFloat(float64(a3), 'f', -1, 32)
fmt.Printf("s3: %s\n", s3) // s3: 3.1415927
}