当前位置: 首页 > 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之外控制字符的反引号字符串。

相关文章:

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

一、 strconv包 strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi()、Itoa()、parse系列、format系列、append系列。 其中需要注意的是Atoi、parse系列的返回值是两个,分别是result和error,造成这种现…...

SpringBoot整合Admin服务监控(图文详细)

SpringBoot整合Admin服务监控组件 1 SpringBootAdmin 简介 1.1 概述 SpringBootAdmin 是一个非常好用的监控和管理的开源组件,该组件能够将 Actuator 中的信息进行界面化的展示,也可以监控所有 Spring Boot 应用的健康状况,提供实时警报功…...

设计模式-结构型模式-组合模式

我们很容易将“组合模式”和“组合关系”搞混。组合模式最初只是用于解决树形结构的场景,更多的是处理对象组织结构之间的问题。而组合关系则是通过将不同对象封装起来完成一个统一功能. 组合模式介绍 组合模式(Composite Pattern) 的定义是:将对象组合…...

VScode开发工具总结

目录 高效使用VScode工具 vscode 字体放大缩小快捷键 Vscode翻译插件推荐 code-translator插件​编辑 VsCode自动格式化代码 高效使用VScode工具...

opencv 解码视频流,c++ 代码写法

#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { // 打开视频流 VideoCapture cap("your_video_stream_url"); // 检查视频流是否成功打开 if (!cap.isOpened()) { …...

Android 12.0 修改wifi信号强度

1.前言 在12.0的系统rom产品定制化开发中,在进行产品开发中,对应系统定制会有各种各样的需求,对纯wifi产品而言,对于wifi要求也是越来越高,因此有客户要求对wifi信号强度做定制,修改信号强度来增强显示wifi信号,所以要对wifi显示信号强度的相关代码做修改 2.修改wifi…...

Linux——容器简介

1.容器技术 软件应用通常依赖运行时环境提供的其他库、配置文件或服务&#xff0c;在运行时环境安装在物理主机或虚拟机上运行的操作系统&#xff0c;同时应用依赖项也会随着该操作系统一起安装在主机上。 主要弊端是依赖项会受运行时环境的影响&#xff0c;引用所需的支持软件…...

CMOS图像传感器——pipeline像素控制

一、传统像素操作 传统CMOS图像传感器的芯片架构中,像素的控制信号从水平方向驱动,像素的源极跟随器输出电压垂直地输出到位于顶部和底部的模拟前端读出电路,其具体实现方式如下图所示,其中RST, TX和SEL是像素水平控制信号,像素输出电压PIX OUT垂直地传输到读出电路。 …...

AI工具(ChatGPT)常用指令,持续更新...

要国内使用AI工具&#xff0c;关注&#xff1a;码视野&#xff0c;回复&#xff1a;1002使用VensiGPT时&#xff0c;当你给的指令越精准&#xff0c;它回复就会越完美&#xff0c;例如&#xff0c;如果你要请它协助撰写文案&#xff0c;如果没有给与指定情景与目标&#xff0c;…...

36--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-前台项目准备

前台项目创建 1.命令行创建vue项目(参考使用Vue脚手架快速搭建项目) vue create 项目名2.安装插件vue.js 3.配置全局css,在assets/css/global.css /* 声明全局样式和项目的初始化样式 */ body, h1, h2, h3, h4, h5, h6, p, table, tr, td, ul, li, a, form, input, selec…...

游戏算法-游戏AI行为树,python实现

参考文章&#xff1a;Behavior trees for AI: How they work (gamedeveloper.com) 本文主要参考上述weizProject Zomboid 的开发者 Chris Simpson文章的概念&#xff0c;用伪代码实现代码例子 AI概述 游戏AI是对游戏内所有非玩家控制角色的行为进行研究和设计&#xff0c;使得游…...

【新2023Q2模拟题JAVA】华为OD机试 - 矩阵最值 or 计算二维矩阵的最大值

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:矩阵最值 or 计算二维矩阵的最…...

递归过程与递归工作栈

首先了解一下任意两个函数之间进行调用的情况: 比如在a函数里面调用b函数&#xff0c;那么在使用b函数之前&#xff0c;计算机还会1.把实参&#xff0c;返回地址给复制下来&#xff08;但只是复制而已&#xff0c;地址不是原来的。&#xff09;如图&#xff1a; 此外2.为被调用…...

B 树的简单认识

理解 B 树的概念 B 树是一种自平衡的查找树&#xff0c;能够保持数据有序。这种数据结构能够让查找数据、顺序访问、插入数据及删除数据的动作&#xff0c;都能在对数时间内完成。 同一般的二叉查找树不同&#xff0c;B 树是一棵多路平衡查找树&#xff0c;其特性是&#xff…...

【大数据Hive3.x数仓开发】窗口函数案例:连续N次登录的用户;级联累加求和;分组TopN

文章目录1 统计连续N次登录的用户&#xff08;N>2&#xff09;自连接过滤实现窗口函数lead()实现2 级联累加求和自连接窗口函数sum()实现3 分组TopN问题对窗口函数的讲解part见&#xff1a;【大数据Hive3.x数仓开发】函数–窗口函数 1 统计连续N次登录的用户&#xff08;N&…...

openpyxl库自动填充excel实例分享

openpyxl可以通过编写Python脚本实现自动化Excel操作&#xff0c;包括自动填充数据、格式化单元格、生成图表等操作。 以下是一个常见的自动化Excel操作示例&#xff1a; 自动填充数据&#xff1a; from openpyxl import Workbook from openpyxl.utils import get_column_l…...

ICLR2021清华团队做的知识蒸馏提升detector的点的工作paper 小陈读论文系列

这个作者栏目就是一个词 清爽 牛逼不需要花里胡哨哈哈 无疑是有点tian了哈哈 不重要 毕竟有机会研读 梦中情笑的paper 还是很感激的 真的 很清爽啊 很多KD的工作确实 在下游任务呢效果不是很好 然后就引出了自己的关于提升知识蒸馏在OD方面的工作 OD 首先就有两个问题 1.前…...

Java核心技术知识点笔记—集合框架

前言&#xff1a;Java最初版本只为最常用的数据结构提供了很少的一组类&#xff1a;Vector、Stack、Hashtable、BitSet和Enumeration接口。其中&#xff0c;Enumeration接口提供了一种用于访问任意容器中各个元素的抽象机制。与现代数据结构类库常见情况一样&#xff0c;Java集…...

Rsync数据同步工具

一、什么是Rsync Rsync是一款开源的&#xff0c;快速的&#xff0c;多功能的&#xff0c;可实现全量及增量&#xff08;差异化备份&#xff09;的本地或远程数据同步备份的优秀工具。 Rsync软件适用于Unix、Linux、Windows等多种操作系统。 &#xff08;1&#xff09;可使本地…...

redux小结

store.dispatch(action对象) 在 dispatch 中调用 action 方法返回 action 对象 // /actions/index.js /*** Action&#xff1a;* action本质上是一个 JS 对象&#xff1b;* 必须要包含 type 属性&#xff0c;否则会报错&#xff1b;* 只描述了有事情要发生&#xff0c…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...