Golang筆記--strconv包的基本用法

import "strconv"bash

數值轉換

  • 字符串轉爲整型
// 將字符中解析爲整數, ParseInt支持正負號; ParseUint不支持正負號,用於無符號整數
// base 表示進位制(2到36),若是base爲0,則會從字符串前置判斷,"0x"是16進制,"0"是8進制,不然是10進制;
// bitSize指定結果必須能無溢出賦值的整數類型,0、八、1六、3二、64 分別表明 int、int八、int1六、int3二、int64;返回的err是*NumErr類型的,若是語法有誤,err.Error = ErrSyntax;若是結果超出類型範圍err.Error = ErrRange。
func ParseInt(s string, base int, bitSize int)(i int64, err error) 
func ParseUint(s string, base int, bitSize int)(i uint64, err error) 
    
// Atoi是ParseInt(s,10,0)的簡寫,能將字符串轉爲10進制整數
func Atoi(s string)(i int, err error)

// 示例
fmt.Println(strconv.ParseInt("-12", 10, 0)) // -12 <nil>
fmt.Println(strconv.ParseInt("0xFF", 10, 0)) // 0 strconv.ParseInt: parsing "0xFF": invalid syntax
fmt.Println(strconv.ParseInt("0xFF", 0, 0)) // 255 <nil>
fmt.Println(strconv.ParseInt("FF", 16, 0)) // 255 <nil>

fmt.Println(strconv.ParseUint("-12", 10, 0)) // 0 strconv.ParseUint: parsing "-12": invalid syntax
fmt.Println(strconv.ParseUint("12", 10, 0)) // 12 <nil>

fmt.Println(strconv.Atoi("12")) // 12 <nil>
複製代碼
  • 整數轉爲字符串
// 將整數轉爲字符串形式,FormatUint是FormatInt的無符號版本,負責處理無符號整數
// base 表示整數的進制,base 必須在2到36之間,結果中會使用小寫字母'a'到'z'表示大於10的數字。
func FormatInt(i int64, base int) string func FormatUint(i uint64, base int) string // ItoaFormatInt(i, 10) 的簡寫,能將10進制整數轉爲字符串 func Itoa(i int) string // 示例 fmt.Println(strconv.FormatInt(12, 2)) // 1100 fmt.Println(strconv.FormatInt(-12, 2)) // 1100 fmt.Println(strconv.FormatUint(12, 10)) // 12 fmt.Println(strconv.Itoa(12)) // 12 複製代碼
  • 將字符串轉爲浮點數
// 解析一個表示浮點數的字符串並返回其值。
// 若是s合乎語法規則,函數會返回最爲接近s表示值的一個浮點數(使用IEEE754規範舍入)。
// bitSize指定了指望的接收類型,32是float32(返回值能夠不改變精確值的賦值給float32),64是float64;
// 返回值err是*NumErr類型的,語法有誤的,err.Error=ErrSyntax;結果超出表示範圍的,返回值f爲±Inf,err.Error= ErrRange。
func ParseFloat(s string, bitSize int) (f float64, err error) // 示例 v := "4.12345678" if s, err := strconv.ParseFloat(v, 32); err == nil {
	fmt.Printf("%T, %v\n", s, s) // float64, 4.123456954956055
}
if s, err := strconv.ParseFloat(v, 64); err == nil {
	fmt.Printf("%T, %v\n", s, s) // float64, 4.12345678
}
複製代碼
  • 將浮點數轉爲字符串
// 將浮點數轉爲字符串
// bitSize 表示來源類型(32:float3二、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 FormatFloat(f float64, fmt byte, prec, bitSize int) string

// 示例
s32 := strconv.FormatFloat(v, 'E', -1, 32)
fmt.Printf("%T, %v\n", s32, s32) // string, 4.123457E+00

s64 := strconv.FormatFloat(v, 'E', -1, 64)
fmt.Printf("%T, %v\n", s64, s64) // string, 4.12345678E+00
複製代碼
  • 將字符串轉爲布爾值
// 返回字符串表示的bool值
// 只接收一、0、t、f、T、F、true、false、True、False、TRUE、FALSE做爲參數;不然返回錯誤。
func ParseBool(str string) (value bool, err error)

// 示例
fmt.Println(strconv.ParseBool("1")) // true
複製代碼
  • 將布爾值轉爲字符串
// 根據布爾值返回"true"或"false"
func FormatBool(b bool) string // 示例 fmt.Println(strconv.FormatBool(true)) // true 複製代碼

其餘函數

  • 判斷是否可打印(可在顯示器上顯示)
// 判斷一個字符是不是可打印的,和unicode.IsPrint同樣。
// r必須是:字母(廣義)、數字、標點、符號、ASCII空格
func IsPrint(r rune) bool 複製代碼
  • 判斷字符串可否表示爲表示爲一個單行的、沒有空格和tab以外控制字符的反引號字符串(不進行任何修改)。
// 判斷字符串s是否能夠不被修改的表示爲一個單行的、沒有空格和tab以外控制字符的反引號字符串。
func CanBackquote(s string) bool 複製代碼
  • 返回字符串雙引號字面值表示
