日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

詳解Go語言strconv與其他基本數據類型轉換函數的使用_Golang

作者:陳明勇 ? 更新時間: 2022-12-28 編程語言

前言

上篇文章 一文了解 Go 標準庫 strings 常用函數和方法 介紹了 strings 標注庫里的一些常用的函數和方法,本文也是以 string 類型為中心,通過 strconv 標準庫,介紹其與其他基本數據類型相互轉換的函數。

strconv

strconv 包提供了 string 類型與其他基本數據類型之間轉換的函數,本文不會介紹其所有函數,如果想了解更多的小伙伴可以到 Go 包文檔 查看。

string 與 int 之間的轉換

Itoa:int 類型轉 string 類型

Itoa(i int) string

  • 參數 i 為待轉換的數字。
  • 返回值為轉換之后的字符串。
import (
	"fmt"
	"strconv"
)

func main() {
	num := 16
	str := strconv.Itoa(num)
	fmt.Printf("類型:%T,值:%s", str, str) // 類型:string,值:16
}

Atoi:string 類型轉 int 類型

Atoi(s string) (int, error)

  • 函數的參數為待轉換的字符串
  • 返回值有兩個,第一個是轉換之后的整形數字,第二個是錯誤描述。
import (
	"fmt"
	"strconv"
)

func main() {
	str := "666"
	num, err := strconv.Atoi(str)
	if err != nil {
		fmt.Println("err: ", err.Error())
		return
	}
	fmt.Printf("類型:%T,值:%d", num, num) // 類型:int,值:666
}

此函數與 Itoa 函數相比,多了一個 error 返回值,是因為如果是傳入的字符串無法轉成數字,例如 1a1,此函數就會返回 NumError 錯誤,而 Itoa 函數,無論傳入的是什么樣的數字,都可以轉為 string,因此在轉換的過程中沒有 error 的說法。

FormatInt:將數字轉成指定進制數并以 string 類型返回

FormatInt(i int64, base int) string

  • 第一個參數為指定數字,類型為 int64
  • 第二個參數為指定進制
  • 第三個參數為數字轉成指定進制數后的字符串
import (
	"strconv"
)

func main() {
	var num int64 = 2
	str := strconv.FormatInt(num, 2)
	var num2 int64 = 17
	str2 := strconv.FormatInt(num2, 16)
	println(str)  // 10
	println(str2) // 11
}

上述代碼實現了將數字 2 轉成二進制的形式 10,將數字 17 轉成十六進制的形式 11,并以 string 類型返回。上述數字皆代表著有符號為的 int64 類型,與之對應的還有無符號位的 uint64 類型的轉換函數 FormatUint

ParseInt:給定基數(進制數)和位數,返回對應十進制的值

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

  • 第一個參數 s 為待解析的字符串
  • 第二個參數 base 為基數,也就是進制數,從 0236 進制。
  • 第三個參數 bitSize 為位數,08163264位分別對應 intint8int16int32int64。如果 bitSize 小于 0 或大于 64,則返回錯誤。
  • 第一個返回值 i 為轉換之后的數字
  • 第二個返回值 err 為轉換時產生的錯誤信息,除了 bitSize 小于 0 或大于 64,會發生錯誤以外,如果所傳的字符串 sbase 參數或 bitSize 參數不匹配,也會發生錯誤。
import (
	"fmt"
	"strconv"
)

func main() {
	parseInt, err := strconv.ParseInt("100", 2, 64)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	println(parseInt) // 4

	parseInt2, err := strconv.ParseInt("666", 2, 64)
	if err != nil {
		fmt.Println(err.Error()) // strconv.ParseInt: parsing "666": invalid syntax
		return
	}
	println(parseInt2)
}

首先將二進制的 100 轉成十進制,為 4,然后將二進制的 666 轉成十進制,但是二進制所對應的數字沒有 666,因此轉換錯誤,返回 strconv.ParseInt: parsing "666": invalid syntax 錯誤信息。與之對應的還有返回無符號位的 uint64 類型的轉換函數 ParseUint

string 與 float 之間的轉換

ParseFloat:字符串類型轉浮點型類型

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

  • 第一個參數 s 為帶轉換的字符串。
  • 第二個參數為 bitSize 為轉換后的位數,32 代表 float3264 代表 float64
  • 第一個返回值為轉換后的浮點型數字。
  • 第二個返回值為轉換過程中所產生的錯誤
import (
	"fmt"
	"strconv"
)

func main() {
	num, err := strconv.ParseFloat("11.05", 64)
	if err != nil {
		return
	}
	fmt.Println(num)
}

如果傳入的 s 的語法錯誤如 1s1,則轉換失敗,返回 error

FormatFloat:根據格式 fmt 和精度 prec 將浮點數 f 轉換為字符串

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

  • 第一個參數 f 為待轉換的浮點數。
  • 第二個參數為格式,可選值有b e E f g G x X
  • 第三個參數 prec 為精度,精確到幾位小數。
  • 返回值為轉換后的字符串。
import (
	"fmt"
	"strconv"
)

func main() {
	str := strconv.FormatFloat(5.26, 'f', 1, 64)
	fmt.Println(str) // 5.3
}

FormatFloat 函數會對結果值進行四舍五入計算。

string 與 bool 之間的轉換

ParseBool:字符串轉布爾值

ParseBool(str string) (bool, error)

  • 第一個參數 str 為待轉換的字符串
  • 第一個返回值為轉換之后的 bool
  • 第二個返回值為轉換時所產生的錯誤。
import (
	"fmt"
	"strconv"
)

func main() {
	bool1, err := strconv.ParseBool("true")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(bool1) // true

	bool2, err := strconv.ParseBool("golang")
	if err != nil {
		fmt.Println(err.Error()) // strconv.ParseBool: parsing "golang": invalid syntax
		return
	}
	fmt.Println(bool2)
}

第一個字符串 true 轉布爾值成功了,但是第二個字符串 golang 轉布爾值失敗了,因為 bool 類型的可選值只有 truefalse,其他值無法轉成布爾值。

FormatBool:布爾值轉字符串

FormatBool(b bool) string

  • 參數 b 為帶轉換的布爾值。
  • 返回值為轉換之后的字符串。
import (
	"fmt"
	"strconv"
)

func main() {
	boolStr := strconv.FormatBool(true)
	fmt.Println(boolStr) // "true"
}

小結

本文對 stringint 類型、float 類型和 bool 類型相互之間轉換的函數進行介紹,掌握這些函數的用法,應對開發中 string 類型與其他基本數據類型轉換的場景不成問題。

原文鏈接:https://juejin.cn/post/7171838318378745892

欄目分類
最近更新