本次為操作文章,大部分都在討論類型之間如何轉換,使用的是內置方法進行調用執行,詳細使用請移步至:
go的API使用文檔地址
https://studygolang.com/pkgdoc
一、數值類型相互轉換
go中數值轉換需要顯示轉換,不能隱式自動轉換,使用T(v)表達式進行轉換,T是要聲明轉換的類型,v是要轉換值。
練習代碼如下:
// 類型轉換// 類型顯示轉換var num int32 = 10// int32 轉int64var num2 int64 = int64(num)fmt.Println("num2 = ", num2)fmt.Printf("num2 type is %T\n ", num2)//num2 = 10//num2 type is int64// int32 轉 float32var num3 float32 = float32(num)fmt.Println("num3 = ", num3)fmt.Printf("num3 type is %T\n ", num3)//num3 = 10//num3 type is float32// int32 轉 float64var num4 float64 = float64(num)fmt.Println("num4 = ", num4)fmt.Printf("num4 type is %T\n ", num4)//num4 = 10//num4 type is float64fmt.Printf("num type is %T\n ", num)// num type is int32
練習注意事項
- 類型轉換可以從小到大,也可以從大到小
- 轉換過程中,需要顯示聲明要轉換的類型
- 被轉換的v值,其本身類型不發生變化(上述num變量)
- 大類型轉換為小類型時,精度可能損失
// int8 內存儲范圍 -128 ~ 127n3 = int8(n1) + 127// 編譯通過,但是值會按溢出處理fmt.Println("n3 = ", n3)// n3 = -117// 編譯不過//n3 = int8(n1) + 128 // Invalid operation: int8(n1) + 128 (cannot convert the constant 128 to the type int8)
二、數值轉換字符串
數值轉換為字符串有倆種方法:
- 使用fmt.Sprintf方法
- 使用strconv工具包
練習代碼如下
// 數值轉字符串// 1. 使用fmt.Sprintf()var m1 int = 100str1 := fmt.Sprintf("%d", m1)fmt.Printf("str1 type:%T, str1 value: %q\n", str1, str1)// str1 type:string, str1 value: "100"// 2. 使用 strconv// 1. 需要轉換int64類型 2. base為10 表示格式化為10進制str2 := strconv.FormatInt(int64(m1), 10)fmt.Printf("str2 type:%T, str2 value: %q\n", str2, str2)// str2 type:string, str2 value: "100"var f float32 = 3.1415926// 1. 需要轉換float64類型 2. 'f' 表示式化成-ddd.dddd 3. 2 表示小數點后保留2位 4. 32 表示格式化為32位str3 := strconv.FormatFloat(float64(f), 'f', 2, 32)fmt.Printf("str3 type:%T, str3 value: %q\n", str3, str3)// str3 type:string, str3 value: "3.14"
具體使用細節,請移步官方API文檔:https://studygolang.com/pkgdoc
對應的方法詳情如下
三、數值轉字符串
使用strconv進行數值,轉換為字符串操作
練習代碼
// 字符串轉數值// strconv包進行轉換var str4 string = "123"// base為要轉換的進制,bitSize為要求的int大小str4Num, _ := strconv.ParseInt(str4, 10, 64)fmt.Printf("str4Num type:%T, str4Num value: %v\n", str4Num, str4Num)// str4Num type:int64, str4Num value: 123var str5 string = "3.14"str5Num, _ := strconv.ParseFloat(str5, 64)fmt.Printf("str5Num type:%T, str5Num value: %v\n", str5Num, str5Num)// str5Num type:float64, str5Num value: 3.14var str6 string = "true"str6Num, _ := strconv.ParseBool(str6)fmt.Printf("str6Num type:%T, str6Num value: %v\n", str6Num, str6Num)// str6Num type:bool, str6Num value: true
附
- 熟練進行值類型相互轉換
- 熟練進行值類型與字符串轉換
- 熟練進行字符串與值類型轉換