Go标准库strconv实现string类型与其他基本数据类型之间转换

 更新时间:2023年11月24日 08:34:10   作者:陈明勇  
这篇文章主要为大家介绍了Go标准库strconv实现string类型与其他基本数据类型之间转换示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

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

strconv

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

string 与 int 之间的转换

Itoa:int 类型转 string 类型

Itoa(i int) string

  • 参数 i 为待转换的数字。

返回值为转换之后的字符串。

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

  • 第一个参数为指定数字,类型为 int64
  • 第二个参数为指定进制

第三个参数为数字转成指定进制数后的字符串

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)

  • 第一个参数 s 为待解析的字符串
  • 第二个参数 base 为基数,也就是进制数,从 02 到 36 进制。
  • 第三个参数 bitSize 为位数,08163264位分别对应 intint8int16int32int64。如果 bitSize 小于 0 或大于 64,则返回错误。
  • 第一个返回值 i 为转换之后的数字

第二个返回值 err 为转换时产生的错误信息,除了 bitSize 小于 0 或大于 64,会发生错误以外,如果所传的字符串 s 与 base 参数或 bitSize 参数不匹配,也会发生错误。

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)

  • 第一个参数 s 为带转换的字符串。
  • 第二个参数为 bitSize 为转换后的位数,32 代表 float3264 代表 float64
  • 第一个返回值为转换后的浮点型数字。

第二个返回值为转换过程中所产生的错误

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

  • 第一个参数 f 为待转换的浮点数。
  • 第二个参数为格式,可选值有b e E f g G x X
  • 第三个参数 prec 为精度,精确到几位小数。
  • 返回值为转换后的字符串。
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)

  • 第一个参数 str 为待转换的字符串
  • 第一个返回值为转换之后的 bool 值

第二个返回值为转换时所产生的错误。

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 类型的可选值只有 true 和 false,其他值无法转成布尔值。

FormatBool:布尔值转字符串

FormatBool(b bool) string

  • 参数 b 为带转换的布尔值。

返回值为转换之后的字符串。

import (
  "fmt"
  "strconv"
)

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

小结

本文对 string 与 int 类型、float 类型和 bool 类型相互之间转换的函数进行介绍,掌握这些函数的用法,应对开发中 string 类型与其他基本数据类型转换的场景不成问题,更多关于Go strconv类型转换的资料请关注脚本之家其它相关文章!

相关文章

  • Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权详解

    Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权详解

    最近项目中需要用到鉴权机制,golang中jwt可以用,这篇文章主要给大家介绍了关于Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权的相关资料,需要的朋友可以参考下
    2022-09-09
  • Go设计模式之空对象模式实战

    Go设计模式之空对象模式实战

    空对计模式是Go语言中一种行为型设计模式,它通过返回实现了相同接口但不执行任何操作的空对象来替代nil值,从而避免因访问nil指针而导致的程序panic,感兴趣的可以了解一下
    2025-09-09
  • GoLang使goroutine停止的五种方法实例

    GoLang使goroutine停止的五种方法实例

    goroutine是Go并行设计的核心,下面这篇文章主要给大家介绍了关于GoLang使goroutine停止的五种方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • Go语言七篇入门教程六网络编程

    Go语言七篇入门教程六网络编程

    这篇文章主要为大家介绍了Go语言的网络编程,其中包含了Socket编程,Http编程以及RPC编程,本篇文章是Go语言七篇入门系列文章,有需要的朋友可以借鉴下
    2021-11-11
  • 使用Go语言实现一个简单的词频分析系统

    使用Go语言实现一个简单的词频分析系统

    在数据分析和文本挖掘中,词频统计(Word Frequency Analysis) 是最基础也是最常用的技术之一,本文将带你用 Go 语言实现一个简易的 词频分析系统,感兴趣的小伙伴可以了解下
    2025-09-09
  • 利用go语言判断是否是完全二叉树

    利用go语言判断是否是完全二叉树

    这篇文章主要介绍了利用go语言判断是否是完全二叉树,当一个节点存在右子节点但是不存在左子节点这颗树视为非完全二叉树,通过利用GO语言判断来判断出否是完全二叉树,详细内容参考如下
    2022-05-05
  • Go语言基础go fmt命令使用示例详解

    Go语言基础go fmt命令使用示例详解

    这篇文章主要为大家介绍了Go语言基础go fmt命令的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • 详解如何在Golang中监听多个channel

    详解如何在Golang中监听多个channel

    这篇文章主要为大家详细介绍了如何在Golang中实现监听多个channel,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-03-03
  • Golang token的生成和解析详解

    Golang token的生成和解析详解

    这篇文章主要给大家介绍了Golang token的生成和解析,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • Go信号处理如何优雅地关闭你的应用

    Go信号处理如何优雅地关闭你的应用

    Go 中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用 context 来管理 goroutine 的生命周期,结合 signal 包捕获系统信号,你可以在 Go 应用中实现一个健壮且优雅的关闭过程,对Go关闭应用相关操作感兴趣的朋友一起看看吧
    2025-01-01

最新评论