目录
  • Go 基本数据类型与字符串相互转换
    • 1.基本类型转换成字符串(string)
    • 2.字符串转换成基本数据类型 strconv包
  • Go – 基本数据类型和其字符串表示之间转换
    • 1. 基本数据类型和其字符串表示之间转换
      • 1.1 Go 语言基本类型
      • 1.2 转换过程中可能得错误
    • 2. 转换
      • 3. Append系方法
        • 4. 总结

        Go 基本数据类型与字符串相互转换

        go语言中文文档:

        Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国Go语言文档中文版,Go语言中文网,中国 Golang 社区,Go语言学习园地,致力于构建完善的 Golang 中文社区,Go语言爱好者的学习家园。

        https://studygolang.com/pkgdoc

        1.基本类型转换成字符串(string)

        fmt.Sprintf方法

        fmt.Sprintf("%参数", 表达式)

        注意:

        • 参数需要和表达式的数据类型相匹配
        • fmt.Sprintf()转换后返回字符串结果
        func main() {
            var num1 int = 99
            var num2 float64 = 23.55
            var b bool = true
            var mych byte = 'd'
            var st = string  // 空的string
            // 转化成string
            str = fmt.Sprintf("%d", num1)
            str = fmt.Sprintf("%f", num2)
            str = fmt.Sprintf("%t", b)
            str = fmt.Sprintf("%c", mych)
        }

        strconv包

        package main
        import (
            "fmt"
            "strconv"
        )
        func main() {
            var num1 int = 99
            var num2 float64 = 23.55
            var b bool = true
            var mych byte = 'd'
            var st = string  // 空的string
            str = strconv.FormatInt(int64(num1), 10)  // 转出10进制字符串
            fmt.Printf("type: %T, str: %q\n", str, str)  // 格式化输出
            // "f" 转换成浮点型数据后的一种表示格式,详见文档
            // 10 精度
            // 64 转换成float64
            str = strconv.FormatFloat(num2, "f", 10, 64)  // 
            str = strconv.FormatBool(b)  // 转出布尔类型字符串
            // 将整型变量转换成字符串,特例函数
            var num3 int = 333
            str = strconv.Itoa(num3)   // 这里num3为int型,如果不是需要先显示转换
        }

        2.字符串转换成基本数据类型 strconv包

        func main() {
            // 布尔类型转换
            var str string = "true"
            var b bool 
            b, _ = strconv.ParseBool(str)
            // 整型转换
            var str2 string = "232"
            var n int64
            var n2 int
            // 10 转换成10进制
            // 0、8、16、32、64 分别代表 int、int8、int16、int32、int64
            n, _ = strconv.ParseInt(str2, 10, 64)
            n2 = int(n)  // 获取int类型的值,显示转换
            // 浮点型转换
            var str3 string = "22.33"
            var f float64
            f, _ = strconv.ParseFloat(str3, 64)
        }

        注意:

        将string类型转换成基本类型时,必须确保string类型是有效的;如果是无效值则会转换成功,但是转换后的值为基本类型的默认值。例如不能把"ddd"转换成一个整数,如果这样做,golang直接将其转换成0

        补充:

        Go – 基本数据类型和其字符串表示之间转换

        1. 基本数据类型和其字符串表示之间转换

        基本类型的值,都有一个字符串表示,如数字类型值1 字符串表示为 "1",字符的编码为Unicode或者UTF-8,数字的编码是 int,底层存储的数据格式本质上不一样,基本类型的转换本质上只是文法语义上的转化

        1.1 Go 语言基本类型

        • 整数 : 有符号int int8 int16 int32 int64 无符号: uint uint8 uint16 uint32 uint64
        • 小数:float32 flat63
        • 字符串: string

        1.2 转换过程中可能得错误

        基本数据类型到字符串表示的转换,不会出错,但字符表示到基本类型的转换可能会有以下错误

        • 超出目标类型的表示范围
        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	numStr := "400"
        	// 400 数字值已经超出int8(-128, 127)类型表示的范围
        	num, err := strconv.ParseInt(numStr, 10, 8)
        	if err != nil {
        		fmt.Println(err)
        		return
        	}
        	fmt.Println("conv result:", num)
        }
        // 输出:strconv.ParseInt: parsing "400": value out of range
        • 不符合目标类型语法
        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	numStr := "xx"
        	// xx字符串值无法表示为对应的整数值
        	num, err := strconv.ParseInt(numStr, 10, 8)
        	if err != nil {
        		fmt.Println(err)
        		return
        	}
        	fmt.Println("conv result:", num)
        }
        // 输出:strconv.ParseInt: parsing "400": value out of range

        2. 转换

        • 字符串与带引号之间转化
        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	name := "dream_fish n"
        	// 添加上引号
        	fmt.Println("result:", strconv.Quote(name))
        	// 去除引号
        	school := `"University"`
        	school_, err := strconv.Unquote(school)
        	if err != nil {
        		fmt.Println("err:", err)
        		return
        	}
        	fmt.Println("result:", school_)
        }
        • 字符串与布尔类型之间的转换

        字符串转bool类型

        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	// 包含所有可以转bool类型的值
        	boolStringValues := []string{"1", "0", "t", "f", "true", "false", "True", "False"}
        	// 进行转换
        	for _, b := range boolStringValues {
        		result, err := strconv.ParseBool(b)
        		if err != nil {
        			fmt.Printf("parse value: %s err:%s\n", b, err)
        			continue
        		}
        		fmt.Printf("parse value: %s err:%s\n", b, result)
        	}
        }

        bool类型转字符串

        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	// 包含布尔类型的值
        	boolValues := []bool{false, true}
        	// 进行转换
        	for _, b := range boolValues {
        		result := strconv.Quote(strconv.FormatBool(b))
        		fmt.Printf("format value: %t err:%s\n", b, result)
        	}
        }
        • 数值与字符串之间的转换

        字符串转数值

        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	// 转换为 int8类型
        	int8String := "122"
        	// 第一个参数是需要转换的字符串,第二个参数是int类型的进制,第三个参数是bit位数
        	intNum, err := strconv.ParseInt(int8String, 10, 8)
        	if err != nil {
        		fmt.Println("err:", err)
        	}
        	fmt.Println("int8 num:", intNum)
        	// 字符串正整数
        	uintNum, err := strconv.ParseUint(int8String, 10, 8)
        	if err != nil {
        		fmt.Println("err:", err)
        	}
        	fmt.Println("uint8 num:", uintNum)
        	// 字符串转浮点数
        	floatNumStr := "67.9"
        	floatNum, err := strconv.ParseFloat(floatNumStr, 64)
        	if err != nil {
        		fmt.Println("err:", err)
        	}
        	fmt.Println("float64 num:", floatNum)
        }

        数值转字符串

        • strconv包的Format系列方式
        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	// 整肃转字符串
        	intNum := int64(8)
        	fmt.Printf("%s\n", strconv.FormatInt(intNum, 10))
        	// 浮点数转字符串
        	result := strconv.FormatFloat(88.9, 'f', 2, 64)
        	fmt.Println("float to str:", result)
        	// bool类型转字符串
        	fmt.Println("bool to str:", strconv.FormatBool(true))
        	// 无符号整肃
        	fmt.Println("uint to str", strconv.FormatUint(111, 10))
        }
        • fmtSprint系列方式
        package main
        import (
        	"fmt"
        )
        func main() {
        	// 整肃转字符串
        	intValue := int64(8)
        	boolValue := true
        	floatValue := 44.2
        	uintValue := 33
        	result := fmt.Sprintf("int: %d, bool: %t, float: %f, unit: %d", intValue, boolValue, floatValue, uintValue)
        	fmt.Printf(result)
        }
        • strconv包的AtoiItoa方法,其实是 ParseInt(s, 10, 0) FormatInt(i, 10)的简写
        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	// int类型值转换为字符串
        	result := strconv.Itoa(100)
        	fmt.Println(result)
        	// 字符串值换换为int类型的值
        	intString := "200"
        	intValue, err := strconv.Atoi(intString)
        	if err != nil {
        		panic(err)
        	}
        	fmt.Println(intValue)
        }

        3. Append系方法

        添加转成基本类型转换成字符串表示的

        package main
        import (
        	"fmt"
        	"strconv"
        )
        func main() {
        	// 基础数据类型
        	intValue := int64(100)
        	boolValue := true
        	floatValue := 5.4
        	buf := []byte("result:")
        	resultValue := strconv.AppendFloat(buf, floatValue, 'f', 2, 64)
        	fmt.Println(string(resultValue))
        	resultValue = strconv.AppendInt(buf, intValue, 10)
        	fmt.Println(string(resultValue))
        	resultValue = strconv.AppendBool(buf, boolValue)
        	fmt.Println(string(resultValue))
        }

        4. 总结

        • Parse系列方法,将字符串表示尝试转换为基础类型,Formation系列方法将基本类型转换为字符串表示,Append方法是一个将基本类型的字符串表示添加到字节切片的快捷方式
        声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。