因爲在開發過程當中遇到類型轉換問題,好比在web中某個參數是以string存在的,這個時候須要轉換成其餘類型,這裏官方的strconv包裏有這幾種轉換方法。web
實現函數
有兩個函數能夠實現類型的互轉(以int轉string爲例)
1. FormatInt (int64,base int)string
2. Itoa(int)string
打開strconv包能夠發現Itoa的實現方式以下:.net
// Itoa is shorthand for FormatInt(int64(i), 10).
func Itoa(i int) string {
return FormatInt(int64(i), 10)
}orm
也就是說itoa實際上是更便捷版的FormatInt,以此類推,其餘的實現也相似的。blog
示例開發
int 和string 互轉
//int 轉化爲string
s := strconv.Itoa(i)
s := strconv.FormatInt(int64(i), 10) //強制轉化爲int64後使用FormatInt字符串
//string 轉爲int
i, err := strconv.Atoi(s) string
int64 和 string 互轉
//int64 轉 string,第二個參數爲基數
s := strconv.FormatInt(i64, 10)
// string 轉換爲 int64
//第二參數爲基數,後面爲位數,能夠轉換爲int32,int64等
i64, err := strconv.ParseInt(s, 10, 64) it
float 和 string 互轉
// flaot 轉爲string 最後一位是位數設置float32或float64
s1 := strconv.FormatFloat(v, 'E', -1, 32)
//string 轉 float 一樣最後一位設置位數
v, err := strconv.ParseFloat(s, 32)
v, err := strconv.atof32(s)float
bool 和 string 互轉
// ParseBool returns the boolean value represented by the string.
// It accepts 1, t, T, TRUE, true, True, 0, f, F, FALSE, false, False.
// Any other value returns an error.
func ParseBool(str string) (bool, error) {
switch str {
case "1", "t", "T", "true", "TRUE", "True":
return true, nil
case "0", "f", "F", "false", "FALSE", "False":
return false, nil
}
return false, syntaxError("ParseBool", str)
}
// FormatBool returns "true" or "false" according to the value of b
func FormatBool(b bool) string {
if b {
return "true"
}
return "false"
}
//上面是官方實現,不難發現字符串t,true,1都是真值。
//對應轉換:
b, err := strconv.ParseBool("true") // string 轉bool
s := strconv.FormatBool(true) // bool 轉string
interface轉其餘類型
有時候返回值是interface類型的,直接賦值是沒法轉化的。
var a interface{}
var b string
a = "123"
b = a.(string)
經過a.(string) 轉化爲string,經過v.(int)轉化爲類型。
能夠經過a.(type)來判斷a能夠轉爲何類型。
原文:https://blog.csdn.net/bobodem/article/details/80182096