Golang學習 - strconv 包

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
// 將布爾值轉換為字串 true 或 falsefunc FormatBool(b bool) string// 將字串轉換為布爾值// 它接受真值:1, t, T, TRUE, true, True// 它接受假值:0, f, F, FALSE, false, False// 其它任何值都返回一個錯誤。func ParseBool(str string) (bool, error)------------------------------// ErrRange 表示值超出範圍var ErrRange = errors.New("value out of range")// ErrSyntax 表示文法不正確var ErrSyntax = errors.New("invalid syntax")// 將整數轉換為字串形式。base 表示轉換進位,取值在 2 到 36 之間。// 結果中大於 10 的數字用小寫字母 a - z 表示。func FormatInt(i int64, base int) stringfunc FormatUint(i uint64, base int) string// 將字串解析為整數,ParseInt 支援加號或減號,ParseUint 不支援加號或減號。// base 表示進位制(2 到 36),如果 base 為 0,則根據字串首碼判斷,// 首碼 0x 表示 16 進位,首碼 0 表示 8 進位,否則是 10 進位。// bitSize 表示結果的位寬(包括符號位),0 表示最大位寬。func ParseInt(s string, base int, bitSize int) (i int64, err error)func ParseUint(s string, base int, bitSize int) (uint64, error)// 將整數轉換為十進位字串形式(即:FormatInt(i, 10) 的簡寫)func Itoa(i int) string// 將字串轉換為十進位整數,即:ParseInt(s, 10, 0) 的簡寫)func Atoi(s string) (int, error)------------------------------// 樣本func main() {fmt.Println(strconv.ParseInt("FF", 16, 0))// 255fmt.Println(strconv.ParseInt("0xFF", 16, 0))// 0 strconv.ParseInt: parsing "0xFF": invalid syntaxfmt.Println(strconv.ParseInt("0xFF", 0, 0))// 255fmt.Println(strconv.ParseInt("9", 10, 4))// 7 strconv.ParseInt: parsing "9": value out of range}------------------------------// 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 FormatFloat(f float64, fmt byte, prec, bitSize int) string// 將字串解析為浮點數,使用 IEEE754 規範進行舍入。// bigSize 取值有 32 和 64 兩種,表示轉換結果的精度。 // 如果有語法錯誤,則 err.Error = ErrSyntax// 如果結果超出範圍,則返回 ±Inf,err.Error = ErrRangefunc ParseFloat(s string, bitSize int) (float64, error)------------------------------// 樣本func main() {s := "0.12345678901234567890"f, err := strconv.ParseFloat(s, 32)fmt.Println(f, err)                // 0.12345679104328156fmt.Println(float32(f), err)       // 0.12345679f, err = strconv.ParseFloat(s, 64)fmt.Println(f, err)                // 0.12345678901234568}------------------------------// 判斷字串是否可以不被修改的表示為一個單行的反引號字串。// 字串中不能含有控制字元(除了 \t)和“反引號”字元,否則返回 falsefunc CanBackquote(s string) bool// 樣本:找出所有 !CanBackquote 的字元func main() {for i := rune(0); i < utf8.MaxRune; i++ {if !strconv.CanBackquote(string(i)) {fmt.Printf("%q, ", i)}}}// 結果如下:// '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\a', '\b', '\n', '\v', '\f', '\r', '\x0e', '\x0f', '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', '`', '\u007f', '\ufeff'------------------------------// 判斷 r 是否為可列印字元// 可否列印並不是你想象的那樣,比如空格可以列印,而\t則不能列印func IsPrint(r rune) bool// 判斷 r 是否為 Unicode 定義的圖形字元。func IsGraphic(r rune) bool------------------------------// 樣本:擷取不可列印字元和非圖形字元func main() {var rnp, rng, rpng, rgnp []runeconst maxLen = 32for i := rune(0); i < utf8.MaxRune; i++ {if !strconv.IsPrint(i) { // 不可列印if len(rnp) < maxLen {rnp = append(rnp, i)}if strconv.IsGraphic(i) && len(rgnp) < maxLen { // 圖形字元rgnp = append(rgnp, i)}}if !strconv.IsGraphic(i) { // 非圖形字元if len(rng) < maxLen {rng = append(rng, i)}if strconv.IsPrint(i) && len(rpng) < maxLen { // 可列印rpng = append(rpng, i)}}}fmt.Printf("不可列印字元    :%q\n", rnp)fmt.Printf("非圖形字元      :%q\n", rng)fmt.Printf("不可列印圖形字元:%q\n", rgnp)fmt.Printf("可列印非圖形字元:%q\n", rpng)}// 不可列印字元    :['\x00' '\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f' '\x10' '\x11' '\x12' '\x13' '\x14' '\x15' '\x16' '\x17' '\x18' '\x19' '\x1a' '\x1b' '\x1c' '\x1d' '\x1e' '\x1f']// 非圖形字元      :['\x00' '\x01' '\x02' '\x03' '\x04' '\x05' '\x06' '\a' '\b' '\t' '\n' '\v' '\f' '\r' '\x0e' '\x0f' '\x10' '\x11' '\x12' '\x13' '\x14' '\x15' '\x16' '\x17' '\x18' '\x19' '\x1a' '\x1b' '\x1c' '\x1d' '\x1e' '\x1f']// 不可列印圖形字元:['\u00a0' '\u1680' '\u2000' '\u2001' '\u2002' '\u2003' '\u2004' '\u2005' '\u2006' '\u2007' '\u2008' '\u2009' '\u200a' '\u202f' '\u205f' '\u3000']// 可列印非圖形字元:[]------------------------------// 將 s 轉換為雙引號字串func Quote(s string) string// 功能同上,非 ASCII 字元和不可列印字元會被轉義func QuoteToASCII(s string) string// 功能同上,非圖形字元會被轉義func QuoteToGraphic(s string) string------------------------------// 樣本func main() {s := "Hello\t世界!\n"fmt.Println(s)                         // Hello世界!(換行)fmt.Println(strconv.Quote(s))          // "Hello\t世界!\n"fmt.Println(strconv.QuoteToASCII(s))   // "Hello\t\u4e16\u754c\uff01\n"fmt.Println(strconv.QuoteToGraphic(s)) // "Hello\t世界!\n"}------------------------------// 將 r 轉換為單引號字元func QuoteRune(r rune) string// 功能同上,非 ASCII 字元和不可列印字元會被轉義func QuoteRuneToASCII(r rune) string// 功能同上,非圖形字元會被轉義func QuoteRuneToGraphic(r rune) string------------------------------// Unquote 將“帶引號的字串” s 轉換為常規的字串(不帶引號和逸出字元)// s 可以是“單引號”、“雙引號”或“反引號”引起來的字串(包括引號本身)// 如果 s 是單引號引起來的字串,則返回該該字串代表的字元func Unquote(s string) (string, error)// UnquoteChar 將帶引號字串(不包含首尾的引號)中的第一個字元“取消轉義”並解碼//// s    :帶引號字串(不包含首尾的引號)// quote:字串使用的“引號符”(用於對字串中的引號符“取消轉義”)//// value    :解碼後的字元// multibyte:value 是否為多位元組字元// tail     :字串 s 解碼後的剩餘部分// error    :返回 s 中是否存在語法錯誤//// 參數 quote 為“引號符”// 如果設定為單引號,則 s 中允許出現 \'、" 字元,不允許出現單獨的 ' 字元// 如果設定為雙引號,則 s 中允許出現 \"、' 字元,不允許出現單獨的 " 字元// 如果設定為 0,則不允許出現 \' 或 \" 字元,但可以出現單獨的 ' 或 " 字元func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)------------------------------// 樣本func main() {s1 := "`Hello世界!`"                 // 解析反引號字串s2 := `"Hello\t\u4e16\u754c\uff01"` // 解析雙引號字串fmt.Println(strconv.Unquote(s1))    // Hello世界! <nil>fmt.Println(strconv.Unquote(s2))    // Hello世界! <nil>fmt.Println()fmt.Println(strconv.UnquoteChar(`\u4e16\u754c\uff01`, 0))// 19990 true \u754c\uff01 <nil>fmt.Println(strconv.UnquoteChar(`\"abc\"`, '"'))// 34 false abc\" <nil>}------------------------------// 將各種類型轉換為字串後追加到 dst 尾部。func AppendInt(dst []byte, i int64, base int) []bytefunc AppendUint(dst []byte, i uint64, base int) []bytefunc AppendFloat(dst []byte, f float64, fmt byte, prec, bitSize int) []bytefunc AppendBool(dst []byte, b bool) []byte// 將各種類型轉換為帶引號字串後追加到 dst 尾部。func AppendQuote(dst []byte, s string) []bytefunc AppendQuoteToASCII(dst []byte, s string) []bytefunc AppendQuoteToGraphic(dst []byte, s string) []bytefunc AppendQuoteRune(dst []byte, r rune) []bytefunc AppendQuoteRuneToASCII(dst []byte, r rune) []bytefunc AppendQuoteRuneToGraphic(dst []byte, r rune) []byte------------------------------------------------------------

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.