// 返回字符串在go語法下的雙引號字面值表示(即雙引號標記的字符串如:"xxx")。
// Quote中,控制字符、不可打印字符會進行轉義。(如\t,\n,\xFF,\u0100)。
// QuoteToASCII中,,控制字符和不可打印字符、非ASCII字符會進行轉義。
// QuoteToGraphic中,非圖形字符會被轉義。
// ps:轉義(即:被替換爲轉義字符)。
func Quote(s string) string
func QuoteToASCII(s string) string
func QuoteToGraphic(s string) string

 // 示例
fmt.Println(strconv.Quote(`;khfvs'\"bchsbd\t`)) // ";khfvs'\\\"bchsbd\\t"
fmt.Println(strconv.QuoteToASCII(`"Fran & Freddie's Diner	☺ \t"`)) // "\"Fran & Freddie's Diner\t\u263a \\t\""
fmt.Println(strconv.QuoteToGraphic(`"Fran & Freddie's Diner	☺ \t"`)) // "\"Fran & Freddie's Diner\t☺ \\t\""

複製代碼
  • 返回字符單引號字面值表示
// 返回字符r在go語法下的單引號字面值表示(即雙引號標記的字符如:'x')。
// QuoteRune中,控制字符、不可打印字符會進行轉義。(如\t,\n,\xFF,\u0100)
// QuoteRuneToASCII中,控制字符、不可打印字符、非ASCII字符會進行轉義
// QuoteRuneToGraphic中,非圖形字符會被轉義
func QuoteRune(r rune) string
func QuoteRuneToASCII(r rune) string
func QuoteRuneToGraphic(r rune) string

// 示例
fmt.Println(strconv.QuoteRune('☺'))// '☺'
fmt.Println(strconv.QuoteRuneToASCII('☺')) // '\u263a'
fmt.Println(strconv.QuoteRuneToGraphic('☺')) // '☺'
複製代碼
  • 解析字符串
// 將帶有單引號、雙引號、反引號的字符串轉爲常規字符串
// 函數假設s是一個單引號、雙引號、反引號包圍的go語法字符串,解析它並返回它表示的值。(若是是單引號括起來的,函數會認爲s是go字符字面值,返回一個單字符的字符串)
func Unquote(s string) (t string, err error)

// 將帶引號字符串(不包含首尾的引號)中的第一個字符「取消轉義」並解碼
// 1) value,表示一個rune值或者一個byte值
// 2) multibyte,表示value是不是一個多字節的utf-8字符
// 3) tail,表示字符串剩餘的部分
// 4) err,表示可能存在的語法錯誤

// 參數 quote 定義「引號符」語法規範
// 若是設置爲單引號,則認爲單引號是語法字符, s 中容許出現 \'、" 字符,不容許出現單獨的 ' 字符
// 若是設置爲雙引號,則認爲雙引號是語法字符, s 中容許出現 \"、' 字符,不容許出現單獨的 " 字符
// 若是設置爲 0,函數把單引號和雙引號當成普通字符,則能夠出現單獨的 ' 或 " 字符,但不容許出現 \' 或 \" 字符,
func UnquoteChar(s string, quote byte) (value rune, multibyte bool, tail string, err error)

// 示例
fmt.Println(strconv.Unquote("`or backquoted.`"))    // or backquoted.  <nil>
fmt.Println(strconv.Unquote("\"The string must be either double-quoted\""))    // The string must be either double-quoted  <nil>
fmt.Println(strconv.Unquote("'\u2639'"))    // ☹  <nil>

value, mb, tail ,err := strconv.UnquoteChar(`\"Test *&^$ Test Func\"`, '"')
fmt.Println(value, mb, tail ,err)// 34 false Test *&^$ Test Func\" <nil>
fmt.Println(string(value), mb, tail ,err)// " false Test *&^$ Test Func\" <nil>
複製代碼
  • 添加到字符串尾部
// 將其餘數據類型轉爲string後添加到dst尾部,轉換規則與前面具體類型轉換字符串的方法一致
func AppendBool(dst []byte, b bool) []byte 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 int, bitSize int) []byte // 將字符串sAppend後面的方法(QuoteQuoteRune)轉換後,再將轉換的字符添加到dst後面 func AppendQuote(dst []byte, s string) []byte func AppendQuoteToASCII(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 複製代碼

錯誤類型

  • strconv 定義的兩種錯誤類型:ErrRange和ErrSyntax。在將string轉爲其餘類型失敗的時候,會構造一個NumError類型的error對象返回,該對象包括了上述兩種錯誤類型的描述。
  • ErrRange 表示值超過了類型能表示的最大範圍,好比將 "128" 轉爲 int8 就會返回這個錯誤。
  • ErrSyntax表示不符合目標類型語法,即語法錯誤,好比將 "" 轉爲 int 類型會返回這個錯誤。
  • NumError結構
// A NumError records a failed conversion.
type NumError struct {
	Func string // the failing function (ParseBool, ParseInt, ParseUint, ParseFloat)
	Num  string // the input
	Err  error  // the reason the conversion failed (ErrRange, ErrSyntax)
}
複製代碼
  • 實現Error輸出錯誤信息的接口
func (e *NumError) Error() string 複製代碼
相關文章
相關標籤/搜索