欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

重學(xué)Go語言之運(yùn)算符與控制結(jié)構(gòu)詳解

 更新時(shí)間:2023年02月28日 14:45:51   作者:程序員讀書  
對于任何編程語言來說,運(yùn)算符和控制結(jié)構(gòu)都算是最基礎(chǔ)的知識了,既然是基礎(chǔ),當(dāng)然非常有必要學(xué)習(xí),因此在這篇文章中我們就來討論一下

運(yùn)算符

運(yùn)算符的作用是將操作數(shù)組合成表達(dá)式,比如下面的代碼中,我們通過賦值和加號組成了兩個(gè)表達(dá)式:

var i,j = 1,2
n := i + j

Go的運(yùn)算符大體分為六種:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符和指針運(yùn)算符。

算術(shù)運(yùn)算符

運(yùn)算符含義
+加號,除了用于整數(shù),浮點(diǎn)數(shù),復(fù)數(shù)外,還可以用于字符串的拼接
-減號
*相乘
/相除
%求余,只能用于整數(shù)
++自增
--自減
+正數(shù),注意與加號(+)的區(qū)別
-負(fù)數(shù),注意與減號(-)的區(qū)別

用法示例:

var str1 string = "hello"
var str2 string = "world"
str := str1 + str2 //使用+號拼接字符串

i := 3.2 % 2 //報(bào)錯(cuò),只能對整數(shù)求余

var n int = 1
n++ 
++n //錯(cuò)誤,自增只能加了操作數(shù)后面,自減也是同樣的

關(guān)系運(yùn)算符

通過邏輯運(yùn)算符組成的表達(dá)式,其計(jì)算結(jié)果為布爾值,一般用于控制結(jié)構(gòu)的條件部分:

運(yùn)算符含義
==相等
!=不相等
<=小于或等于
<小于
>=大于或等于

用法示例:

if 2 == (1 + 1) {
	fmt.Println("相等")
}

邏輯運(yùn)算符

邏輯運(yùn)算符組成的表達(dá)式,其計(jì)算結(jié)果也同樣蠅布爾值,因此也用于控制結(jié)構(gòu)的條件部分:

運(yùn)算符含義
&&邏輯與
||邏輯或
!邏輯非,一元運(yùn)算符,具有較高的優(yōu)先級

位運(yùn)算符

位運(yùn)算符只能用于整數(shù)

運(yùn)算符含義
&按位與,兩個(gè)操作數(shù)都1的位置為1,否為0
|按位或,兩個(gè)操作數(shù)只要有1的位置,都為1,否則為0
按位異或,兩個(gè)操作數(shù)都相同為0,否則為1
<<按位左移
>>按位右移
&^按位清空,根據(jù)右邊操作數(shù)為1的位置,將左邊對應(yīng)位置設(shè)為0。

用法示例:

fmt.Println(2 & 1) // 00000010 & 00000001,可以看出,沒有哪個(gè)位置兩個(gè)操作都為1,因此結(jié)果為:00000000
fmt.Println(2 | 1) // 00000010 & 00000001,結(jié)果為00000011,也就是3
fmt.Println(2 ^ 1) // 00000010 & 00000001,結(jié)果為00000011,也就是3

fmt.Println(1 << 1) //00000001 => 00000010 
fmt.Println(2 >> 1) //00000010 => 00000001

fmt.Println(23 &^ 5) 00010111 &^ 00000101 => 00010010 

賦值運(yùn)算符

運(yùn)算符含義
= :=賦值
+=先將左側(cè)與右側(cè)的操作數(shù)相加,再賦值給左邊的變量
-=先將左側(cè)與右側(cè)的操作數(shù)相減,再賦值給左邊的變量
*=先將左側(cè)與右側(cè)的操作數(shù)相乘,再賦值給左邊的變量
/=先將左側(cè)與右側(cè)的操作數(shù)相除,再賦值給左邊的變量
%=先將左側(cè)與右側(cè)的操作數(shù)求余,再賦值給左邊的變量
<<=先將左側(cè)的操作數(shù)按右側(cè)的操作數(shù)向左位移,再將位移結(jié)果賦給左邊的變量
>>=先將左側(cè)的操作數(shù)按右側(cè)的操作數(shù)向右位移,再將位移結(jié)果賦給左邊的變量
&=先將左側(cè)與右側(cè)的操作數(shù)進(jìn)行按位與計(jì)算,再將計(jì)算結(jié)果賦給左邊的變量
!=先將左側(cè)與右側(cè)的操作數(shù)進(jìn)行按位或計(jì)算,再將計(jì)算結(jié)果賦給左邊的變量
^=先將左側(cè)與右側(cè)的操作數(shù)進(jìn)行按異或計(jì)算,再將計(jì)算結(jié)果賦給左邊的變量

