ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# package strconv `import "strconv"` strconv包实现了基本数据类型和其字符串表示的相互转换。 ## Index * [Constants](#pkg-constants) * [Variables](#pkg-variables) * [type NumError](#NumError) * [func (e \*NumError) Error() string](#NumError.Error) * [func IsPrint(r rune) bool](#IsPrint) * [func CanBackquote(s string) bool](#CanBackquote) * [func Quote(s string) string](#Quote) * [func QuoteToASCII(s string) string](#QuoteToASCII) * [func QuoteRune(r rune) string](#QuoteRune) * [func QuoteRuneToASCII(r rune) string](#QuoteRuneToASCII) * [func Unquote(s string) (t string, err error)](#Unquote) * [func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)](#UnquoteChar) * [func ParseBool(str string) (value bool, err error)](#ParseBool) * [func ParseInt(s string, base int, bitSize int) (i int64, err error)](#ParseInt) * [func ParseUint(s string, base int, bitSize int) (n uint64, err error)](#ParseUint) * [func ParseFloat(s string, bitSize int) (f float64, err error)](#ParseFloat) * [func FormatBool(b bool) string](#FormatBool) * [func FormatInt(i int64, base int) string](#FormatInt) * [func FormatUint(i uint64, base int) string](#FormatUint) * [func FormatFloat(f float64, fmt byte, prec, bitSize int) string](#FormatFloat) * [func Atoi(s string) (i int, err error)](#Atoi) * [func Itoa(i int) string](#Itoa) * [func AppendBool(dst []byte, b bool) []byte](#AppendBool) * [func AppendInt(dst []byte, i int64, base int) []byte](#AppendInt) * [func AppendUint(dst []byte, i uint64, base int) []byte](#AppendUint) * [func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte](#AppendFloat) * [func AppendQuote(dst []byte, s string) []byte](#AppendQuote) * [func AppendQuoteToASCII(dst []byte, s string) []byte](#AppendQuoteToASCII) * [func AppendQuoteRune(dst []byte, r rune) []byte](#AppendQuoteRune) * [func AppendQuoteRuneToASCII(dst []byte, r rune) []byte](#AppendQuoteRuneToASCII) ### Examples * [Unquote](#example-Unquote) ## Constants ``` const IntSize = intSize ``` IntSize是int或uint类型的字位数。 ## Variables ``` var ErrRange = errors.New("value out of range") ``` ErrRange表示超出目标类型表示范围。 ``` var ErrSyntax = errors.New("invalid syntax") ``` ErrSyntax表示不符合目标类型语法。 ## type [NumError](https://github.com/golang/go/blob/master/src/strconv/atoi.go#L16 "View Source") ``` type NumError struct { Func string // 失败的函数(ParseBool、ParseInt、ParseUint、ParseFloat) Num string // 输入的字符串 Err error // 失败的原因(ErrRange、ErrSyntax) } ``` NumError表示一次失败的转换。 ### func (\*NumError) [Error](https://github.com/golang/go/blob/master/src/strconv/atoi.go#L22 "View Source") ``` func (e *NumError) Error() string ``` ## func [IsPrint](https://github.com/golang/go/blob/master/src/strconv/quote.go#L402 "View Source") ``` func IsPrint(r rune) bool ``` 返回一个字符是否是可打印的,和unicode.IsPrint一样,r必须是:字母(广义)、数字、标点、符号、ASCII空格。 ## func [CanBackquote](https://github.com/golang/go/blob/master/src/strconv/quote.go#L145 "View Source") ``` func CanBackquote(s string) bool ``` 返回字符串s是否可以不被修改的表示为一个单行的、没有空格和tab之外控制字符的反引号字符串。 ## func [Quote](https://github.com/golang/go/blob/master/src/strconv/quote.go#L90 "View Source") ``` func Quote(s string) string ``` 返回字符串s在go语法下的双引号字面值表示,控制字符、不可打印字符会进行转义。(如\t,\n,\xFF,\u0100) ## func [QuoteToASCII](https://github.com/golang/go/blob/master/src/strconv/quote.go#L103 "View Source") ``` func QuoteToASCII(s string) string ``` 返回字符串s在go语法下的双引号字面值表示,控制字符和不可打印字符、非ASCII字符会进行转义。 ## func [QuoteRune](https://github.com/golang/go/blob/master/src/strconv/quote.go#L116 "View Source") ``` func QuoteRune(r rune) string ``` 返回字符r在go语法下的单引号字面值表示,控制字符、不可打印字符会进行转义。(如\t,\n,\xFF,\u0100) ## func [QuoteRuneToASCII](https://github.com/golang/go/blob/master/src/strconv/quote.go#L131 "View Source") ``` func QuoteRuneToASCII(r rune) string ``` 返回字符r在go语法下的单引号字面值表示,控制字符、不可打印字符、非ASCII字符会进行转义。 ## func [Unquote](https://github.com/golang/go/blob/master/src/strconv/quote.go#L294 "View Source") ``` func Unquote(s string) (t string, err error) ``` 函数假设s是一个单引号、双引号、反引号包围的go语法字符串,解析它并返回它表示的值。(如果是单引号括起来的,函数会认为s是go字符字面值,返回一个单字符的字符串) Example ``` test := func(s string) { t, err := strconv.Unquote(s) if err != nil { fmt.Printf("Unquote(%#v): %v\n", s, err) } else { fmt.Printf("Unquote(%#v) = %v\n", s, t) } } s := `cafe\u0301` // If the string doesn't have quotes, it can't be unquoted. test(s) // invalid syntax test("`" + s + "`") test(`"` + s + `"`) test(`'\u00e9'`) ``` Output: ``` Unquote("cafe\\u0301"): invalid syntax Unquote("`cafe\\u0301`") = cafe\u0301 Unquote("\"cafe\\u0301\"") = café Unquote("'\\u00e9'") = é ``` ## func [UnquoteChar](https://github.com/golang/go/blob/master/src/strconv/quote.go#L182 "View Source") ``` func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error) ``` 函数假设s是一个表示字符的go语法字符串,解析它并返回四个值: ``` 1) value,表示一个rune值或者一个byte值 2) multibyte,表示value是否是一个多字节的utf-8字符 3) tail,表示字符串剩余的部分 4) err,表示可能存在的语法错误 ``` quote参数为单引号时,函数认为单引号是语法字符,不接受未转义的单引号;双引号时,函数认为双引号是语法字符,不接受未转义的双引号;如果是零值,函数把单引号和双引号当成普通字符。 ## func [ParseBool](https://github.com/golang/go/blob/master/src/strconv/atob.go#L10 "View Source") ``` func ParseBool(str string) (value bool, err error) ``` 返回字符串表示的bool值。它接受1、0、t、f、T、F、true、false、True、False、TRUE、FALSE;否则返回错误。 ## func [ParseInt](https://github.com/golang/go/blob/master/src/strconv/atoi.go#L150 "View Source") ``` 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。 ## func [ParseUint](https://github.com/golang/go/blob/master/src/strconv/atoi.go#L48 "View Source") ``` func ParseUint(s string, base int, bitSize int) (n uint64, err error) ``` ParseUint类似ParseInt但不接受正负号,用于无符号整型。 ## func [ParseFloat](https://github.com/golang/go/blob/master/src/strconv/atof.go#L533 "View Source") ``` func ParseFloat(s string, bitSize int) (f float64, err error) ``` 解析一个表示浮点数的字符串并返回其值。 如果s合乎语法规则,函数会返回最为接近s表示值的一个浮点数(使用IEEE754规范舍入)。bitSize指定了期望的接收类型,32是float32(返回值可以不改变精确值的赋值给float32),64是float64;返回值err是\*NumErr类型的,语法有误的,err.Error=ErrSyntax;结果超出表示范围的,返回值f为±Inf,err.Error= ErrRange。 ## func [FormatBool](https://github.com/golang/go/blob/master/src/strconv/atob.go#L21 "View Source") ``` func FormatBool(b bool) string ``` 根据b的值返回"true"或"false"。 ## func [FormatInt](https://github.com/golang/go/blob/master/src/strconv/itoa.go#L18 "View Source") ``` func FormatInt(i int64, base int) string ``` 返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母'a'到'z'表示大于10的数字。 ## func [FormatUint](https://github.com/golang/go/blob/master/src/strconv/itoa.go#L10 "View Source") ``` func FormatUint(i uint64, base int) string ``` 是FormatInt的无符号整数版本。 ## func [FormatFloat](https://github.com/golang/go/blob/master/src/strconv/ftoa.go#L44 "View Source") ``` 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。 ## func [Atoi](https://github.com/golang/go/blob/master/src/strconv/atoi.go#L195 "View Source") ``` func Atoi(s string) (i int, err error) ``` Atoi是ParseInt(s, 10, 0)的简写。 ## func [Itoa](https://github.com/golang/go/blob/master/src/strconv/itoa.go#L24 "View Source") ``` func Itoa(i int) string ``` Itoa是FormatInt(i, 10) 的简写。 ## func [AppendBool](https://github.com/golang/go/blob/master/src/strconv/atob.go#L30 "View Source") ``` func AppendBool(dst []byte, b bool) []byte ``` 等价于append(dst, FormatBool(b)...) ## func [AppendInt](https://github.com/golang/go/blob/master/src/strconv/itoa.go#L30 "View Source") ``` func AppendInt(dst []byte, i int64, base int) []byte ``` 等价于append(dst, FormatInt(I, base)...) ## func [AppendUint](https://github.com/golang/go/blob/master/src/strconv/itoa.go#L37 "View Source") ``` func AppendUint(dst []byte, i uint64, base int) []byte ``` 等价于append(dst, FormatUint(I, base)...) ## func [AppendFloat](https://github.com/golang/go/blob/master/src/strconv/ftoa.go#L50 "View Source") ``` func AppendFloat(dst []byte, f float64, fmt byte, prec int, bitSize int) []byte ``` 等价于append(dst, FormatFloat(f, fmt, prec, bitSize)...) ## func [AppendQuote](https://github.com/golang/go/blob/master/src/strconv/quote.go#L96 "View Source") ``` func AppendQuote(dst []byte, s string) []byte ``` 等价于append(dst, Quote(s)...) ## func [AppendQuoteToASCII](https://github.com/golang/go/blob/master/src/strconv/quote.go#L109 "View Source") ``` func AppendQuoteToASCII(dst []byte, s string) []byte ``` 等价于append(dst, QuoteToASCII(s)...) ## func [AppendQuoteRune](https://github.com/golang/go/blob/master/src/strconv/quote.go#L123 "View Source") ``` func AppendQuoteRune(dst []byte, r rune) []byte ``` 等价于append(dst, QuoteRune(r)...) ## func [AppendQuoteRuneToASCII](https://github.com/golang/go/blob/master/src/strconv/quote.go#L138 "View Source") ``` func AppendQuoteRuneToASCII(dst []byte, r rune) []byte ``` 等价于append(dst, QuoteRuneToASCII(r)...)