溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Go語言中其他數(shù)據(jù)與字符串類型的轉(zhuǎn)換

發(fā)布時(shí)間:2020-07-24 13:49:06 來源:網(wǎng)絡(luò) 閱讀:208 作者:小韓說課 欄目:編程語言

1 概述

Go語言是強(qiáng)類型語言,因此總會需要將字符串轉(zhuǎn)成需要的類型。比如整型和字符串轉(zhuǎn)換,字符串和布爾型的轉(zhuǎn)換等。本文就介紹如何完成這些轉(zhuǎn)換,以下是Go語言關(guān)于字符串轉(zhuǎn)換的整理說明,主要是與切片類型的轉(zhuǎn)換,和 strconv 包的使用。

2 與切片的轉(zhuǎn)換

切片類型可以和字符串類型相互轉(zhuǎn)換。

fmt.Println([]rune("Hello小韓說課"))
// [72 101 108 108 111 23567 38889 35828 35838]
fmt.Println(string([]rune{72, 101, 108, 108, 111, 23567, 38889, 35828, 35838}))
// Hello小韓說課

fmt.Println([]byte("Hello"))
// [72 101 108 108 111]
fmt.Println(string([]byte{72, 101, 108, 108, 111}))
// Hello

3 strconv 包

會將常用的放在前面:

strconv.Atoi(s string) (int, error)

轉(zhuǎn)換字符串 s string 到整型。

v := "10"
if s, err := strconv.Atoi(v); err == nil {
    fmt.Printf("%T, %v", s, s)
}
// int, 10

// 相當(dāng)于
strconv.ParseInt(s, 10, 0)

strconv.Itoa(i int) string

將整型轉(zhuǎn) i int 換為字符串

i := 10
s := strconv.Itoa(i)
fmt.Printf("%T, %v\n", s, s)
// string, 10

strconv.ParseFloat(s string, bitSize int) (float64, error)

解析字符 str string 串為浮點(diǎn),可以設(shè)置位數(shù)。

v := "3.1415926535"
if s, err := strconv.ParseFloat(v, 32); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// float64, 3.1415927410125732
if s, err := strconv.ParseFloat(v, 64); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// float64, 3.1415926535

strconv.ParseInt(s string, base int, bitSize int) (i int64, err error)

解析字符 str string 串為整數(shù),可以設(shè)置進(jìn)制、位數(shù)。

v32 := "-354634382"
if s, err := strconv.ParseInt(v32, 10, 32); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v32, 16, 32); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// int64, -354634382

v64 := "-3546343826724305832"
if s, err := strconv.ParseInt(v64, 10, 64); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
if s, err := strconv.ParseInt(v64, 16, 64); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// int64, -3546343826724305832

strconv.FormatFloat(f float64, fmt byte, prec, bitSize int) string

將浮點(diǎn)數(shù) f float64 轉(zhuǎn)換為字符串,可以設(shè)置格式 fmt(b,e,E,f,g,G)、精度prce、位數(shù)(32或64)。

v := 3.1415926535
s32 := strconv.FormatFloat(v, 'E', -1, 32)
fmt.Printf("%T, %v\n", s32, s32)
// string, 3.1415927E+00
s64 := strconv.FormatFloat(v, 'E', -1, 64)
fmt.Printf("%T, %v\n", s64, s64)
// string, 3.1415926535E+00

strconv.FormatInt(i int64, base int) string

將整數(shù) i int64 轉(zhuǎn)換為字符串,可以指定進(jìn)制 base。