指針運(yùn)算符

運(yùn)算符含義
&獲取變量在內(nèi)存中的地址
*聲明指針變量

運(yùn)算符的優(yōu)先級

Go的++與--運(yùn)算符作用于操作數(shù)時(shí)形成的是表達(dá)式,因此不納入運(yùn)算符的優(yōu)先級中。

在Go語言中,一元運(yùn)算符具有更高的優(yōu)先級,如+(正數(shù)), -(負(fù)數(shù)),!(取反),*(指針聲明), &(取址)。

而賦值運(yùn)算符的優(yōu)先級最低,除了一元運(yùn)算符以及賦值運(yùn)算符外,剩下的運(yùn)算符可以劃分為五個(gè)優(yōu)先等級:

優(yōu)先級運(yùn)算符
5* / % << >> & &^
4+ - | ^
3== != < <= >= >
2&&
1||

控制結(jié)構(gòu)

Go的控制結(jié)構(gòu)包括if語句、for語句和switch語句三種。

If

if語句用于判斷某個(gè)條件是否滿足,如果滿足,則執(zhí)行if語句中的代碼塊,如果不滿足,則忽略if語句中的代碼塊并繼續(xù)向后執(zhí)行。

最簡單的if語句結(jié)構(gòu)為:

if boolean expression {
	// do something	
}

其中boolean expression為一個(gè)可以得到布爾值的表達(dá)式,當(dāng)布爾值為true,會(huì)執(zhí)行if語句中的代碼塊,如:

if 2 < 10 {
	fmt.Println("ok")
}

除了用于判斷的boolean expression外,if也可以包含一個(gè)初始化表達(dá)式:

if initialization;boolean expression{
	// do something	
}

這種情況下,if會(huì)先執(zhí)行初始化表達(dá)式,之后再判斷boolean expression得到的布爾是否為true

if i = 10;i < 100 {
	fmt.Println("ok")
}

if語句后面也可以跟上else語句,當(dāng)然if條件不滿足時(shí),會(huì)執(zhí)行else語句中的代碼塊:

if boolean expression{
	// do something	
}else{
	// do something	
}

用法示例:

if i = 11;i < 11{
	fmt.Println("ok")
}else{
	fmt.Println("bad")
}

如果有多個(gè)分支條件判斷,可以在if語句后面跟上多個(gè)else if 語句,最后可以跟上else語句,當(dāng)所有條件都不滿足時(shí),會(huì)執(zhí)行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語句用于根據(jù)條件循環(huán)執(zhí)行其中的代碼塊,最簡單的for語句格式如下:

for condition {
	//do something
}

condition為一個(gè)可得到布爾值的表達(dá)式,Go語言中并沒有while或者do-while語句,因此這種方式的用法接近其他編程語言的while或者do-while語句:

x := 1
for x < 20{
	fmt.Println(x)
	x++
}

如果condition為空,那么此時(shí)for則為死循環(huán):

for {
	//do something
}

for最經(jīng)典,在其他編程語言也有的用法是下面這種形式:

for init statement;condition;post statement{
	//do something
}

用法示例:

for i := 0; i< 10 ;i++ {
	fmt.Println(i)
}

另外,for語句還與關(guān)鍵字range配合,可以用于遍歷數(shù)組、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關(guān)鍵字結(jié)束循環(huán)

for i := 0; i < 10; i++ {
	if i == 5 {
		break
	}
	fmt.Println(i)
}

使用continue結(jié)束跳過單次循環(huán):

for i := 0;i<10;i++{
	if i == 5 {
		continue
	}
	fmt.Println(i)
}

Switch

Switch與if類似,用于根據(jù)條件執(zhí)行滿足條件的代碼塊,但其用法與if不同,switch有幾種不同的用法:

第一種使用方法會(huì)將switch后面的值與case后面所跟的值進(jìn)行比較,滿足條件則執(zhí)行case中的代碼塊,如果都不滿足,則執(zhí)行default中的代碼塊,其結(jié)構(gòu)如下所示:

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")
}

從上面的例子可以看出,在滿足某個(gè)條件后,switch執(zhí)行完該分支就會(huì)退出switch語句,不需要像其他編程語言一樣使用break來退出switch語句。

