Go語言之資料型別(二)
阿新 • • 發佈:2021-08-19
一、基本資料型別的預設值
資料型別 | 預設值 |
整型 | 0 |
浮點型 | 0 |
布林型 | false |
字串 | "" |
測試:
package main import "fmt" func main() { // 資料型別預設值 var a int var b float32 var c float64 var isStatus bool var username string // 打印出預設值 fmt.Printf("a=%d, b=%v, c=%v, isStatus=%v, username=%v", a, b, c, isStatus, username) //a=0, b=0, c=0, isStatus=false, username="" }
二、基本資料型別相互轉換
Go中不同的資料型別之間需要顯式轉換,不同型別之間不能自動轉換。
package main import "fmt" func main() { var i int32 = 10 // i int32-->float var j float32 = float32(i) // 高精度-->低精度 var k int8 = int8(i) // 低精度-->高精度 var m int64 = int64(i) fmt.Printf("i=%v j=%v k=%v m=%v", i, j, k, m) //i=10 j=10 k=10 m=10 }
注意:
- Go中高精度可以轉成低精度,同樣低精度也可以轉成高精度,但是如果高精度轉低精度無法盛放會造成溢位的現象
- 被轉換的是資料值,而它本身的型別並沒有變化
三、基本資料型別和string之間的轉換
(一)基本資料型別轉string
1、func Sprintf(format string, a ...interface{}) string
Sprintf根據format引數生成格式化的字串並返回該字串。
package main import "fmt" func main() { var a1int = 10 var a2 float64 = 10.236 var a3 bool = false var a4 byte = 'k' // fmt.Sprintf轉換 b1 := fmt.Sprintf("%d", a1) fmt.Printf("b1型別%T b1=%q\n", b1, b1) b2 := fmt.Sprintf("%f", a2) fmt.Printf("b2型別%T b2=%q\n", b2, b2) b3 := fmt.Sprintf("%t", a3) fmt.Printf("b3型別%T b3=%q\n", b3, b3) b4 := fmt.Sprintf("%c", a4) fmt.Printf("b4型別%T b4=%q\n", b4, b4) /* 輸出 b1型別string b1="10" b2型別string b2="10.236000" b3型別string b3="false" b4型別string b4="k" b5型別string b5="hello" */ }
2、使用strconv包中的函式
strconv包實現了基本資料型別和其字串表示的相互轉換,其中基本資料型別轉string的函式包含:
- func FormatBool(b bool) string
- func FormatInt(i int64, base int) string
- func FormatUint(i uint64, base int) string
- func FormatFloat(f float64, fmt byte, prec, bitSize int) string
package main import ( "fmt" "strconv" ) func main() { var a1 int = 10 var a2 float64 = 10.236 var a3 bool = false // FormatInt函式第一個引數是int64型別的引數,所以需要轉換 b1 := strconv.FormatInt(int64(a1), 10) fmt.Printf("b1型別%T b1=%q\n", b1, b1) // 'f'表示格式,10表示小數位保留10位,64表示這個小數是float64型別 b2 := strconv.FormatFloat(a2, 'f', 10, 64) fmt.Printf("b2型別%T b2=%q\n", b2, b2) b3 := strconv.FormatBool(a3) fmt.Printf("b3型別%T b3=%q\n", b3, b3) /* 輸出 b1型別string b1="10" b2型別string b2="10.2360000000" b3型別string b3="false" */ }
(二)string型別轉基本資料型別
使用strconv包中的如下函式:
- func ParseBool(str string) (value bool, err error)
- func ParseInt(s string, base int, bitSize int) (i int64, err error)
- func ParseUint(s string, base int, bitSize int) (n uint64, err error)
- func ParseFloat(s string, bitSize int) (f float64, err error)
package main import ( "fmt" "strconv" ) func main() { var str1 string = "123" var n1 int64 // strconv.ParseInt返回兩個值(i int64, err error) // 將第二個err忽視使用 _ n1, _ = strconv.ParseInt(str1, 10, 64) fmt.Printf("n1的型別位%T n1=%v\n", n1, n1) //n1的型別位int64 n1=123 var str2 string = "123.56" var f1 float64 f1, _ = strconv.ParseFloat(str2, 64) fmt.Printf("f1的型別位%T f1=%v\n", f1, f1) //f1的型別位float64 f1=123.56 var str3 string = "false" var b1 bool b1, _ = strconv.ParseBool(str3) fmt.Printf("b1的型別位%T f1=%v\n", b1, b1) //b1的型別位bool f1=false }
注意事項:
- string轉成基本型別要確保是有效的資料型別,比如不能將string型別值為”hello“轉成int型別
- string轉int,float基本資料型別時,返回值是int64或者float64,如果需要其它型別需要再進行轉化