網站首頁 編程語言 正文
前言
上篇文章 一文了解 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
為基數,也就是進制數,從0
、2
到36
進制。 - 第三個參數
bitSize
為位數,0
、8
、16
、32
、64
位分別對應int
、int8
、int16
、int32
、int64
。如果bitSize
小于0
或大于64
,則返回錯誤。 - 第一個返回值
i
為轉換之后的數字 - 第二個返回值
err
為轉換時產生的錯誤信息,除了bitSize
小于0
或大于64
,會發生錯誤以外,如果所傳的字符串s
與base
參數或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
代表float32
,64
代表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
類型的可選值只有 true
和 false
,其他值無法轉成布爾值。
FormatBool:布爾值轉字符串
FormatBool(b bool) string
- 參數
b
為帶轉換的布爾值。 - 返回值為轉換之后的字符串。
import ( "fmt" "strconv" ) func main() { boolStr := strconv.FormatBool(true) fmt.Println(boolStr) // "true" }
小結
本文對 string
與 int
類型、float
類型和 bool
類型相互之間轉換的函數進行介紹,掌握這些函數的用法,應對開發中 string
類型與其他基本數據類型轉換的場景不成問題。
原文鏈接:https://juejin.cn/post/7171838318378745892
相關推薦
- 2022-02-15 小程序搜索框歷史記錄,去除重復搜索內容,限制顯示條數
- 2022-04-11 關于出現“Content type ‘application/x-www-form-urlencod
- 2023-03-26 數據結構TypeScript之鏈表實現詳解_其它
- 2022-06-18 android實現在圖標上顯示數字_Android
- 2022-05-01 C#實現提取Word中插入的多媒體文件(視頻,音頻)_C#教程
- 2022-01-22 linux系統raid0測試實驗
- 2022-11-04 SQL?Server還原完整備份和差異備份的操作過程_MsSql
- 2022-05-25 springboot整合jpa報錯詳解
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支