Golang學習 - strconv 包

------------------------------------------------------------

// 將布爾值轉換爲字符串 true 或 false
func 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) string
func 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))
	// 255
	fmt.Println(strconv.ParseInt("0xFF", 16, 0))
	// 0 strconv.ParseInt: parsing "0xFF": invalid syntax
	fmt.Println(strconv.ParseInt("0xFF", 0, 0))
	// 255
	fmt.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:float3二、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 = ErrRange
func ParseFloat(s string, bitSize int) (float64, error)

------------------------------

// 示例
func main() {
	s := "0.12345678901234567890"

	f, err := strconv.ParseFloat(s, 32)
	fmt.Println(f, err)                // 0.12345679104328156
	fmt.Println(float32(f), err)       // 0.12345679

	f, err = strconv.ParseFloat(s, 64)
	fmt.Println(f, err)                // 0.12345678901234568
}

------------------------------

// 判斷字符串是否能夠不被修改的表示爲一個單行的反引號字符串。
// 字符串中不能含有控制字符(除了 \t)和「反引號」字符,不然返回 false
func 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 []rune
	const maxLen = 32
	for 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) []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

------------------------------------------------------------



相關文章
相關標籤/搜索