Golang 基本操作(二)string和其他類型的相互轉換


將其他值轉換為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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM