1、基本數(shù)據(jù)類型
鎮(zhèn)雄網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,鎮(zhèn)雄網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為鎮(zhèn)雄上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個售后服務(wù)好的鎮(zhèn)雄做網(wǎng)站的公司定做!
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // alias for int8
rune // alias for int32,represents a Unicode code point
float32 float64
complex64 complex128
常量定義
2、類型轉(zhuǎn)換
(1)Go語言不允許隱式類型轉(zhuǎn)換(不支持小位數(shù)類型向大位數(shù)類型轉(zhuǎn))
(2)別名和原有類型也不能進行隱式類型轉(zhuǎn)換(type MyInt int64 = int64)
3、類型的預定義值
1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUInt32
4、指針類型
(1)不支持指針運算
(2)string是值類型,其默認的初始化值為空字符串,而不是nil
5、算術(shù)運算符
+ - * / % ++ --(不支持前置++ --)
6、比較運算符
#== != = =
(1)比較數(shù)組
相同維數(shù)且含有形同個數(shù)元素的數(shù)組才可以比較
每個元素都相同的才相等
7、位運算符
| ^
^ (按位置零) a (^b)
1 ^ 0 1
1 ^ 1 0
0 ^ 1 0
0 ^ 0 0
8、條件與循環(huán)
(1)循環(huán)
Go 語?僅?持循環(huán)關(guān)鍵字 for
(2)條件
9、數(shù)組和切片
數(shù)組截取,索引下標從0開始計數(shù)
a[開始索引(包含), 結(jié)束索引(不包含)]
a := [...]int{1, 2, 3, 4, 5}
a[1:2] //2
a[1:3] //2,3
a[1:len(a)] //2,3,4,5
a[1:] //2,3,4,5
a[:3] //1,2,3
切片內(nèi)部結(jié)構(gòu)
9、Map
9、字符串
Unicode UTF8
常?字符串函數(shù)
首先說一下go中的字符串類型:
字符串就是一串固定長度的字符連接起來的字符序列。Go的字符串是由單個字節(jié)連接起來的。Go語言的字符串的字節(jié)使用UTF-8編碼標識Unicode文本。
下面介紹字符串的三種遍歷方式,根據(jù)實際情況選擇即可。
該遍歷方式==缺點==:遍歷是按照字節(jié)遍歷,因此如果有中文等非英文字符,就會出現(xiàn)亂碼,比如要遍歷"abc北京"這個字符串,效果如下:
可見這不是我們想要的效果,根據(jù)utf-8中文編碼規(guī)則,我們要str[3]str[4]str[5]三個字節(jié)合起來組成“北”字及 str[6]str[7]str[8]合起來組成“京”字。由此引出下面第二種遍歷方法。
該方式是按照字符遍歷的,所以不會出現(xiàn)亂碼,如下:
運行結(jié)果:
從圖中可以看到第二個漢子“京”的開始下標是6,直接跳過了4和5,可見確實依照utf8編碼方式將三個字節(jié)組合成了一個漢字,str[3]-str[5]組合成“北”字,str[6]-str[8]組合成了“京”字。
由于下標的不確定性,所以引出了下面的遍歷方式。
1 可以先將字符串轉(zhuǎn)成 []rune 切片
2 再用常規(guī)方法進行遍歷
運行效果:
由此可見下標是按1遞增的,沒有產(chǎn)生跳躍現(xiàn)象。
rune是Go語言中一種特殊的數(shù)據(jù)類型,它是int32的別名,幾乎在所有方面等同于int32,用于區(qū)分字符值和整數(shù)值,官方解釋如下:
下面我們通過一個例子來看一下:
我們猜測一下結(jié)果,hello5 個字符+1 個空格+3 個漢子,算起來應該是 9 個,長度為 9 才對,但是我們執(zhí)行一下,
結(jié)果打印是 15,這是為什么呢?
所以計算出的長度就等于 5+1+3*3=15
如果我們需要計算出字符串的長度,而不是底層字節(jié)的個數(shù),那么可以使用下面的方法:
運行結(jié)果如下:
在 rune 定義上方還有一個,byte = uint8
byte 等同于int8,常用來處理ascii字符
rune 等同于int32,常用來處理unicode或utf-8字符
golang中string底層是通過byte數(shù)組實現(xiàn)的。中文字符在unicode下占2個字節(jié),在utf-8編碼下占3個字節(jié),而golang默認編碼正好是utf-8。
如果我們預期想得到一個字符串的長度,而不是字符串底層占得字節(jié)長度,該怎么辦呢?