go中基本數據類型與string類型相互轉換的方法總結

1.基本數據類型轉換為string類型

代碼:

// 基本數據類型轉換為string類型
package main

import (
"fmt"
"strconv"
)

func main() {
// 第一種方式使用fmt.Sprintf
var v1 int = 100
// v2的類型為float64
var v2 = 3.14
// v3的類型為int32
v3 := 'm'
var v4 bool = false
var str string

str = fmt.Sprintf("%d", v1)
fmt.Printf("v1的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v1, v1, str) // v1的原值為100, 類型為int, 轉換成string類型值為"100"

str = fmt.Sprintf("%f", v2)
fmt.Printf("v2的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v2, v2, str) // v2的原值為3.14, 類型為float64, 轉換成string類型值為"3.140000"

str = fmt.Sprintf("%c", v3)
fmt.Printf("v3的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v3, v3, str) // v3的原值為109, 類型為int32, 轉換成string類型值為"m"

str = fmt.Sprintf("%t", v4)
fmt.Printf("v4的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v4, v4, str) // v4的原值為false, 類型為bool, 轉換成string類型值為"false"

// 第二種方式使用strconv包的函數
var v5 uint8 = 100

var v6 bool = true
var v7 int = 999999
var v8 float32 = 3.1415926
var v9 float64 = 3.1415926

str = strconv.FormatUint(uint64(v5), 10)
fmt.Printf("v5的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v5, v5, str) // v5的原值為100, 類型為uint8, 轉換成string類型值為"100"

str = strconv.FormatBool(v6)
fmt.Printf("v6的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v6, v6, str) // v6的原值為true, 類型為bool, 轉換成string類型值為"true"

str = strconv.FormatInt(int64(v7), 10)
fmt.Printf("v7的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v7, v7, str) // v7的原值為999999, 類型為int, 轉換成string類型值為"999999"

// 注意轉換之後有精度的損失
// 第二個參數表示轉換格式byte類型,如 'f', 'b'等
// 第三個參數表示精度,如保留幾位小數
// 第四個參數表示位數為int型
str = strconv.FormatFloat(float64(v8), 'f', 10, 64)
fmt.Printf("v8的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v8, v8, str) // v8的原值為3.1415925, 類型為float32, 轉換成string類型值為"3.1415925026"

str = strconv.FormatFloat(v9, 'f', 10, 64)
fmt.Printf("v8的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v9, v9, str) // v8的原值為3.1415926, 類型為float64, 轉換成string類型值為"3.1415926000"

// 使用strconv包的Itoa函數
// strconv.Itoa 等價於 strconv.FormatInt(int64(i), 10)
var v10 uint8 = 127
str = strconv.Itoa(int(v10))
fmt.Printf("v10的原值為%v, 類型為%T, 轉換成string類型值為%q\\n", v10, v10, str) // v10的原值為127, 類型為uint8, 轉換成string類型值為"127"

}

總結:

go中基本數據類型與string類型相互轉換的方法總結

基本數據類型轉換為string類型

2.string類型轉換為基本數據類型

代碼:

// string類型轉基本數據類型
package main

import (
"fmt"
"strconv"
)

func main() {
str1 := "false"
var b bool
// 函數ParseBool會返回兩個值
// "_"表示會忽略掉第二個返回值
b, _ = strconv.ParseBool(str1)
fmt.Printf("str1原值為%q, 轉換為%T類型, 值為%v\\n", str1, b, b) // str1原值為"false", 轉換為bool類型, 值為false

str2 := "-100"
var n1 int64
// ParseInt函數中,第二個參數表示進制,第三個參數表示位數
// 注意該函數的返回值為int64類型
n1, _ = strconv.ParseInt(str2, 10, 64)
fmt.Printf("str2原值為%q, 轉換為%T類型, 值為%v\\n", str2, n1, n1) // str2原值為"-100", 轉換為int64類型, 值為-100

str3 := "128"
var n2 uint8
// n3的類型是uint64
n3, _ := strconv.ParseUint(str3, 10, 64)
n2 = uint8(n3)

fmt.Printf("str3原值為%q, 轉換為%T類型, 值為%v\\n", str3, n2, n2) // str3原值為"128", 轉換為uint8類型, 值為128

str4 := "-3.141592678"
var f1 float32
// f2的類型為float64
f2, _ := strconv.ParseFloat(str4, 64)
f1 = float32(f2)
// 注意轉換之後精度有損失
fmt.Printf("str4原值為%q, 轉換為%T類型, 值為%v\\n", str4, f1, f1) // str4原值為"-3.141592678", 轉換為float32類型, 值為-3.1415927

// 要確保string類型能夠轉換成有效的數據,否則會被轉換成對應類型的默認值,
// 比如:字符串"today"被轉換為整數後值為0,轉換成浮點數值為0,轉換成布爾值為false。
str5 := "today"
c1, _ := strconv.ParseInt(str5, 10, 64)
fmt.Printf("str5原值為%q, 轉換為%T類型, 值為%v\\n", str5, c1, c1) // str5原值為"today", 轉換為int64類型, 值為0
c2, _ := strconv.ParseFloat(str5, 64)
fmt.Printf("str5原值為%q, 轉換為%T類型, 值為%v\\n", str5, c2, c2) // str5原值為"today", 轉換為float64類型, 值為0
c3, _ := strconv.ParseBool(str5)
fmt.Printf("str5原值為%q, 轉換為%T類型, 值為%v\\n", str5, c3, c3) // str5原值為"today", 轉換為bool類型, 值為false

str6 := "711today"
c4, _ := strconv.ParseInt(str6, 10, 64)
fmt.Printf("str6原值為%q, 轉換為%T類型, 值為%v\\n", str6, c4, c4) // str6原值為"711today", 轉換為int64類型, 值為0
c5, _ := strconv.ParseFloat(str6, 64)
fmt.Printf("str6原值為%q, 轉換為%T類型, 值為%v\\n", str6, c5, c5) // str6原值為"711today", 轉換為float64類型, 值為0
c6, _ := strconv.ParseBool(str6)
fmt.Printf("str6原值為%q, 轉換為%T類型, 值為%v\\n", str6, c6, c6) // str6原值為"711today", 轉換為bool類型, 值為false

}

總結:

go中基本數據類型與string類型相互轉換的方法總結

string類型轉換為基本數據類型


分享到:


相關文章: