Go strconv

2021-04-21  本文已影响0人  JunChow520

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

转换错误处理

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

ErrRange

var ErrRange = errors.New("value out of range")

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.Atoi ParseInt的便捷版,相当于ParseInt(s, 10, 0)

strconv.ParseInt

func ParseInt(s string, base int, bitSize int) (i int64, err error)
参数 类型 描述
s string 待转换的字符串
base int 进位制,表示字符串按照给定的进制进行解释。
bitSize int 位宽(包括符号位),表示整数的具体类型。

进位制

base为0的内部实现

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

位宽

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

返回值

例如:将字符串转换为十进制的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) 
error = &strconv.NumError{Func:"ParseInt", Num:"1281", Err:(*errors.errorString)(0xc000040010)},
type = *strconv.NumError
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

func Atoi(s string) (int, error) 

例如:将字符串转换为十进制的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

func ParseBool(str string) (bool, error)

例如:

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

func ParseFloat(s string, bitSize int) (float64, error)
参数 类型 描述
s string 表示浮点数的字符串
bitSize int 期望的接收类型,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>
上一篇 下一篇

猜你喜欢

热点阅读