亲宝软件园·资讯

展开

详解Go语言strconv与其他基本数据类型转换函数的使用

陈明勇 人气:0

前言

上篇文章 一文了解 Go 标准库 strings 常用函数和方法 介绍了 strings 标注库里的一些常用的函数和方法,本文也是以 string 类型为中心,通过 strconv 标准库,介绍其与其他基本数据类型相互转换的函数。

strconv

strconv 包提供了 string 类型与其他基本数据类型之间转换的函数,本文不会介绍其所有函数,如果想了解更多的小伙伴可以到 Go 包文档 查看。

string 与 int 之间的转换

Itoa:int 类型转 string 类型

Itoa(i int) string

import (
	"fmt"
	"strconv"
)

func main() {
	num := 16
	str := strconv.Itoa(num)
	fmt.Printf("类型:%T,值:%s", str, str) // 类型:string,值:16
}

Atoi:string 类型转 int 类型

Atoi(s string) (int, error)

import (
	"fmt"
	"strconv"
)

func main() {
	str := "666"
	num, err := strconv.Atoi(str)
	if err != nil {
		fmt.Println("err: ", err.Error())
		return
	}
	fmt.Printf("类型:%T,值:%d", num, num) // 类型:int,值:666
}

此函数与 Itoa 函数相比,多了一个 error 返回值,是因为如果是传入的字符串无法转成数字,例如 1a1,此函数就会返回 NumError 错误,而 Itoa 函数,无论传入的是什么样的数字,都可以转为 string,因此在转换的过程中没有 error 的说法。

FormatInt:将数字转成指定进制数并以 string 类型返回

FormatInt(i int64, base int) string

import (
	"strconv"
)

func main() {
	var num int64 = 2
	str := strconv.FormatInt(num, 2)
	var num2 int64 = 17
	str2 := strconv.FormatInt(num2, 16)
	println(str)  // 10
	println(str2) // 11
}

上述代码实现了将数字 2 转成二进制的形式 10,将数字 17 转成十六进制的形式 11,并以 string 类型返回。上述数字皆代表着有符号为的 int64 类型,与之对应的还有无符号位的 uint64 类型的转换函数 FormatUint

ParseInt:给定基数(进制数)和位数,返回对应十进制的值

ParseInt(s string, base int, bitSize int) (i int64, err error)

import (
	"fmt"
	"strconv"
)

func main() {
	parseInt, err := strconv.ParseInt("100", 2, 64)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	println(parseInt) // 4

	parseInt2, err := strconv.ParseInt("666", 2, 64)
	if err != nil {
		fmt.Println(err.Error()) // strconv.ParseInt: parsing "666": invalid syntax
		return
	}
	println(parseInt2)
}

首先将二进制的 100 转成十进制,为 4,然后将二进制的 666 转成十进制,但是二进制所对应的数字没有 666,因此转换错误,返回 strconv.ParseInt: parsing "666": invalid syntax 错误信息。与之对应的还有返回无符号位的 uint64 类型的转换函数 ParseUint

string 与 float 之间的转换

ParseFloat:字符串类型转浮点型类型

ParseFloat(s string, bitSize int) (float64, error)

import (
	"fmt"
	"strconv"
)

func main() {
	num, err := strconv.ParseFloat("11.05", 64)
	if err != nil {
		return
	}
	fmt.Println(num)
}

如果传入的 s 的语法错误如 1s1,则转换失败,返回 error

FormatFloat:根据格式 fmt 和精度 prec 将浮点数 f 转换为字符串

FormatFloat(f float64, fmt byte, prec, bitSize int) string

import (
	"fmt"
	"strconv"
)

func main() {
	str := strconv.FormatFloat(5.26, 'f', 1, 64)
	fmt.Println(str) // 5.3
}

FormatFloat 函数会对结果值进行四舍五入计算。

string 与 bool 之间的转换

ParseBool:字符串转布尔值

ParseBool(str string) (bool, error)

import (
	"fmt"
	"strconv"
)

func main() {
	bool1, err := strconv.ParseBool("true")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(bool1) // true

	bool2, err := strconv.ParseBool("golang")
	if err != nil {
		fmt.Println(err.Error()) // strconv.ParseBool: parsing "golang": invalid syntax
		return
	}
	fmt.Println(bool2)
}

第一个字符串 true 转布尔值成功了,但是第二个字符串 golang 转布尔值失败了,因为 bool 类型的可选值只有 truefalse,其他值无法转成布尔值。

FormatBool:布尔值转字符串

FormatBool(b bool) string

import (
	"fmt"
	"strconv"
)

func main() {
	boolStr := strconv.FormatBool(true)
	fmt.Println(boolStr) // "true"
}

小结

本文对 stringint 类型、float 类型和 bool 类型相互之间转换的函数进行介绍,掌握这些函数的用法,应对开发中 string 类型与其他基本数据类型转换的场景不成问题。

加载全部内容

相关教程
猜你喜欢
用户评论