值類型:基本數(shù)據(jù)類型int系列,float系列翘鸭,bool滴铅,string,數(shù)組就乓,結(jié)構(gòu)體struct汉匙。
引用類型:指針,切片slice生蚁,map噩翠,interface,管道chan等都是引用類型
基本數(shù)據(jù)類型
整型
兩類
有符號(hào)整數(shù)
int8守伸、int16绎秒、int32、int64?
無符號(hào)整數(shù)
uint8尼摹、uint16见芹、uint32、uint64
特別的整型:uint,int,uintptr
前兩種類型:隨著操作系統(tǒng)是多少位蠢涝,就是多少位的類型
最后一個(gè)為無符號(hào)整型:用于存放一個(gè)指針
數(shù)字字面整型:
fmt.Printf("%__", 變量名)
八進(jìn)制:%o
十六進(jìn)制:%x |%X
二進(jìn)制:%b
十進(jìn)制:%d
八進(jìn)制以0開頭
十六進(jìn)制0x開頭
浮點(diǎn)數(shù)
float32
float64
復(fù)數(shù)
complex64
complex128
布爾值
true
false
字符串轉(zhuǎn)義符
字符串
utf-8
? ? ? ? ? ? ? ? s1 := "你好"
fmt.Println(s1)
//字符串轉(zhuǎn)義符
fmt.Println("str = \"E:\\GOPROJECT\\go.exe\"")
//多行字符串
s2 := `第一行
? 第二行
? 第三行`
fmt.Println(s2)
字符串常用操作
長度:len(str)
拼接:+玄呛,fmt.Sprintf
分割:strings.Split
是否包含:strings.contains(str,"xxx")
開頭:strings.HasPrefix(str, "xx")
結(jié)尾:stings.HasSuffix(str,"d")
首次出現(xiàn)位置:strings.Index(str,"x")
最后:strings.LastIndex(str,"x")
出現(xiàn)次數(shù):stings.Count
重復(fù):strings.Repeat(str,2)
轉(zhuǎn)大寫:strings.ToLower()
小寫:strings.ToUpper()
鏈接切片Join(str,"-")
去掉字符串首/尾部指定的字符:TrimLeft(str,"x"):TrimRight(str,"x")
去掉收尾的空格:TrimSpace(str2)
? ? ? ? ? ? ? ? str2 := "? hello world tt"
//去掉字符串首尾指定的字符
fmt.Println(strings.Trim(str2,"t")) //? hello world
fmt.Println(strings.Trim(str2,"ttt")) //注意相同的字母即時(shí)數(shù)量比str的多也能去掉? hello world
fmt.Println(strings.Trim(str2,"? ")) //去除首尾空格hello world tt
fmt.Println(strings.Trim(str2,"b")) //沒有b時(shí)不報(bào)錯(cuò)返回原字符串? hello world tt
字符
byte---uint8
rune
? ? ? ? ? ? ? ? //遍歷字符串
func traversalString() {
? s := "hello沙河"
? for i := 0; i < len(s); i++ { //byte
? ? ? fmt.Printf("%v(%c)", s[i], s[i])
? }
? fmt.Println()
? for _, r := range s { //rune
? ? ? fmt.Printf("%v(%c)", r, r)
? }
? 104(h)101(e)108(l)108(l)111(o)230(?)178(2)153(NUll)230(?)178(2)179(3)
? 104(h)101(e)108(l)108(l)111(o)27801(沙)27827(河)
? fmt.Println()
}
因?yàn)閁TF8編碼下一個(gè)中文漢字由3~4個(gè)字節(jié)組成,所以我們不能簡單的按照字節(jié)去遍歷一個(gè)包含中文的字符串和二,否則就會(huì)出現(xiàn)上面輸出中第一行的結(jié)果徘铝。
字符串底層是一個(gè)byte數(shù)組,所以可以和[]byte類型相互轉(zhuǎn)換惯吕。字符串是不能修改的 字符串是由byte字節(jié)組成惕它,所以字符串的長度是byte字節(jié)的長度。 rune類型用來表示utf8字符废登,一個(gè)rune字符由一個(gè)或多個(gè)byte組成淹魄。
修改字符串
字符串是不可修改的,任何修改堡距,都會(huì)重新分配內(nèi)存
? ? ? ? ? ? ? ? func changeString() {
? ? s1 := "big"
? ? byteS1 = []byte(s1)
? ? byteS1[0]:= 'p'
? ? fmt.Println(sting(byteS1))
? ? s2 := "白蘿卜"
? ? runeS2 := []rune(s2)
? ? runeS2[0] = '紅'
? ? fmt.Println(string(runeS2))
}
類型轉(zhuǎn)換
只有強(qiáng)制類型轉(zhuǎn)換
T(表達(dá)式)? T:要轉(zhuǎn)換的類型 表達(dá)式:變量甲锡,復(fù)雜算子,函數(shù)返回值
? ? ? ? ? ? ? ? //類型轉(zhuǎn)換
func sqrtDemo() {
? var a, b = 3, 4
? var c int
? // math.Sqrt():開方 參數(shù)為浮點(diǎn)型 強(qiáng)制類型裝換
? c = int(math.Sqrt(float64(a*a + b*b)))
? fmt.Printf("%d", c)
}