Go中基本数据类型和字符串表示之间转换详解
作者:梦_鱼
这篇文章主要为大家详细介绍了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)) }
fmt
包Sprint
系列方式
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
包的Atoi
与Itoa
方法,其实是 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数据类型和字符串转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!