Go語言中類似if和switch的關(guān)鍵字有25個(gè);關(guān)鍵字不能用于自定義名字,只能在特定語法結(jié)構(gòu)中使用淆两。
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
還有大約30多個(gè)預(yù)定義的名字,比如int和true等拂酣,主要對(duì)應(yīng)內(nèi)建的常量秋冰、類型和函數(shù)。
內(nèi)建常量:
true false iota nil
內(nèi)建類型:
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
內(nèi)建函數(shù):
make len cap new append copy close delete
complex real imag
panic recover
算術(shù)運(yùn)算符
下表顯示了Go語言支持的所有算術(shù)運(yùn)算符婶熬。假設(shè)變量 A 的值為 10剑勾,變量 B 的值為 20,則:
運(yùn)算符 描述 示例
+ 添加兩個(gè)操作數(shù) A+B=30
- 從第一個(gè)操作數(shù)中減去第二個(gè)操作數(shù) A-B=10
* 將兩個(gè)操作數(shù)相乘 A*B=200
/ 將分子除以分母 B/A=2
% 模數(shù)運(yùn)算符赵颅,以及整數(shù)除法的余數(shù) B%A=0
++ 增加(遞增)運(yùn)算符虽另,將整數(shù)值加一 A++=11
– 相減(遞減)運(yùn)算符,將整數(shù)值減一 A—-=9
關(guān)系運(yùn)算符
下表顯示了Go語言支持的所有關(guān)系運(yùn)算符饺谬。假設(shè)變量 A 的值為 10捂刺,變量 B 的值為 20,則:
運(yùn)算符 描述 示例
== 檢查兩個(gè)操作數(shù)的值是否相等募寨,如果相等族展,則條件為真。 (A==B)結(jié)果為假
!= 檢查兩個(gè)操作數(shù)的值是否相等绪商,如果值不相等苛谷,則條件為真。 (A!=B)結(jié)果為真
> 檢查左操作數(shù)的值是否大于右操作數(shù)的值格郁,如果是,則條件為真独悴。 (A>B)結(jié)果為假
< 檢查左操作數(shù)的值是否小于右操作數(shù)的值例书,如果是,則條件為真刻炒。 (A<B)結(jié)果為真
>= 檢查左操作數(shù)的值是否大于或等于右操作數(shù)的值决采,如果是,則條件為真坟奥。 (A>=B)結(jié)果為假
<= 檢查左操作數(shù)的值是否小于或等于右操作數(shù)的值树瞭,如果是拇厢,則條件為真。 (A<=B)結(jié)果為真
邏輯運(yùn)算符
下表顯示了Go語言支持的所有邏輯運(yùn)算符晒喷。假設(shè)變量A的值為1孝偎,變量B的值為0,則:
運(yùn)算符 描述 示例
&& 邏輯AND運(yùn)算符凉敲。如果兩個(gè)操作數(shù)都不為零衣盾,則條件為真。 (A&&B)結(jié)果為真
|| 邏輯OR運(yùn)算符爷抓。如果兩個(gè)操作數(shù)中的任何一個(gè)非零势决,則條件變?yōu)檎妗?(A||B)結(jié)果為真
! 邏輯非運(yùn)算符。用于反轉(zhuǎn)其操作數(shù)的邏輯狀態(tài)蓝撇。如果條件為真果复,則邏輯非運(yùn)算符將為假。 !(A&&B)結(jié)果為真
位運(yùn)算符
按位操作符對(duì)位進(jìn)行操作渤昌,并執(zhí)行逐位操作虽抄。 &,|和^的真值表如下:
p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
假設(shè)A = 60, B = 13; 現(xiàn)在的二進(jìn)制格式耘沼,如下:
A = 0011 1100
B = 0000 1101
-----------------
A&B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Go語言支持的位運(yùn)算符,如在下表中所列极颓。 假設(shè)變量A=60,并且變量B=13群嗤,則:
運(yùn)算符 描述 示例
& 如果兩個(gè)操作數(shù)中都存在二進(jìn)制AND運(yùn)算符菠隆,則將其復(fù)制到結(jié)果。 (A&B)結(jié)果為12,也就是0000 1100
| 二進(jìn)制OR運(yùn)算符復(fù)制一個(gè)位狂秘,如果它存在于任一操作數(shù)骇径。 (A
^ 二進(jìn)制XOR運(yùn)算符復(fù)制位,如果它在一個(gè)操作數(shù)中設(shè)置者春,但不是在兩個(gè)操作數(shù)中設(shè)置破衔。 (A^B)結(jié)果為49,也就是0011 0001
? 二進(jìn)制左移位運(yùn)算符。左操作數(shù)值向左移動(dòng)由右操作數(shù)指定的位數(shù)钱烟。 A?2結(jié)果為240,也就是1111 0000
? 二進(jìn)制右移運(yùn)算符晰筛。左操作數(shù)值向右移動(dòng)由右操作數(shù)指定位數(shù)。 A?2結(jié)果為15,也就是0000 1111
賦值運(yùn)算符
Go語言支持以下賦值運(yùn)算符:
運(yùn)算符 描述 示例
= 簡(jiǎn)單賦值操作符拴袭,將值從右側(cè)操作數(shù)分配給左側(cè)操作數(shù) C=A+B读第,就是將A+B的值賦給C
+= 相加和賦值運(yùn)算符,向左操作數(shù)添加右操作數(shù)拥刻,并將結(jié)果賦給左操作數(shù) C+=A相當(dāng)于C=C+A
-= 減去和賦值運(yùn)算符怜瞒,從左操作數(shù)中減去右操作數(shù),并將結(jié)果賦給左操作數(shù) C-=A相當(dāng)于C=C-A
*= 乘法和賦值運(yùn)算符般哼,它將右操作數(shù)與左操作數(shù)相乘吴汪,并將結(jié)果賦給左操作數(shù) C=A相當(dāng)于C=CA
/= 除法和賦值運(yùn)算符惠窄,它用右操作數(shù)劃分左操作數(shù),并將結(jié)果分配給左操作數(shù) C/=A相當(dāng)于C=C/A
%= 模數(shù)和賦值運(yùn)算符漾橙,它使用兩個(gè)操作數(shù)來取模杆融,并將結(jié)果分配給左操作數(shù) C%=A相當(dāng)于C=C%A
?= 左移和賦值運(yùn)算符 C?=2相當(dāng)于C=C?2
?= 右移和賦值運(yùn)算符 C?=2相當(dāng)于C=C?2
&= 按位和賦值運(yùn)算符 C&=2相當(dāng)于C=C&2
^= 按位異或和賦值運(yùn)算符 C^=2相當(dāng)于C=C^2
= 按位包含OR和賦值運(yùn)算符
其他運(yùn)算符
還有一些其他重要的運(yùn)算符包括sizeof和? :,在Go語言中也是支持的近刘。
運(yùn)算符 描述 示例
& 返回變量的地址 &a將給出變量a的實(shí)際地址擒贸。
- 指向變量的指針 *a是指向變量a的指針。
Go語言中的運(yùn)算符優(yōu)先級(jí)
運(yùn)算符優(yōu)先級(jí)確定表達(dá)式中的分組觉渴。這會(huì)影響表達(dá)式的計(jì)算方式介劫。某些運(yùn)算符比其他運(yùn)算符具有更高的優(yōu)先級(jí); 例如,乘法運(yùn)算符比加法運(yùn)算符有更高的優(yōu)先級(jí)案淋。
當(dāng)同級(jí)別的運(yùn)算符出現(xiàn)在同一個(gè)表達(dá)式中座韵,從左到右的順序計(jì)算,比如乘除一起踢京,不管是乘在前面還是除在前面都是從左到右計(jì)算乘誉碴、除運(yùn)算符。加減亦是如此瓣距。
例如:x = 7 + 3 * 2; 這里黔帕,計(jì)算結(jié)果x被分配13,而不是20蹈丸,因?yàn)檫\(yùn)算符 *具有比+有更的優(yōu)先級(jí)成黄,所以它首先乘以3 * 2矛物,然后加上7润脸。
這里,具有最高優(yōu)先級(jí)的運(yùn)算符放在表的頂部环础,具有最低優(yōu)先級(jí)的運(yùn)算符出現(xiàn)在底部荸百。 在表達(dá)式中闻伶,將首先計(jì)算較高優(yōu)先級(jí)運(yùn)算符。
分類 描述 關(guān)聯(lián)性
后綴 ()[]->.++ – 左到右
一元 + -!~++ –(type)*&sizeof 右到左
乘法 */ % 左到右
加法 + - 左到右
移位 ?? 左到右
關(guān)系 ?=?= 左到右
相等 ==!= 左到右
按位AND & 左到右
按位XOR ^ 左到右
按位OR
邏輯AND && 左到右
邏輯OR
條件 ?: 右到左
分配 =+=-=*=/= %=?= ?= &= ^= =
逗號(hào) , 左到右
Golang中只有三種引用類型:slice(切片)够话、map(字典)蓝翰、channel(管道)