如果不想退出switch語句,需要繼續(xù)讓switch語句往下執(zhí)行,可以在case語句內(nèi)使用fallthrough關(guān)鍵詞:

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語句,所以繼續(xù)往下執(zhí)行,接著繼續(xù)碰到fallthrough語句,再繼續(xù)執(zhí)行,因此三個(gè)case代碼塊都會(huì)被執(zhí)行。

switch的另一種用法是將后面的變量省略,而把執(zhí)行的判斷條件放在case關(guān)鍵詞后面,這個(gè)用法與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后面可以跟上一個(gè)初始化語句:

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-switchswitch語句的另一種用法,主要用于類型斷言,后續(xù)在學(xué)習(xí)接口(interface)再介紹

小結(jié)

總結(jié)一下,這篇文章主要講了三點(diǎn):

1.Go支持的運(yùn)算符:

  • 算術(shù)運(yùn)算符
  • 關(guān)系運(yùn)算符
  • 邏輯運(yùn)算符
  • 賦值運(yùn)算符
  • 位運(yùn)算符
  • 指針運(yùn)算符

2.運(yùn)算符的優(yōu)化級

3.Go支持的控制結(jié)構(gòu):

  • If語句
  • For語句
  • Switch語句

到此這篇關(guān)于重學(xué)Go語言之運(yùn)算符與控制結(jié)構(gòu)詳解的文章就介紹到這了,更多相關(guān)Go語言 運(yùn)算符 控制結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解如何在Go中實(shí)現(xiàn)優(yōu)雅停止

    詳解如何在Go中實(shí)現(xiàn)優(yōu)雅停止

    和其他語言相比,Go 中有相同也有不同,相同的是實(shí)現(xiàn)思路上和其他語言沒啥差異,不同在于 Go 采用的是 goroutine + channel 的并發(fā)模型,與傳統(tǒng)的進(jìn)程線程相比,實(shí)現(xiàn)細(xì)節(jié)上存在差異,本文將從實(shí)際場景和它的一般實(shí)現(xiàn)方式展開,逐步討論這個(gè)話題,需要的朋友可以參考下
    2024-04-04
  • 詳解Go語言如何實(shí)現(xiàn)并發(fā)安全的map

    詳解Go語言如何實(shí)現(xiàn)并發(fā)安全的map

    go語言提供的數(shù)據(jù)類型中,只有channel是并發(fā)安全的,基礎(chǔ)map并不是并發(fā)安全的,本文為大家整理了三種實(shí)現(xiàn)了并發(fā)安全的map的方案,有需要的可以參考下
    2023-12-12
  • Golang 中整數(shù)轉(zhuǎn)字符串的方法

    Golang 中整數(shù)轉(zhuǎn)字符串的方法

    這篇文章主要介紹了Golang 中整數(shù)轉(zhuǎn)字符串的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • go切片和指針切片示例詳解

    go切片和指針切片示例詳解

    在Go語言中,切片(Slice)和指針的切片(即切片中每個(gè)元素都是指向某種數(shù)據(jù)類型的指針)是兩個(gè)不同的概念,它們各自具有特定的用途和優(yōu)勢,這篇文章主要介紹了go切片和指針切片,需要的朋友可以參考下
    2024-04-04
  • Beego AutoRouter工作原理解析

    Beego AutoRouter工作原理解析

    這篇文章主要為大家介紹了Beego AutoRouter工作原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Golang中時(shí)間相關(guān)操作合集

    Golang中時(shí)間相關(guān)操作合集

    這篇文章主要為大家介紹了Golang中的各種時(shí)間相關(guān)操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • golang?中?channel?的詳細(xì)使用、使用注意事項(xiàng)及死鎖問題解析

    golang?中?channel?的詳細(xì)使用、使用注意事項(xiàng)及死鎖問題解析

    這篇文章主要介紹了golang?中?channel?的詳細(xì)使用、使用注意事項(xiàng)及死鎖分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • go自動(dòng)下載所有的依賴包go module使用詳解

    go自動(dòng)下載所有的依賴包go module使用詳解

    這篇文章主要介紹了go自動(dòng)下載所有的依賴包go module使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • golang?run時(shí)報(bào)undefined錯(cuò)誤的解決

    golang?run時(shí)報(bào)undefined錯(cuò)誤的解決

    這篇文章主要介紹了golang?run時(shí)報(bào)undefined錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • golang中日期操作之日期格式化及日期轉(zhuǎn)換

    golang中日期操作之日期格式化及日期轉(zhuǎn)換

    在編程中,程序員會(huì)經(jīng)常使用到日期相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于golang中日期操作之日期格式化及日期轉(zhuǎn)換的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評論