Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go数据类型和字符串转换

Go中基本数据类型和字符串表示之间转换详解

作者:梦_鱼

这篇文章主要为大家详细介绍了Go中基本数据类型和字符串表示之间转换的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

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

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

1.1 Go 语言基本类型

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方法是一个将基本类型的字符串表示添加到字节切片的快捷方式

到此这篇关于Go中基本数据类型和字符串表示之间转换详解的文章就介绍到这了,更多相关Go数据类型和字符串转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文