您好,登錄后才能下訂單哦!
這篇文章主要講解了“Go語言運算符與控制結構實例代碼分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Go語言運算符與控制結構實例代碼分析”吧!
運算符的作用是將操作數組合成表達式,比如下面的代碼中,我們通過賦值和加號組成了兩個表達式:
var i,j = 1,2 n := i + j
Go的運算符大體分為六種:算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符和指針運算符。
運算符 | 含義 |
---|---|
+ | 加號,除了用于整數,浮點數,復數外,還可以用于字符串的拼接 |
- | 減號 |
* | 相乘 |
/ | 相除 |
% | 求余,只能用于整數 |
++ | 自增 |
-- | 自減 |
+ | 正數,注意與加號(+)的區別 |
- | 負數,注意與減號(-)的區別 |
用法示例:
var str1 string = "hello" var str2 string = "world" str := str1 + str2 //使用+號拼接字符串 i := 3.2 % 2 //報錯,只能對整數求余 var n int = 1 n++ ++n //錯誤,自增只能加了操作數后面,自減也是同樣的
通過邏輯運算符組成的表達式,其計算結果為布爾值,一般用于控制結構的條件部分:
運算符 | 含義 |
---|---|
== | 相等 |
!= | 不相等 |
<= | 小于或等于 |
< | 小于 |
>= | 大于或等于 |
用法示例:
if 2 == (1 + 1) { fmt.Println("相等") }
邏輯運算符組成的表達式,其計算結果也同樣蠅布爾值,因此也用于控制結構的條件部分:
運算符 | 含義 |
---|---|
&& | 邏輯與 |
|| | 邏輯或 |
! | 邏輯非,一元運算符,具有較高的優先級 |
位運算符只能用于整數
運算符 | 含義 |
---|---|
& | 按位與,兩個操作數都1的位置為1,否為0 |
| | 按位或,兩個操作數只要有1的位置,都為1,否則為0 |
按位異或,兩個操作數都相同為0,否則為1 | |
<< | 按位左移 |
>> | 按位右移 |
&^ | 按位清空,根據右邊操作數為1的位置,將左邊對應位置設為0。 |
用法示例:
fmt.Println(2 & 1) // 00000010 & 00000001,可以看出,沒有哪個位置兩個操作都為1,因此結果為:00000000 fmt.Println(2 | 1) // 00000010 & 00000001,結果為00000011,也就是3 fmt.Println(2 ^ 1) // 00000010 & 00000001,結果為00000011,也就是3 fmt.Println(1 << 1) //00000001 => 00000010 fmt.Println(2 >> 1) //00000010 => 00000001 fmt.Println(23 &^ 5) 00010111 &^ 00000101 => 00010010
運算符 | 含義 |
---|---|
= := | 賦值 |
+= | 先將左側與右側的操作數相加,再賦值給左邊的變量 |
-= | 先將左側與右側的操作數相減,再賦值給左邊的變量 |
*= | 先將左側與右側的操作數相乘,再賦值給左邊的變量 |
/= | 先將左側與右側的操作數相除,再賦值給左邊的變量 |
%= | 先將左側與右側的操作數求余,再賦值給左邊的變量 |
<<= | 先將左側的操作數按右側的操作數向左位移,再將位移結果賦給左邊的變量 |
>>= | 先將左側的操作數按右側的操作數向右位移,再將位移結果賦給左邊的變量 |
&= | 先將左側與右側的操作數進行按位與計算,再將計算結果賦給左邊的變量 |
!= | 先將左側與右側的操作數進行按位或計算,再將計算結果賦給左邊的變量 |
^= | 先將左側與右側的操作數進行按異或計算,再將計算結果賦給左邊的變量 |
運算符 | 含義 |
---|---|
& | 獲取變量在內存中的地址 |
* | 聲明指針變量 |
Go的++與--運算符作用于操作數時形成的是表達式,因此不納入運算符的優先級中。
在Go語言中,一元運算符具有更高的優先級,如+(正數), -(負數),!(取反),*(指針聲明), &(取址)。
而賦值運算符的優先級最低,除了一元運算符以及賦值運算符外,剩下的運算符可以劃分為五個優先等級:
優先級 | 運算符 |
---|---|
5 | * / % << >> & &^ |
4 | + - | ^ |
3 | == != < <= >= > |
2 | && |
1 | || |
Go的控制結構包括if
語句、for
語句和switch
語句三種。
if
語句用于判斷某個條件是否滿足,如果滿足,則執行if語句中的代碼塊,如果不滿足,則忽略if
語句中的代碼塊并繼續向后執行。
最簡單的if
語句結構為:
if boolean expression { // do something }
其中boolean expression
為一個可以得到布爾值的表達式,當布爾值為true
,會執行if
語句中的代碼塊,如:
if 2 < 10 { fmt.Println("ok") }
除了用于判斷的boolean expression
外,if
也可以包含一個初始化表達式:
if initialization;boolean expression{ // do something }
這種情況下,if
會先執行初始化表達式,之后再判斷boolean expression
得到的布爾是否為true
:
if i = 10;i < 100 { fmt.Println("ok") }
if
語句后面也可以跟上else
語句,當然if
條件不滿足時,會執行else
語句中的代碼塊:
if boolean expression{ // do something }else{ // do something }
用法示例:
if i = 11;i < 11{ fmt.Println("ok") }else{ fmt.Println("bad") }
如果有多個分支條件判斷,可以在if
語句后面跟上多個else if 語句,最后可以跟上else
語句,當所有條件都不滿足時,會執行else
語句中的代碼塊:
if boolean expression1 { // do something } else if boolean expression2 { // do something else } else if boolean expression3 { // do something else }else { // catch-all or default }
for
語句用于根據條件循環執行其中的代碼塊,最簡單的for
語句格式如下:
for condition { //do something }
condition
為一個可得到布爾值的表達式,Go
語言中并沒有while
或者do-while
語句,因此這種方式的用法接近其他編程語言的while
或者do-while
語句:
x := 1 for x < 20{ fmt.Println(x) x++ }
如果condition
為空,那么此時for
則為死循環:
for { //do something }
for
最經典,在其他編程語言也有的用法是下面這種形式:
for init statement;condition;post statement{ //do something }
用法示例:
for i := 0; i< 10 ;i++ { fmt.Println(i) }
另外,for
語句還與關鍵字range
配合,可以用于遍歷數組、map
和切片等,其作用類似PHP
中的foreach
語句:
for k,v := range array { //do something }
用法示例:
var a [10]int = [10]int{1,2,3,4,5,6,7,8,9,10} for index,value := range a { fmt.Println(index,value) }
使用break
關鍵字結束循環
for i := 0; i < 10; i++ { if i == 5 { break } fmt.Println(i) }
使用continue
結束跳過單次循環:
for i := 0;i<10;i++{ if i == 5 { continue } fmt.Println(i) }
Switch
與if類似,用于根據條件執行滿足條件的代碼塊,但其用法與if
不同,switch
有幾種不同的用法:
第一種使用方法會將switch后面的值與case后面所跟的值進行比較,滿足條件則執行case
中的代碼塊,如果都不滿足,則執行default
中的代碼塊,其結構如下所示:
switch var1 { case val1: ... case val2: ... default: ... }
用法示例:
var x = 8 switch x { case 8 : fmt.Println("8") case 9 : fmt.Println("9") case 10 : fmt.Println("10") default : fmt.Println("not found") }
從上面的例子可以看出,在滿足某個條件后,switch執行完該分支就會退出switch語句,不需要像其他編程語言一樣使用break
來退出switch
語句。
如果不想退出switch語句,需要繼續讓switch語句往下執行,可以在case
語句內使用fallthrough
關鍵詞:
var x = 8 switch x { case 8 : fmt.Println("8") fallthrough case 9 : fmt.Println("9") fallthrough case 10 : fmt.Println("10") default : fmt.Println("not found") }
上面語句在匹配到case 8:
之后,碰到了fallthrough
語句,所以繼續往下執行,接著繼續碰到fallthrough
語句,再繼續執行,因此三個case代碼塊都會被執行。
switch
的另一種用法是將后面的變量省略,而把執行的判斷條件放在case
關鍵詞后面,這個用法與if/elseif
語句類似:
switch { case condition1: ... case condition2: ... default: ... }
用法示例:
x := 10 switch { case x >= 10: fmt.Println("10") case x > 11: fmt.Println("11") default: fmt.Println("not found") }
switch
后面可以跟上一個初始化語句:
switch initialization { case condition1: ... case condition2: ... default: ... }
用法示例:
switch x := 10; { case x >= 10: fmt.Println("10") case x > 11: fmt.Println("11") default: fmt.Println("not found") }
type-switch
是switch
語句的另一種用法,主要用于類型斷言。
感謝各位的閱讀,以上就是“Go語言運算符與控制結構實例代碼分析”的內容了,經過本文的學習后,相信大家對Go語言運算符與控制結構實例代碼分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。