將其他值轉換為string
第一種,一般常用fmt.Sprintf(格式,轉換的值)
// 使用fmt.Sprintf 轉換所有的類型為string 使用 這是第一種 // 注意在sprintf使用中需要注意轉換的格式 int為%d float為%f bool為%t byte為%c var i int = 20 var f float64 = 12.456 var t bool = true var b byte = 'a' var strs string strs = fmt.Sprintf("%d",i) fmt.Println(strs) fmt.Printf("str type %T ,strs=%v \n",strs,strs) strs = fmt.Sprintf("%f",f) fmt.Println(strs) fmt.Printf("str type %T ,strs=%v \n",strs,strs) strs = fmt.Sprintf("%t",t) fmt.Println(strs) fmt.Printf("str type %T ,strs=%v \n",strs,strs) strs = fmt.Sprintf("%c",b) fmt.Println(strs) fmt.Printf("str type %T ,strs=%v \n",strs,strs)
第二種 有局限性 只能單一轉換 看源碼可知
例如,對於 strconv.Itoa() 源碼 只能傳遞int參數
// Itoa is equivalent to FormatInt(int64(i), 10). func Itoa(i int) string { return FormatInt(int64(i), 10) }
package main import ( "fmt" "strconv" ) func main() { var num int = 5000 nums := strconv.Itoa(num) fmt.Println(nums) fmt.Printf("\n轉換前是 %T, 經過strconv.Itoa轉換為 %T, 值為%v",num,nums,nums) }
將string轉換為其他值
注意:
至於string 轉其他類型操作如下 前提是string能轉換為其他基本類型 string "123x" 不能轉 為 int 123x 強轉則為0 但是類型會變為int
相當於沒轉成功,相當於給你一個int的默認值和變量名 不管轉換的變量之前有沒有聲明
第一種 strconv.Atoi()
看源碼也能得知只能傳遞string類型 返回int類型 局限性很大 並且只能將整數字符串轉換 入股摻雜一些字母之類的會錯誤
package main import ( "fmt" "strconv" ) func main() { var num2 string = "123X" // 只能整數的字符串轉換 不能摻雜其他不適整數的字符 nums2,_ := strconv.Atoi(num2) fmt.Println(nums2) fmt.Printf("轉換前是 %T, 經過strconv.Atoi轉換為 %T, 值為%v",num2,nums2,nums2) }
結果為:
>>> 0 轉換前是 string, 經過strconv.Atoi轉換為 int, 值為0
第二種 strconv 包的函數方法
string轉int
golang strconv.ParseInt 是將字符串轉換為數字的函數
package main import ( "fmt" "strconv" ) func main() { // string 類型轉換為 其他類型 var str string = "123" // strconv.parseint 傳入轉換的字符串 返回int類型和error ing,_ := strconv.ParseInt(str,0,0) fmt.Println(ing) fmt.Printf("int type %T %v\n",ing,ing) }
如果對返回int64位不想要int64的 可以進行一個強制轉換為int32 ing = int32(ing)
注意只有同類型才能轉換
同理 下面通過strconv.Parsexxx的也可以通過這個轉換為同類型的其他格式 但是需要考慮 范圍 比如int64轉int32 如果int64返回的值很大,那么強轉會出現值不對
注意:對於ParseInt函數
func ParseInt(s string, base int, bitSize int) (i int64, err error)
參數1 數字的字符串形式
參數2 數字字符串的進制 比如二進制 八進制 十進制 十六進制
前兩哥參數解釋如上,對於第三個參數,在網上很多帖子說,第三個參數 是指定返回值類型的,可能有些歧義
針對函數 返回值 問題,官方文檔已經寫得很清楚了,就是 多返回值(int64,error)
那么,第三個參數有何用?
其實,他是起到 string 轉 int 時的一個限制作用,如果超過了第三個參數 bitSize 的限制,那么就會將報錯信息輸出到 error 中
案例:
我們分別將 “127” 和 “128” 轉換成 int類型
package main import ( "fmt" "strconv" ) func main() { str1 := "127" n, err := strconv.ParseInt(str1, 10, 8) //這里的 8 指的是 轉換結果最大值不超過 int8 即 127 if err != nil { fmt.Printf("err is %v\n", err) } fmt.Printf("類型: %T ,值: %d", n, n) }
>>> 類型: int64 ,值: 127
package main import ( "fmt" "strconv" ) func main() { str1 := "128" n, err := strconv.ParseInt(str1, 10, 8) //這里的 8 指的是 轉換結果最大值不超過 int8 即 127 if err != nil { fmt.Printf("err is %v\n", err) } fmt.Printf("類型: %T ,值: %d", n, n) }
>>> err is strconv.ParseInt: parsing "128": value out of range 類型: int64 ,值: 127
其他函數如下:
package main import ( "fmt" "strconv" ) func main() { // 字符串轉為bool類型 var str1 string = "true" b , _ := strconv.ParseBool(str1) fmt.Println(b) //true fmt.Printf("%t\n",b) //true // 但有個局限,只能字符串是"true""是才會轉換為bool = true類型 // 其他因為轉換不成功所以都是一個bool默認值 false str1 = "truez" b , _ = strconv.ParseBool(str1) fmt.Println(b) //false fmt.Printf("%t\n",b) //false // string轉float var floatstr string = "123.456" floats,_ := strconv.ParseFloat(floatstr,64) //返回float64 可以強轉為float32 但是注意float64位的值大小,如果超過float32位 請不要轉換 fmt.Println(floats) //123.456 fmt.Printf("str類型為 %T ,值為 %v ,浮點值為 %f" ,floats,floats,floats) // str類型為 float64 ,值為 123.456 ,浮點值為 123.456000 }