1. 程式人生 > 其它 >Go 語言基本資料型別

Go 語言基本資料型別

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>

	*/

}