v := int64(-42)
s10 := strconv.FormatInt(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
// string, -42
s16 := strconv.FormatInt(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
// string, -2a

strconv.AppendBool(dst []byte, b bool) []byte

將布爾值 b bool 以字符串形式追加到 dst []byte 中。

b := []byte("bool:")
b = strconv.AppendBool(b, true)
fmt.Println(string(b))
// bool:true

// 相當(dāng)于
append(dst []byte, strconv.FormatBool(b bool))

strconv.AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []byte

將浮點(diǎn)數(shù) f float64 以字符串形式追加到 dst []byte 中,可以設(shè)置格式 fmt(b,e,E,f,g,G)、精度prce、位數(shù)(32或64)。

b32 := []byte("float32:")
b32 = strconv.AppendFloat(b32, 3.1415926535, 'E', -1, 32)
fmt.Println(string(b32))
// float32:3.1415927E+00

b64 := []byte("float64:")
b64 = strconv.AppendFloat(b64, 3.1415926535, 'E', -1, 64)
fmt.Println(string(b64))
// float64:3.1415926535E+00

// 相當(dāng)于
append(dst []byte, strconv.FormatFloat(3.1415926535, 'E', -1, 64))

strconv.AppendInt(dst []byte, i int64, base int) []byte

將整數(shù) i int64 以字符串形式追加到 dst []byte 中,可以指定進(jìn)制。

b10 := []byte("int (base 10):")
b10 = strconv.AppendInt(b10, -42, 10)
fmt.Println(string(b10))
// int (base 10):-42

b16 := []byte("int (base 16):")
b16 = strconv.AppendInt(b16, -42, 16)
fmt.Println(string(b16))
// int (base 16):-2a

// 相當(dāng)于
append(dst []byte, strconv.FormatInt(-42, 10))
append(dst []byte, strconv.FormatInt(-42, 16))

strconv.AppendQuote(dst []byte, s string) []byte

將字符串 s string 以字符串雙引號定義的形式追加到 dst []byte 中。

b := []byte("quote:")
b = strconv.AppendQuote(b, `"Fran & Freddie's Diner"`)
fmt.Println(string(b))
// quote:"\"Fran & Freddie's Diner\""

// 相當(dāng)于
append(dst []byte, strconv.Quote(`"Fran & Freddie's Diner"`))

strconv.AppendQuoteRune(dst []byte, r rune) []byte

將字符 r rune 以字單引號定義的形式追加到 dst []byte 中。

b := []byte("rune:")
b = strconv.AppendQuoteRune(b, '?')
fmt.Println(string(b))
// rune:'?'

// 相當(dāng)于
append(dst []byte, strconv.QuoteRune('?'))

strconv.AppendQuoteRuneToASCII(dst []byte, r rune) []byte

將字符 r rune 以字單引號定義的形式追加到 dst []byte 中,對于非 ASCII 字符 r 會以轉(zhuǎn)義字符的形式出現(xiàn)。

b := []byte("rune (ascii):")
b = strconv.AppendQuoteRuneToASCII(b, '?')
fmt.Println(string(b))
// rune (ascii):'\u263a'

// 相當(dāng)于
append(dst []byte, strconv.QuoteRuneToASCII('?'))

strconv.AppendQuoteToASCII(dst []byte, s string) []byte

將字符串 s string 以字符串雙引號定義的形式追加到 dst []byte 中,非 ASCII 字符以轉(zhuǎn)義形式表示。

b := []byte("quote (ascii):")
b = strconv.AppendQuoteToASCII(b, `"Fran & Freddie's Diner"`)
fmt.Println(string(b))
// quote (ascii):"\"Fran & Freddie's Diner\""

// 相當(dāng)于
append(dst []byte, strconv.QuoteToASCII(`"Fran & Freddie's Diner"`))

strconv.AppendUint(dst []byte, i uint64, base int) []byte

將無符號整數(shù) i uint64 以字符串形式追加到 dst []byte 中,可以指定進(jìn)制。

b10 := []byte("uint (base 10):")
b10 = strconv.AppendUint(b10, 42, 10)
fmt.Println(string(b10))
// uint (base 10):42

b16 := []byte("uint (base 16):")
b16 = strconv.AppendUint(b16, 42, 16)
fmt.Println(string(b16))
// uint (base 16):2a

strconv.CanBackquote(s string) bool

檢測字符串 s string 是否可以不被修改的表示為一個(gè)單行的、沒有空格和tab之外控制字符的反引號字符串。

fmt.Println(strconv.CanBackquote("Fran & Freddie's Diner ?"))
// true
fmt.Println(strconv.CanBackquote("`can't backquote this`"))
// false

strconv.FormatBool(b bool) string

將布爾 b bool 轉(zhuǎn)換為字符串。

v := true
s := strconv.FormatBool(v)
fmt.Printf("%T, %v\n", s, s)
// string, true

strconv.FormatUint(i uint64, base int) string

將無符號整數(shù) i uint64 轉(zhuǎn)換為字符串,可以指定進(jìn)制 base。

v := uint64(42)
s10 := strconv.FormatUint(v, 10)
fmt.Printf("%T, %v\n", s10, s10)
// string, 42

s16 := strconv.FormatUint(v, 16)
fmt.Printf("%T, %v\n", s16, s16)
// string, 2a

strconv.IsPrint(r rune) bool

檢測字符 r rune 是否為打印字符。

c := strconv.IsPrint('\u263a')
fmt.Println(c)
// true

bel := strconv.IsPrint('\007')
fmt.Println(bel)
// false

strconv.ParseBool(str string) (bool, error)

解析字符 str string 串為布爾型。

v := "true"
if s, err := strconv.ParseBool(v); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// bool, true

strconv.ParseUint(s string, base int, bitSize int) (uint64, error)

解析字符 str string 串為無符號整數(shù),可以設(shè)置進(jìn)制、位數(shù)。

v := "42"
if s, err := strconv.ParseUint(v, 10, 32); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// uint64, 42
if s, err := strconv.ParseUint(v, 10, 64); err == nil {
    fmt.Printf("%T, %v\n", s, s)
}
// uint64, 42

strconv.Quote(s string) string

返回字符串 s string 雙引號字面值表示,控制字符、不可打印字符會進(jìn)行轉(zhuǎn)義,如 \t,\n,\xFF,\u0100。

s := strconv.Quote(`"Fran & Freddie's Diner ?"`)
fmt.Println(s)
// "\"Fran & Freddie's Diner\t?\""

strconv.QuoteRune(r rune) string

返回字符 r rune 單引號字面值表示,控制字符、不可打印字符會進(jìn)行轉(zhuǎn)義,如\t,\n,\xFF,\u0100。

s := strconv.QuoteRune('?')
fmt.Println(s)
// '?'

strconv.QuoteRuneToASCII(r rune) string

返回字符 r rune 單引號字面值表示,控制字符、不可打印字符、非ASCII字符會進(jìn)行轉(zhuǎn)義。

s := strconv.QuoteRuneToASCII('?')
fmt.Println(s)
// '\u263a'

strconv.QuoteToASCII(s string) string

返回字符串 s string 雙引號字面值表示,控制字符和不可打印字符、非ASCII字符會進(jìn)行轉(zhuǎn)義。

s := strconv.QuoteToASCII(`"Fran & Freddie's Diner  ?"`)
fmt.Println(s)
// "\"Fran & Freddie's Diner\t\u263a\""

strconv.Unquote(s string) (string, error)

返回一個(gè)單引號、雙引號、反引號包圍的語法字符串 s string,解析它并返回它表示的值。若為反引號括起來的,函數(shù)會認(rèn)為s是go字符字面值,返回一個(gè)單字符的字符串。

s, err := strconv.Unquote("You can't unquote a string without quotes")
fmt.Printf("%q, %v\n", s, err)
// "", invalid syntax
s, err = strconv.Unquote("\"The string must be either double-quoted\"")
fmt.Printf("%q, %v\n", s, err)
// "The string must be either double-quoted", <nil>
s, err = strconv.Unquote("`or backquoted.`")
fmt.Printf("%q, %v\n", s, err)
// "or backquoted.", <nil>
s, err = strconv.Unquote("'\u263a'") // single character only allowed in single quotes
fmt.Printf("%q, %v\n", s, err)
// "?", <nil>
s, err = strconv.Unquote("'\u2639\u2639'")
fmt.Printf("%q, %v\n", s, err)
// "", invalid syntax

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

返回一個(gè)表示字符的語法字符串 s string,可以設(shè)置字符串定義語法 quote byte 雙引號或者反引號。解析它并返回四個(gè)值:

v, mb, t, err := strconv.UnquoteChar(`\"Fran & Freddie's Diner\"`, '"')
if err != nil {
    log.Fatal(err)
}

fmt.Println("value:", string(v))
// value: "
fmt.Println("multibyte:", mb)
// multibyte: false
fmt.Println("tail:", t)
// tail: Fran & Freddie's Diner\"

完!
原文出自:小韓說課
微信關(guān)注:小韓說課
Go語言中其他數(shù)據(jù)與字符串類型的轉(zhuǎn)換

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI