当前位置: 首页 > news >正文

【Go自学】一文搞懂Go的strconv模块

一、 strconv包

strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi()、Itoa()、parse系列、format系列、append系列。

其中需要注意的是Atoi、parse系列的返回值是两个,分别是result和error,造成这种现象的原因是string类型在解析时有可能无法解析为对应数据类型的值,所以需要有一个error来接受错误。

num,err := strconv.Atoi("123")//num = 123;err=nil
num,err := strconv.Atoi("12.1")// invalid syntax

二、string与Int类型的相互转换

1、Atoi

Atoi()函数用于将字符串类型的整数转换为int类型,函数格式如下

func Atoi(s string) (i int, err error)

如果传入的字符串参数无法转换为int类型,就会返回错误,我们可以捕获错误永远判断。

s1 := "100"
i1, err := strconv.Atoi(s1)
if err != nil {fmt.Println("can't convert to int")
} else {fmt.Printf("type:%T value:%#v\n", i1, i1) //type:int value:100
}

2、Itoa 

Itoa()函数用于将int类型数据转换为对应的字符串表示,具体的函数格式如下

func Itoa(i int) string
i2 := 200
s2 := strconv.Itoa(i2)
fmt.Printf("type:%T value:%#v\n", s2, s2) //type:string value:"200"

3、额外知识 

我们都知道Atoi,Itoa中的I指的是Int类型,那么A指的是什么呢?

其实这是C语言遗留下的典故。C语言中没有string类型而是用字符数组(array)表示字符串,所以Itoa对很多C系的程序员很好理解。


三、Parse系列函数

Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint(),所以该系列的函数拥有两个返回值

1、ParseBool()

func ParseBool(str string) (value bool, err error)

返回字符串表示的bool值。它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否则返回错误。

2、 ParseInt()

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

参数说明:

  • base 指定进制,取值范围是 2 到 36。如果 base 为 0,则会从字符串前置判断,“0x”是 16 进制,“0”是 8 进制,否则是 10 进制。
  • bitSize 指定结果必须能无溢出赋值的整数类型,0、8、16、32、64 分别代表 int、int8、int16、int32、int64。
  • 返回的 err 是 *NumErr 类型的,如果语法有误,err.Error = ErrSyntax,如果结果超出类型范围 err.Error = ErrRange。

3、ParseUnit()

func ParseUint(s string, base int, bitSize int) (n uint64, err error)

ParseUint类似ParseInt但不接受正负号,用于无符号整型。

4、ParseFloat()

func ParseFloat(s string, bitSize int) (f float64, err error)

参数说明:

  • 如果 s 合乎语法规则,函数会返回最为接近 s 表示值的一个浮点数(使用 IEEE754 规范舍入)。
  • bitSize 指定了返回值的类型,32 表示 float32,64 表示 float64;
  • 返回值 err 是 *NumErr 类型的,如果语法有误 err.Error=ErrSyntax,如果返回值超出表示范围,返回值 f 为 ±Inf,err.Error= ErrRange。

四、Format系列函数

Format系列函数实现了将给定类型数据格式化为string类型数据的功能。

1、 FormatBool()

func FormatBool(b bool) string

根据b的值返回”true”或”false”。

2、 FormatInt()

func FormatInt(i int64, base int) string

返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母’a’到’z’表示大于10的数字。

3、FormatUint()

func FormatUint(i uint64, base int) string

是FormatInt的无符号整数版本。

4、FormatFloat()

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

函数将浮点数表示为字符串并返回。

bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。

fmt表示格式:’f’(-ddd.dddd)、’b’(-ddddp±ddd,指数为二进制)、’e’(-d.dddde±dd,十进制指数)、’E’(-d.ddddE±dd,十进制指数)、’g’(指数很大时用’e’格式,否则’f’格式)、’G’(指数很大时用’E’格式,否则’f’格式)。

prec控制精度(排除指数部分):对’f’、’e’、’E’,它表示小数点后的数字个数;对’g’、’G’,它控制总的数字个数。如果prec 为-1,则代表使用最少数量的、但又必需的数字来表示f。


五、Append系列函数

Append 系列函数用于将指定类型转换成字符串后追加到一个切片中,其中包含 AppendBool()、AppendFloat()、AppendInt()、AppendUint()。

Append 系列函数和 Format 系列函数的使用方法类似,只不过是将转换后的结果追加到一个切片中。

package main
import ("fmt""strconv"
)
func main() {// 声明一个sliceb10 := []byte("int (base 10):")// 将转换为10进制的string,追加到slice中b10 = strconv.AppendInt(b10, -42, 10)fmt.Println(string(b10))b16 := []byte("int (base 16):")b16 = strconv.AppendInt(b16, -42, 16)fmt.Println(string(b16))
}

运行结果如下

int (base 10):-42
int (base 16):-2a


六、其他函数 

1、isPrint()

func IsPrint(r rune) bool

返回一个字符是否是可打印的,和unicode.IsPrint一样,r必须是:字母(广义)、数字、标点、符号、ASCII空格。

2、 CanBackquote()

func CanBackquote(s string) bool

返回字符串s是否可以不被修改的表示为一个单行的、没有空格和tab之外控制字符的反引号字符串。

http://www.lryc.cn/news/48321.html

相关文章:

  • SpringBoot整合Admin服务监控(图文详细)
  • 设计模式-结构型模式-组合模式
  • VScode开发工具总结
  • opencv 解码视频流,c++ 代码写法
  • Android 12.0 修改wifi信号强度
  • Linux——容器简介
  • CMOS图像传感器——pipeline像素控制
  • AI工具(ChatGPT)常用指令,持续更新...
  • 36--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-前台项目准备
  • 游戏算法-游戏AI行为树,python实现
  • 【新2023Q2模拟题JAVA】华为OD机试 - 矩阵最值 or 计算二维矩阵的最大值
  • 递归过程与递归工作栈
  • B 树的简单认识
  • 【大数据Hive3.x数仓开发】窗口函数案例:连续N次登录的用户;级联累加求和;分组TopN
  • openpyxl库自动填充excel实例分享
  • ICLR2021清华团队做的知识蒸馏提升detector的点的工作paper 小陈读论文系列
  • Java核心技术知识点笔记—集合框架
  • Rsync数据同步工具
  • redux小结
  • 【Python】【进阶篇】十、Pygame的Font文本和字体
  • 【从零开始学习 UVM】10.8、UVM TLM —— UVM TLM Example
  • 获取自己所上传资源的下载量
  • Aspose.cells模板导出使用记录
  • AcWing——糖果传递
  • Redis中的单线程模型
  • Python函数默认参数设置(超级详细)
  • 人工智能如何赋能业务创新?安克创新有话要说
  • 如何学习与学习的本质
  • C++ deque容器
  • HashMap的底层原理