布尔

func FormatBool(b bool) string

  • 将布尔值转换为字符串 true 或 false

func ParseBool(str string) (bool, error)

  • 将字符串转换为布尔值
  • 它接受真值:1, t, T, TRUE, true, True
  • 它接受假值:0, f, F, FALSE, false, False
  • 其它任何值都返回一个错误。

    整数

    func FormatInt(i int64, base int) string
    func FormatUint(i uint64, base int) string

  • 将整数转换为字符串形式。base 表示转换进制,取值在 2 到 36 之间。

  • 结果中大于 10 的数字用小写字母 a - z 表示。

func ParseInt(s string, base int, bitSize int) (i int64, err error)
func ParseUint(s string, base int, bitSize int) (uint64, error)

  • 将字符串解析为整数,ParseInt 支持正负号,ParseUint 不支持正负号。
  • base 表示进位制(2 到 36),如果 base 为 0,则根据字符串前缀判断,
  • 前缀 0x 表示 16 进制,前缀 0 表示 8 进制,否则是 10 进制。
  • bitSize 表示结果的位宽(包括符号位),0 表示最大位宽。

func Itoa(i int) string

  • 将整数转换为十进制字符串形式(即:FormatInt(i, 10) 的简写)

func Atoi(s string) (int, error)

  • 将字符串转换为十进制整数,即:ParseInt(s, 10, 0) 的简写)

    1. func main() {
    2. fmt.Println(strconv.ParseInt("FF", 16, 0)) // 255 <nil>
    3. fmt.Println(strconv.ParseInt("0xFF", 16, 0))
    4. // 0 strconv.ParseInt: parsing "0xFF": invalid syntax
    5. fmt.Println(strconv.ParseInt("0xFF", 0, 0)) // 255 <nil>
    6. fmt.Println(strconv.ParseInt("9", 10, 4))
    7. // 7 strconv.ParseInt: parsing "9": value out of range
    8. fmt.Println(strconv.ParseInt("9", 10, 0)) //9 <nil>
    9. }

    浮点数

    func FormatFloat(f float64, fmt byte, prec, bitSize int) string
    FormatFloat 将浮点数 f 转换为字符串形式

  • f:要转换的浮点数

  • fmt:格式标记(b、e、E、f、g、G)
  • prec:精度(数字部分的长度,不包括指数部分)
  • bitSize:指定浮点类型(32:float32、64:float64),结果会据此进行舍入。

格式标记:

  • ‘b’ (-ddddp±ddd,二进制指数)
  • ‘e’ (-d.dddde±dd,十进制指数)
  • ‘E’ (-d.ddddE±dd,十进制指数)
  • ‘f’ (-ddd.dddd,没有指数)
  • ‘g’ (‘e’:大指数,’f’:其它情况)
  • ‘G’ (‘E’:大指数,’f’:其它情况)
  • 如果格式标记为 ‘e’,’E’和’f’,则 prec 表示小数点后的数字位数
  • 如果格式标记为 ‘g’,’G’,则 prec 表示总的数字位数(整数部分+小数部分)

func ParseFloat(s string, bitSize int) (float64, error)

  • 将字符串解析为浮点数,使用 IEEE754 规范进行舍入。
  • bigSize 取值有 32 和 64 两种,表示转换结果的精度。

    1. func main() {
    2. s := "0.12345678901234567890"
    3. f,_ := strconv.ParseFloat(s, 32)
    4. fmt.Println(f,) // 0.12345679104328156
    5. fmt.Println(float32(f)) // 0.12345679
    6. f,_ = strconv.ParseFloat(s, 64)
    7. fmt.Println(f) // 0.12345678901234568
    8. }

    判断特殊字符

    func CanBackquote(s string) bool

  • 字符串中不能含有控制字符(除了 \t)和“反引号”字符,否则返回 false

    1. func main() {
    2. for i := rune(0); i < utf8.MaxRune; i++ {
    3. if !strconv.CanBackquote(string(i)) {
    4. fmt.Printf("%q, ", i)
    5. }
    6. }
    7. }
    8. '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\a', '\b', '\n', '\v', '\f', '\r',
    9. '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18',
    10. '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', '`', '\u007f', '\ufeff'

    Quote

    func Quote(s string) string

  • 将 s 转换为双引号字符串

func QuoteToASCII(s string) string

  • 功能同上,非 ASCII 字符和不可打印字符会被转义

func QuoteToGraphic(s string) string

  • 功能同上,非图形字符会被转义

    1. func main() {
    2. s := "Hello\t世界!\n"
    3. fmt.Println(s) // Hello 世界!(换行)
    4. fmt.Println(strconv.Quote(s)) // "Hello\t世界!\n"
    5. fmt.Println(strconv.QuoteToASCII(s)) // "Hello\t\u4e16\u754c\uff01\n"
    6. fmt.Println(strconv.QuoteToGraphic(s)) // "Hello\t世界!\n"
    7. }

    func QuoteRune(r rune) string

  • 将 r 转换为单引号字符

func QuoteRuneToASCII(r rune) string

  • 功能同上,非 ASCII 字符和不可打印字符会被转义

func QuoteRuneToGraphic(r rune) string

  • 功能同上,非图形字符会被转义

func Unquote(s string) (string, error)

  • Unquote 将“带引号的字符串” s 转换为常规的字符串(不带引号和转义字符)
  • s 可以是“单引号”、“双引号”或“反引号”引起来的字符串(包括引号本身)
  • 如果 s 是单引号引起来的字符串,则返回该该字符串代表的字符

func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)

  • 将带引号字符串(不包含首尾的引号)中的第一个字符“取消转义”并解码
  • quote:字符串使用的“引号符”(用于对字符串中的引号符“取消转义”)
    • 如果设置为单引号,则 s 中允许出现 \’、” 字符,不允许出现单独的 ‘ 字符
    • 如果设置为双引号,则 s 中允许出现 \”、’ 字符,不允许出现单独的 “ 字符
    • 如果设置为 0,则不允许出现 \’ 或 \” 字符,但可以出现单独的 ‘ 或 “ 字符
  • // value :解码后的字符
  • // multibyte:value 是否为多字节字符
  • // tail :字符串 s 解码后的剩余部分
  • // error :返回 s 中是否存在语法错误

    1. func main() {
    2. s1 := "`Hello 世界!`" // 解析反引号字符串
    3. s2 := `"Hello\t\u4e16\u754c\uff01"` // 解析双引号字符串
    4. fmt.Println(strconv.Unquote(s1)) // Hello 世界! <nil>
    5. fmt.Println(strconv.Unquote(s2)) // Hello 世界! <nil>
    6. fmt.Println()
    7. fmt.Println(strconv.UnquoteChar(`\u4e16\u754c\uff01`, 0))
    8. // 19990 true \u754c\uff01 <nil>
    9. fmt.Println(strconv.UnquoteChar(`\"abc\"`, '"'))
    10. // 34 false abc\" <nil>
    11. }

    将各种类型转换为字符串后追加到dst

    func AppendInt(dst []byte, i int64, base int) []byte
    func AppendUint(dst []byte, i uint64, base int) []byte
    func AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte
    func AppendBool(dst []byte, b bool) []byte

    将各种类型转换为带引号字符串后追加到 dst

    func AppendQuote(dst []byte, s string) []byte
    func AppendQuoteToASCII(dst []byte, s string) []byte
    func AppendQuoteToGraphic(dst []byte, s string) []byte
    func AppendQuoteRune(dst []byte, r rune) []byte
    func AppendQuoteRuneToASCII(dst []byte, r rune) []byte
    func AppendQuoteRuneToGraphic(dst []byte, r rune) []byte