Go strconv

Golang的strconv包主要实现字符串和基本数据类型之间的转换

转换错误处理

字符串转换过程中可能出错,strconv包定义了两个error类型的变量,分别是ErrRangeErrSyntax

ErrRange

  • ErrRange表示值超过类型能表示的最大范围,比如将字符串"128"转换为int8会发生ErrRange错误。
var ErrRange = errors.New("value out of range")

ErrSyntax

  • ErrSyntax表示语法错误,比如将空字符串转换为int会发生ErrSyntax错误。
var ErrSyntax = errors.New("invalid syntax")

NumError

返回错误时不是直接将错误变量返回,而会通过构造一个NumError类型的error对象返回。

type NumError struct{
  Func string
  Num string
  Err error
}

NumError会记录转换过程中发生的错误信息,实现了error接口。

func (e *NumError) Error() string{
  return "strconv." + e.Func + ": " + "parsing " + Quote(e.Num) + ": " + e.Err.Error()
}

strconv包中定义了用于构造NumError对象的函数

函数描述
syntaxError语法错误
rangeError范围错误
baseError基础错误
bitSizeError比特位大小错误

Parse

字符串转整型

函数描述
strconv.ParseInt字符串转整型
strconv.ParseUint字符串转无符号整型
strconv.AtoiParseInt的便捷版,相当于ParseInt(s, 10, 0)
strconv.ParseInt
  • strconv.ParseInt返回字符串表示的整数值,接受正负号。
func ParseInt(s string, base int, bitSize int) (i int64, err error)
参数类型描述
sstring待转换的字符串
baseint进位制,表示字符串按照给定的进制进行解释。
bitSizeint位宽(包括符号位),表示整数的具体类型。

进位制

  • base取值范围从2到36,比如二进制、八进制、十进制、十六进制等。
  • base为0是特殊情况会根据字符串前缀判断:前缀0x表示16进制,前缀0表示8进制,否则为10进制。

base为0的内部实现

const intSize = 32 << uint(^uint(0) >> 63)

位宽

bitSize类型
0int
8int8
16int16
32int32
64int64

返回值

  • 若字符串表示的整数超过bitSize位宽能够表示的范围则会返回ErrRange错误,同时会返回bitSize能够表示的最大或最小值。

例如:将字符串转换为十进制的int8

var s string = "1281"
i, err := strconv.ParseInt(s, 10, 8)
fmt.Printf("value = %d, type = %T\n", i, i)      //value = 127, type = int64
fmt.Printf("error = %#v, type = %T\n", err, err)
  • 返回的err*strconv.NumError类型
error = &strconv.NumError{Func:"ParseInt", Num:"1281", Err:(*errors.errorString)(0xc000040010)},
type = *strconv.NumError
  • parseInt返回的是int64,为了能够容纳所有的整数。
var s string = "127"
i, err := strconv.ParseInt(s, 10, 8)
fmt.Printf("value = %d, type = %T\n", i, i) //value = 127, type = int64
fmt.Println(err)                            //<nil>
strconv.Atoi
  • Atoi字面意思为array to int,C语言中没有字符串类型,一般会将字符串定义为字符数组。
  • 将字符串类型的整数转换为int类型,若传入的字符串无法转换则返回错误。
func Atoi(s string) (int, error)
  • strconv.Atoi(s)内部采用的是strconv.ParseInt(s, 10, 0)

例如:将字符串转换为十进制的int类型

var s string = "123"
i, err := strconv.Atoi(s)
fmt.Printf("value = %d, type = %T, err = %v\n", i, i, err)
value = 123, type = int, err = <nil>

字符串转布尔值

函数描述
strconv.ParseBool将字符串转换为bool类型的值
strconv.ParseBool
  • strconv.ParseBool返回字符串表示的布尔值
func ParseBool(str string) (bool, error)
  • strconv.ParseBool仅接受字符串的1、0、t、f、T、F、true、false、True、False、TRUE、FALSE,其他值均返回错误。

例如:

var str string = "1"
b, err := strconv.ParseBool(str)
fmt.Printf("value = %v, type = %T\n", b, b)
fmt.Printf("error = %v, type = %T\n", err, err)
value = true, type = bool
error = <nil>, type = <nil>

例如:

var str string = "10"
b, err := strconv.ParseBool(str)
fmt.Printf("value = %v, type = %T\n", b, b)
fmt.Printf("error = %v, type = %T\n", err, err)
value = false, type = bool
error = strconv.ParseBool: parsing "10": invalid syntax, type = *strconv.NumError

字符串转浮点数

函数描述
strconv.ParseFloat将字符串转换为单精度浮点数
strconv.ParseFloat
  • strconv.ParseFloat解析一个表示浮点数的字符串并返回其值
func ParseFloat(s string, bitSize int) (float64, error)
参数类型描述
sstring表示浮点数的字符串
bitSizeint期望的接收类型,32表示float32,64表示float64。

s合法则返回最为接近s表示值的浮点数,会使用IEEE654规范进行舍入。

例如:

var str string = "3.1415926"
f64, err := strconv.ParseFloat(str, 32)
fmt.Printf("value = %v, type = %T\n", f64, f64)
fmt.Printf("error = %#v, type = %T\n", err, err)
value = 3.141592502593994, type = float64
error = <nil>, type = <nil>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值