Go 語言基本資料型別
阿新 • • 發佈:2022-11-29
package main import ( "fmt" "math" "strings" "unsafe" ) func main() { /* Golang資料型別分為基本資料型別和複合資料型別 基本資料型別有:整形、浮點型、布林型、字串型別 複合資料型別有:陣列、切片、結構體、函式、map、通道、介面等 Go 語言支援兩種浮點型:float32和float64,列印浮點數時使用%f進行格式化輸出 %f 預設保留6位小數;%.2f 表示保留2位小數。 Go 語言中浮點數預設是float64型別。 Go 語言中要定義一個多行字串時,就必須使用反引號字元``這樣可以按照你現有的格式進行輸出。 Go 字串的常用操作: len(str) :求長度 + 或 fmt.Sprintf : 都是拼接字串 strings.Split : 分割 strings.contains : 判斷是否包含 strings.HasPrefix, strings.HasSuffix : 字首/字尾判斷 strings.Index(), strings.LastIndex() : 子串出現的位置 strings.Join(a[]string,sep string) : join 操作 byte 和 rune 型別: 組成每個字串的元素叫做字元,可以通過遍歷字串元素獲得字元。字元用單引號包裹起來,如下所示: a := 'a' // 當我們直接輸出byte字元的時候輸出的是這個字元對應的碼值。 fmt.Println(a) // 97 byte字元輸出時使用 %c 進行格式化輸出。 fmt.Printf("%c---", a) 位元組byte:是計算機中資料處理的基本單位,習慣上用大寫B來表示,1B(byte位元組)=8bit(位) 字元:是指計算機中使用的字母、數字、字和符號。 一個漢字佔用3個位元組,一個字母佔用一個位元組。 Go 語言的字元有以下兩種: 1. uint8 型別,或者叫byte 型別,代表了ASCII碼的一個字元。 2. rune 型別,代表一個UTF-8字元。 當需要處理中文、日文或者其他複合字符時,則需要用到rune型別。rune型別實際是一個int32。 Go 使用了特殊的rune 型別來處理Unicode,讓基於Unicode 的文字處理更為方便,也可以使用byte型別進行預設字串處理,效能和擴充套件性都有照顧。 3. rune型別實際是一個int32 4. 修改字串 要修改字串,需要先將其轉換成[]rune或[]byte,完成後再轉換為string。無論哪種轉換,都會重新分配記憶體,並賦值位元組陣列。例項如下: s1 := "big" // 強制型別轉換 byteS1 := []byte(s1) byteS1[0] = 'p' fmt.PrintLn(string(byteS1)) */ var num int64 num = 123 num2 := int32(num) fmt.Printf("值:%v, 型別%T\n", num, num) fmt.Printf("值:%v, 型別%T\n", num2, num2) fmt.Printf("%f\n", math.Pi) fmt.Printf("%.2f\n", math.Pi) num3 := 1.1 fmt.Printf("值:%v, 型別%T\n", num3, num3) d1 := 1129.6 fmt.Println((d1 * 100)) var d2 float64 = 1229.6 fmt.Println((d2 * 100)) fmt.Println((d2 - d1)) var d3 = true fmt.Println(d3, "佔用位元組:", unsafe.Sizeof(d3)) // 結果是: true 佔用位元組: 1 str := `中國萬歲, 世界萬歲, 家人萬歲, 教育萬歲。 ` // len(str) 求字串的長度 var str2 = "This is str2 ****** " fmt.Println("長度是: ", len(str2)) // strings.Split() 切割字串 fmt.Println(str) fmt.Println(strings.Split(str, "萬歲")) // 拼接字串 str3 := "This is str3 拼接字串" fmt.Println(str2 + str3) // 判斷字串是否包含 var flag = strings.Contains(str3, "字串") fmt.Println("判斷1", flag) // true // 判斷首字元和尾字母是否包含指定字串 var str4 = "this is golang" var flag2 = strings.HasPrefix(str4, "this") var flag3 = strings.HasSuffix(str4, "lang") fmt.Println("判斷2", flag2) fmt.Println("判斷3", flag3) // 判斷字串出現的位置 var HeadIndex = strings.Index(str4, "is") // 從前往後判斷 fmt.Println("從前往後判斷 is 出現的位置: ", HeadIndex) var EndIndex = strings.LastIndex(str4, "is") // 從後往前判斷 fmt.Println("從後往前判單 is 出現的位置: ", EndIndex) // Join 拼接字串 var str5 = "123-456-789" var arr1 = strings.Split(str5, "-") fmt.Println(arr1) // [123 456 789] var str6 = strings.Join(arr1, "*") fmt.Println(str6) // 123*456*789 // 字元的輸出 // 組成每個字串的元素叫做字元,可以通過遍歷字串元素獲得字元。字元用單引號包裹起來,如下所示: a := 'a' b := 'o' // 當我們直接輸出byte字元的時候輸出的是這個字元對應的碼值。 fmt.Println(a) // 97 fmt.Println(b) // 111 fmt.Printf("%c--%c\n", a, b) // 一個漢字佔用3個位元組,一個字母佔用一個位元組 color := "m" fmt.Println("長度是:", len(color)) // 長度是: 1 rest := "張" fmt.Println("長度是:", len(rest)) // 長度是: 3 // // 遍歷字串 s := "hello 你好" // byte型別處理 for i := 0; i < len(s); i++ { fmt.Printf("%v (%c) \n", s[i], s[i]) } fmt.Println("***************************") s2 := "world 世界" // rune型別處理 // 當需要處理中文、日文或者其他複合字符時,則需要用到rune 型別來處理,非常推薦。 // rune型別,代表一個UTF-8字元。rune型別來處理Unicode,讓基於Unicode的文字處理更為方便, // 也可以使用byte型別進行預設字串的處理。 for _, r := range s2 { fmt.Printf("%v (%c) \n", r, r) } // rune 型別實際是一個 int32 C3 := "營" C4 := '營' fmt.Printf("C3 的型別%T------C4 的型別%T\n", C3, C4) // C3 的型別string------C4 的型別int32 // 修改字串的步驟:1. 先強制型別轉換 (轉換成[]byte()型別或者[]rune()型別); 2.轉換後根據下標重新賦值 s1 := "big" // 強制型別轉換 byteS1 := []byte(s1) fmt.Printf("%v --- %c \n", byteS1, byteS1) // [98 105 103] --- [b i g] fmt.Println(byteS1) // 字串轉成byte後的結果: [98 105 103] byteS1[0] = 'p' fmt.Println("字串轉換後的結果: ", string(byteS1)) // 字串轉換後的結果: pig S2 := "白蘿蔔" runeS2 := []rune(S2) //runeS2[0] = "紅" // 用這個雙引號字串型別的 "紅" 就會直接報錯 。 runeS2[0] = '紅' // 需要用這個單引號的字元型別的 '紅' 。 fmt.Println("字串轉換後的結果: ", string(runeS2)) /* 上面執行的所有結果如下所示: PS C:\Users\Zhaoshan.lu\go\DaDi> go run .\05.go 值:123, 型別int64 值:123, 型別int32 3.141593 3.14 值:1.1, 型別float64 112959.99999999999 122959.99999999999 100 true 佔用位元組: 1 長度是: 25 中國萬歲, 世界萬歲, 家人萬歲, 教育萬歲。 [中國 , 世界 , 家人 , 教育 。 ] This is str2 ****** This is str3 拼接字串 判斷1 true 判斷2 true 判斷3 true 從前往後判斷 is 出現的位置: 2 從後往前判單 is 出現的位置: 5 [123 456 789] 123*456*789 97 111 a--o 長度是: 1 189 (½) *************************** 119 (w) 111 (o) 114 (r) 108 (l) 100 (d) 32 ( ) 19990 (世) 30028 (界) C3 的型別string------C4 的型別int32 [98 105 103] --- [b i g] [98 105 103] 字串轉換後的結果: pig 字串轉換後的結果: 紅蘿蔔 PS C:\Users\Zhaoshan.lu\go\DaDi> */ }