零基础 go - 13(基本数据类型的相互转换 - 整型与string之间互相转换)

4 阅读2分钟

一、基本数据类型转 string

方式1: 使用 fmt.Sprintf() 函数

  • 整型使用 %d 或 %v
  • 浮点型使用 %f 或 %v
  • 布尔型使用 %t 或 %v
  • 字符型使用 %c 或 %v
package main

import "fmt"

func main() {
    // 整数、浮点数、布尔、字符 转字符串
    var n int = 42
    var f float64 = 3.14
    var b bool = true
    var c rune = 'A'
    var s string = fmt.Sprintf("%d", n)
    var s2 string = fmt.Sprintf("%f", f)
    var s3 string = fmt.Sprintf("%t", b)
    var s4 string = fmt.Sprintf("%c", c)
}

方式2: 使用 strconv 包

  • 整型使用 strconv.Itoa() 或 strconv.FormatInt()
  • 浮点型使用 strconv.FormatFloat()
  • 布尔型使用 strconv.FormatBool()
  • 字符型使用 strconv.QuoteRune() 或 strconv.FormatInt()
package main

import(
    "fmt"
    "strconv"
)

func main() {
    // 整数、浮点数、布尔、字符 转字符串
    var n int = 42
    var f float64 = 3.14
    var b bool = true
    var c rune = 'A'
    var s string = strconv.Itoa(n)
    var s2 string = strconv.FormatFloat(f, 'f', -1, 64)
    var s3 string = strconv.FormatBool(b)
    var s4 string = strconv.QuoteRune(c)
    fmt.Println("整数 n 转字符串 s =", s)
    fmt.Println("浮点数 f 转字符串 s2 =", s2)
    fmt.Println("布尔值 b 转字符串 s3 =", s3)
    fmt.Println("字符 c 转字符串 s4 =", s4)
}

二、 string 转基本数据类型

使用 strconv 包

  • 转整数使用 strconv.Atoi() 或 strconv.ParseInt()
  • 转浮点数使用 strconv.ParseFloat()
  • 转布尔值使用 strconv.ParseBool()
  • 转字符使用 strconv.UnquoteRune() 或 strconv.ParseInt()
  • 如果需要转为 int32 或 int64,可以使用 strconv.ParseInt(str, 10, 32) 或 strconv.ParseInt(str, 10, 64),并指定位数
  • 如果需要转为 float32 或者 float64,可以使用 strconv.ParseFloat(s, 32) 或 strconv.ParseFloat(s, 64),并指定位数
package main

import(
    "fmt"
    "strconv"
)

func main() {
// 字符串 转 整数、浮点数、布尔、字符
var s string = "42"
var s2 string = "3.14"
var s3 string = "true"
var s4 string = "'A'"
n, _ := strconv.Atoi(s)
f, _ := strconv.ParseFloat(s2, 64)
b, _ := strconv.ParseBool(s3)
unquoted, _ := strconv.Unquote(s4)
c := []rune(unquoted)[0]
fmt.Println("字符串 s 转整数 n =", n)
fmt.Println("字符串 s2 转浮点数 f =", f)
fmt.Println("字符串 s3 转布尔值 b =", b)
fmt.Println("字符串 s4 转字符 c =", c)


// 如果需要转为 int32 或 int64,可以使用 strconv.ParseInt(),并指定位数
n32, _ := strconv.ParseInt(s, 10, 32)
n64, _ := strconv.ParseInt(s, 10, 64)
fmt.Println("字符串 s 转 int32 n32 =", n32)
fmt.Println("字符串 s 转 int64 n64 =", n64)



// 如果需要转为 float32 或者 float64,可以使用 strconv.ParseFloat(),并指定位数
f32, _ := strconv.ParseFloat(s2, 32)
f64, _ := strconv.ParseFloat(s2, 64)
fmt.Println("字符串 s2 转 float32 f32 =", f32)
fmt.Println("字符串 s2 转 float64 f64 =", f64)
}

三、 string 类型转基本数据类型的注意事项

  • strconv.ParseInt("hello111", 10, 64) 会返回错误,因为字符串 "hello111" 不是一个有效的整数
  • strconv.ParseInt() 和 strconv.ParseFloat() 需要指定基数和位数,否则可能会得到不正确的结果。例如,strconv.ParseInt("42", 10, 0) 会将字符串 "42" 转换为整数 42,但 strconv.ParseInt("42", 0, 0) 会根据字符串的前缀自动判断基数,可能会将 "42" 解析为八进制数 34。
  • 转换过程中需要保证能转为正确的格式,否则会返回错误。例如,使用 strconv.Atoi() 转换一个非数字字符串会返回错误