【Golang】如何在 string 與其他 type 互轉,e.g. int, bool, float…

Zam Huang
4 min readSep 2, 2019

--

前言

Zam 寫過 c、c++、objective-c、js、java、swift、golang、prolog、python ,而 Zam 發現所有語言都會遇到的問題都差不多,其中一個一定就是在各種 Primitive type 間的進行轉換。所以用我認為簡單的方式介紹下 strconv 。也免得新手在學習時,都得逼著看英文或簡體。當然更詳細的請看 strconv package

常用的指令與使用說明

最常用的字串/數字轉換(string to int and int to string)

Atoi and Itoa,基本上內部也是使用 ParseInt and FormatInt 來進行轉換。這兩種轉換最常用到,Golang 為他特別做了兩個獨立的 func

基本上這兩種預設如下(詳細請繼續往後看)

Atoi = ParseInt(s, 10, 0)      // default: base 10, type: intItoa = FormatInt(int64(i), 10) // default: base 10

使用範例

import {    "strconv"
}
func main() { i, err := strconv.Atoi("-18") // result: i = -18 s := strconv.Itoa(-18) // result: s = "-18"
}

當你看到這裡,其實應該就解決你的問題了,如果你對其他 type 或用法想更了解,可以繼續往下看

字串轉其他格式(Parse 系列)

Parse 比較值得講得是 float, Int, Uint

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

bitSize 可以有兩種選擇:32 跟 64

最需要注意的是,如果你使用了 bitSize 為 32

1. 最後輸出還是會是 64

2. 若未超出 32 範圍,轉換的值不會有變化;若超過 32 範圍,轉換的值超出部分會被亂數取代。因此超出的話,值會失真,與原來的不一樣。

func ParseInt(s string, base int, bitSize int) (int64, error)

base 為 0, 2 to 36。有趣的是,如果你直接設成 0,他會根據你的字串決定型態。例如:0x777 會直接當成 16 進位,0777 為 8 進位,777 為 10 進位

bitSize 為 0, 8, 16, 32, 64 分別對應至 int, int8, int16, int32, and int64

Uintint 雷同,就不解釋了

使用範例

b, err := strconv.ParseBool("true")         // result: true, boolf, err := strconv.ParseFloat("3.14", 64)    // result: 3.14, float64i, err := strconv.ParseInt("-18", 10, 64)   // result:  -18, int64u, err := strconv.ParseUint("18", 10, 64)   // result:   18, int64

其他格式轉字串(Format 系列)

Format 比較值得講得是 float, Int, Uint

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

fmt 主要有以下幾種模式,可以讓 float 顯示的更簡潔

b: -ddddp±ddd, 二進制次方

e:-d.dddde±dd, 十進制次方

E: -d.ddddE±dd, 十進制次方

f :-ddd.dddd, 不顯示次方

g: 次方太大使用 e ,太小使用 f

G: 次方太大使用 E ,太小使用 f

prec 主要試用來限制 fmt 規範後的字數

func ParseInt(i int64, base int) string

base 範圍為 2 <= base <= 36。如果 base 超過 10,需要使用英文表示則使用小寫。詳細請看下面的範例

Uintint 雷同,就不解釋了

使用範例

s := strconv.FormatBool(true)               // result: "true"s := strconv.FormatFloat(3.14, 'E', -1, 64) // result: 3.14E+00s := strconv.FormatInt(-42, 16)             // result: "-2a"s := strconv.FormatUint(42, 16)             // result: "2a"

References

strconv package

如果此篇你喜歡或覺得有幫助

可以幫 Zam 快速連點個鼓掌(claps) 或者 follow 哦

萬分感謝!

--

--

Zam Huang

一個記錄著自己人生過程的工程師。A Software Engineer at Ruckus Network in Taiwan。 IG, Linkedin:@zam_huang, stack overflow: user:2613194