Go語(yǔ)言語(yǔ)法基礎(chǔ)之算術(shù)符示例詳解
一、引言
1、Go語(yǔ)言簡(jiǎn)介
Go語(yǔ)言,又稱(chēng)Golang,是由Google公司開(kāi)發(fā)的一種現(xiàn)代編程語(yǔ)言。它起源于2007年,并在2009年正式對(duì)外發(fā)布。Go語(yǔ)言旨在提高軟件開(kāi)發(fā)的效率、可靠性和可維護(hù)性,特別在處理并發(fā)性方面表現(xiàn)出色。
2、Go語(yǔ)言特點(diǎn)
- 并發(fā)性支持:Go語(yǔ)言?xún)?nèi)置并發(fā)性支持,允許開(kāi)發(fā)者構(gòu)建高度并發(fā)和可擴(kuò)展的應(yīng)用。它提供了goroutine(輕量級(jí)線(xiàn)程)和channel(通信管道)等功能,簡(jiǎn)化了并發(fā)編程。
- 垃圾回收:Go語(yǔ)言擁有高效的垃圾回收機(jī)制,自動(dòng)釋放不再使用的內(nèi)存。這減輕了開(kāi)發(fā)者管理內(nèi)存的負(fù)擔(dān),提高了程序的穩(wěn)定性和可靠性。
- 類(lèi)型安全:Go語(yǔ)言是一種強(qiáng)類(lèi)型語(yǔ)言,提供了嚴(yán)格的類(lèi)型檢查機(jī)制。這有助于捕獲類(lèi)型錯(cuò)誤,確保代碼的可靠性。
- 跨平臺(tái)性:Go語(yǔ)言編譯成可執(zhí)行文件后,可以在不同的操作系統(tǒng)(如Linux、Windows、macOS)上運(yùn)行,無(wú)需進(jìn)行重新編譯。
- 高性能:Go語(yǔ)言編譯器生成高度優(yōu)化的機(jī)器代碼,使程序運(yùn)行速度快且資源消耗低。它特別適合處理高并發(fā)和數(shù)據(jù)密集型應(yīng)用。
二、算術(shù)符
1、算術(shù)運(yùn)算符
示例代碼
package main import ( "fmt" ) func main() { a := 10.5 b := 5.25 // 加法 sum := a + b fmt.Printf("Sum: %.2f\n", sum) // 減法 difference := a - b fmt.Printf("Difference: %.2f\n", difference) // 乘法 product := a * b fmt.Printf("Product: %.2f\n", product) // 除法 quotient := a / b fmt.Printf("Quotient: %.2f\n", quotient) }
輸出結(jié)果運(yùn)行上述代碼后,輸出結(jié)果如下:
Sum: 15.75
Difference: 5.25
Product: 55.13
Quotient: 2.00
2、關(guān)系運(yùn)算符
在 Go 語(yǔ)言中,關(guān)系運(yùn)算符用于比較兩個(gè)值,并返回一個(gè)布爾值(true 或 false),表示比較的結(jié)果。關(guān)系運(yùn)算符主要包括以下幾種:
- 等于 (==):檢查兩個(gè)操作數(shù)是否相等。
- 不等于 (!=):檢查兩個(gè)操作數(shù)是否不相等。
- 大于 (>):檢查左邊的操作數(shù)是否大于右邊的操作數(shù)。
- 小于 (<):檢查左邊的操作數(shù)是否小于右邊的操作數(shù)。
- 大于等于 (>=):檢查左邊的操作數(shù)是否大于或等于右邊的操作數(shù)。
- 小于等于 (<=):檢查左邊的操作數(shù)是否小于或等于右邊的操作數(shù)。
示例代碼下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用這些關(guān)系運(yùn)算符:
package main import ( "fmt" ) func main() { a := 10 b := 5 // 等于 isEqual := a == b fmt.Printf("%d == %d: %v\n", a, b, isEqual) // 不等于 isNotEqual := a != b fmt.Printf("%d != %d: %v\n", a, b, isNotEqual) // 大于 isGreater := a > b fmt.Printf("%d > %d: %v\n", a, b, isGreater) // 小于 isLess := a < b fmt.Printf("%d < %d: %v\n", a, b, isLess) // 大于等于 isGreaterOrEqual := a >= b fmt.Printf("%d >= %d: %v\n", a, b, isGreaterOrEqual) // 小于等于 isLessOrEqual := a <= b fmt.Printf("%d <= %d: %v\n", a, b, isLessOrEqual) }
輸出結(jié)果運(yùn)行上述代碼后,輸出結(jié)果如下:
10 == 5: false
10 != 5: true
10 > 5: true
10 < 5: false
10 >= 5: true
10 <= 5: false
3、邏輯運(yùn)算符
在 Go 語(yǔ)言中,邏輯運(yùn)算符用于組合條件表達(dá)式,并返回布爾值。邏輯運(yùn)算符主要有三種:
- 邏輯與 (&&):只有當(dāng)兩邊的操作數(shù)都為 true 時(shí),整個(gè)表達(dá)式才為 true。
- 邏輯或 (||):只要任意一邊的操作數(shù)為 true,整個(gè)表達(dá)式就為 true。
- 邏輯非 (!):反轉(zhuǎn)操作數(shù)的布爾值。
示例代碼下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用這些邏輯運(yùn)算符:
package main import ( "fmt" ) func main() { a := true b := false // 邏輯與 (&&) andResult := a && b fmt.Printf("%t && %t = %t\n", a, b, andResult) // 邏輯或 (||) orResult := a || b fmt.Printf("%t || %t = %t\n", a, b, orResult) // 邏輯非 (!) notA := !a fmt.Printf("!%t = %t\n", a, notA) notB := !b fmt.Printf("!%t = %t\n", b, notB) }
輸出結(jié)果運(yùn)行上述代碼后,輸出結(jié)果如下:
true && false = false
true || false = true
!true = false
!false = true
4、位運(yùn)算符
在 Go 語(yǔ)言中,位運(yùn)算符用于對(duì)整數(shù)類(lèi)型的變量或常量進(jìn)行按位操作。位運(yùn)算符主要包含以下幾個(gè):
- 按位與 (&):對(duì)兩個(gè)操作數(shù)的每一位進(jìn)行與操作,對(duì)應(yīng)位都為 1 時(shí)結(jié)果為 1,否則為 0。
- 按位或 (|):對(duì)兩個(gè)操作數(shù)的每一位進(jìn)行或操作,對(duì)應(yīng)位有一個(gè)為 1 時(shí)結(jié)果為 1,否則為 0。
- 按位異或 (^):對(duì)兩個(gè)操作數(shù)的每一位進(jìn)行異或操作,對(duì)應(yīng)位相同為 0,不同為 1。
- 按位取反 (^):對(duì)單個(gè)操作數(shù)的每一位進(jìn)行取反操作,1 變?yōu)?0,0 變?yōu)?1。
- 左移 (<<):將操作數(shù)的二進(jìn)制表示向左移動(dòng)指定位數(shù),高位補(bǔ)零。
- 右移 (>>):將操作數(shù)的二進(jìn)制表示向右移動(dòng)指定位數(shù),低位補(bǔ)零或符號(hào)擴(kuò)展(對(duì)于負(fù)數(shù))。
示例代碼下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用這些位運(yùn)算符:
package main import ( "fmt" ) func main() { a := 0b1010 // 二進(jìn)制表示為 1010,即十進(jìn)制的 10 b := 0b1100 // 二進(jìn)制表示為 1100,即十進(jìn)制的 12 // 按位與 (&) andResult := a & b fmt.Printf("a & b = %b (decimal: %d)\n", andResult, andResult) // 按位或 (|) orResult := a | b fmt.Printf("a | b = %b (decimal: %d)\n", orResult, orResult) // 按位異或 (^) xorResult := a ^ b fmt.Printf("a ^ b = %b (decimal: %d)\n", xorResult, xorResult) // 按位取反 (^) notResult := ^a fmt.Printf("^a = %b (decimal: %d)\n", notResult, notResult) // 左移 (<<) leftShiftResult := a << 2 fmt.Printf("a << 2 = %b (decimal: %d)\n", leftShiftResult, leftShiftResult) // 右移 (>>) rightShiftResult := a >> 1 fmt.Printf("a >> 1 = %b (decimal: %d)\n", rightShiftResult, rightShiftResult) }
輸出結(jié)果運(yùn)行上述代碼后,輸出結(jié)果如下:
a & b = 1000 (decimal: 8)
a | b = 1110 (decimal: 14)
a ^ b = 0110 (decimal: 6)
^a = ...110101 (decimal: -11) // 注意,按位取反在二進(jìn)制補(bǔ)碼表示下會(huì)有所不同
a << 2 = 101000 (decimal: 40)
a >> 1 = 101 (decimal: 5)
解釋按位與 (&):
- a & b = 1010 & 1100 = 1000 (十進(jìn)制 8)
按位或 (|):
- a | b = 1010 | 1100 = 1110 (十進(jìn)制 14)
按位異或 (^):
- a ^ b = 1010 ^ 1100 = 0110 (十進(jìn)制 6)
按位取反 (^):
- ^a = ^1010 (二進(jìn)制表示為補(bǔ)碼,具體取決于整數(shù)類(lèi)型大?。?/li>
- 對(duì)于 int 類(lèi)型,取反的結(jié)果為 -11(在補(bǔ)碼表示下)
左移 (<<):
- a << 2 = 1010 << 2 = 101000 (十進(jìn)制 40)
右移 (>>):
- a >> 1 = 1010 >> 1 = 101 (十進(jìn)制 5)
應(yīng)用場(chǎng)景
- 位運(yùn)算符在計(jì)算機(jī)科學(xué)中有廣泛的應(yīng)用,例如在算法優(yōu)化、網(wǎng)絡(luò)編程、數(shù)據(jù)壓縮等領(lǐng)域。此外,位運(yùn)算符還可以用來(lái)設(shè)置或清除標(biāo)志位、位掩碼操作等。
5、賦值運(yùn)算符
在 Go 語(yǔ)言中,賦值運(yùn)算符用于將一個(gè)值賦給一個(gè)變量或表達(dá)式。除了基本的賦值運(yùn)算符 = 之外,Go 還支持一系列復(fù)合賦值運(yùn)算符,這些運(yùn)算符結(jié)合了算術(shù)運(yùn)算符或其他運(yùn)算符的功能與賦值操作。
基本賦值運(yùn)算符 =基本的賦值運(yùn)算符 = 用于將一個(gè)值賦給一個(gè)變量。
package main import ( "fmt" ) func main() { a := 10 fmt.Println("Initial value of a:", a) // 使用 = 賦值 a = 20 fmt.Println("Value of a after assignment:", a) }
輸出結(jié)果:
Initial value of a: 10
Value of a after assignment: 20
復(fù)合賦值運(yùn)算符復(fù)合賦值運(yùn)算符結(jié)合了算術(shù)運(yùn)算符或其他運(yùn)算符的功能與賦值操作。常見(jiàn)的復(fù)合賦值運(yùn)算符包括:
- 加法賦值 (+=):將變量的當(dāng)前值與另一個(gè)值相加,并將結(jié)果賦給該變量。
- 減法賦值 (-=):將變量的當(dāng)前值與另一個(gè)值相減,并將結(jié)果賦給該變量。
- 乘法賦值 (*=):將變量的當(dāng)前值與另一個(gè)值相乘,并將結(jié)果賦給該變量。
- 除法賦值 (/=):將變量的當(dāng)前值與另一個(gè)值相除,并將結(jié)果賦給該變量。
- 取模賦值 (%=):將變量的當(dāng)前值與另一個(gè)值取模,并將結(jié)果賦給該變量。
- 按位與賦值 (&=):對(duì)變量的當(dāng)前值與另一個(gè)值按位與,并將結(jié)果賦給該變量。
- 按位或賦值 (|=):對(duì)變量的當(dāng)前值與另一個(gè)值按位或,并將結(jié)果賦給該變量。
- 按位異或賦值 (^=):對(duì)變量的當(dāng)前值與另一個(gè)值按位異或,并將結(jié)果賦給該變量。
- 左移賦值 (<<=):將變量的當(dāng)前值左移一定位數(shù),并將結(jié)果賦給該變量。
- 右移賦值 (>>=):將變量的當(dāng)前值右移一定位數(shù),并將結(jié)果賦給該變量。
示例代碼下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用這些復(fù)合賦值運(yùn)算符:
package main import ( "fmt" ) func main() { a := 10 b := 5 fmt.Println("Initial value of a:", a) fmt.Println("Initial value of b:", b) // 加法賦值 a += b fmt.Println("Value of a after += b:", a) // 減法賦值 a -= b fmt.Println("Value of a after -= b:", a) // 乘法賦值 a *= b fmt.Println("Value of a after *= b:", a) // 除法賦值 a /= b fmt.Println("Value of a after /= b:", a) // 取模賦值 a %= b fmt.Println("Value of a after %= b:", a) // 按位與賦值 a &= 0b1100 fmt.Println("Value of a after &= 0b1100:", a) // 按位或賦值 a |= 0b0011 fmt.Println("Value of a after |= 0b0011:", a) // 按位異或賦值 a ^= 0b0101 fmt.Println("Value of a after ^= 0b0101:", a) // 左移賦值 a <<= 2 fmt.Println("Value of a after <<= 2:", a) // 右移賦值 a >>= 1 fmt.Println("Value of a after >>= 1:", a) }
輸出結(jié)果運(yùn)行上述代碼后,輸出結(jié)果如下:
Initial value of a: 10
Initial value of b: 5
Value of a after += b: 15
Value of a after -= b: 10
Value of a after *= b: 50
Value of a after /= b: 10
Value of a after %= b: 0
Value of a after &= 0b1100: 4
Value of a after |= 0b0011: 7
Value of a after ^= 0b0101: 6
Value of a after <<= 2: 24
Value of a after >>= 1: 12
6、其他運(yùn)算符(如&取地址、*解引用等)
在 Go 語(yǔ)言中,除了算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符外,還有一些特殊的運(yùn)算符用于指針操作,以及其他用途的運(yùn)算符。這里主要介紹指針相關(guān)的運(yùn)算符 &(取地址)和 *(解引用),以及一些其他常用的運(yùn)算符。
指針相關(guān)的運(yùn)算符
- 取地址 (&):
- 用于獲取變量的內(nèi)存地址,返回的是指向該變量的指針。
- 解引用 (*):
- 用于訪(fǎng)問(wèn)指針?biāo)赶虻淖兞康闹怠?/li>
示例代碼下面是一個(gè)簡(jiǎn)單的示例,展示了如何使用取地址和解引用運(yùn)算符:
package main import ( "fmt" ) func main() { // 聲明并初始化一個(gè)變量 value := 10 // 取得變量的地址 addressOfValue := &value fmt.Printf("Address of value: %p\n", addressOfValue) // 解引用地址,獲取值 unreferencedValue := *addressOfValue fmt.Printf("Unreferenced value: %d\n", unreferencedValue) // 修改指針指向的值 *addressOfValue = 20 fmt.Printf("Modified value via pointer: %d\n", value) }
輸出結(jié)果運(yùn)行上述代碼后,輸出結(jié)果如下:
Address of value: 0xc000018048
Unreferenced value: 10
Modified value via pointer: 20
解釋
- 取地址 (&):
- addressOfValue := &value 獲取 value 變量的地址,并將其賦值給 addressOfValue。
- 解引用 (*):
- unreferencedValue := *addressOfValue 解引用 addressOfValue,訪(fǎng)問(wèn)其指向的值,并賦值給 unreferencedValue。
- 修改指針指向的值:
- *addressOfValue = 20 通過(guò)解引用 addressOfValue 來(lái)修改其指向的 value 變量的值。
其他運(yùn)算符除了指針相關(guān)的運(yùn)算符外,Go 語(yǔ)言還有其他一些常用的運(yùn)算符,例如:
- 范圍運(yùn)算符 (range):
- 用于迭代數(shù)組、切片、映射(maps)或通道(channels)中的元素。
- 轉(zhuǎn)換運(yùn)算符 (T(expr)):
- 用于將一個(gè)表達(dá)式轉(zhuǎn)換為另一種類(lèi)型。
- 逗號(hào)運(yùn)算符 (comma):
- 在 Go 語(yǔ)言中,逗號(hào)通常用于序列化多個(gè)表達(dá)式,如在聲明多個(gè)變量時(shí)使用。
示例代碼下面是一些其他運(yùn)算符的示例:
范圍運(yùn)算符 (range)
package main import ( "fmt" ) func main() { // 使用 range 迭代切片 slice := []int{1, 2, 3, 4, 5} for index, value := range slice { fmt.Printf("Index: %d, Value: %d\n", index, value) } }
輸出結(jié)果
Index: 0, Value: 1
Index: 1, Value: 2
Index: 2, Value: 3
Index: 3, Value: 4
Index: 4, Value: 5
轉(zhuǎn)換運(yùn)算符 (T(expr))
package main import ( "fmt" ) func main() { var floatVal float64 = 3.14 intVal := int(floatVal) // 將 float64 轉(zhuǎn)換為 int fmt.Printf("Converted integer value: %d\n", intVal) }
輸出結(jié)果
Converted integer value: 3
逗號(hào)運(yùn)算符 (comma)
在 Go 語(yǔ)言中,逗號(hào)主要用于聲明多個(gè)變量:
package main import ( "fmt" ) func main() { a, b := 10, 20 fmt.Printf("a: %d, b: %d\n", a, b) }
輸出結(jié)果
a: 10, b: 20
總結(jié)
到此這篇關(guān)于Go語(yǔ)言語(yǔ)法基礎(chǔ)之算術(shù)符的文章就介紹到這了,更多相關(guān)Go語(yǔ)言算術(shù)符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang 歸并排序,快速排序,堆排序的實(shí)現(xiàn)
本文主要介紹了golang 歸并排序,快速排序,堆排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01如何在Go語(yǔ)言中高效使用Redis的Pipeline
在 Redis 中,Pipeline 就像一條流水線(xiàn),它允許我們將多個(gè)命令一次性發(fā)送到服務(wù)器,下面我們就來(lái)看看如何在Go語(yǔ)言中高效使用Redis的Pipeline吧2024-11-11golang如何實(shí)現(xiàn)抓取IP地址的蜘蛛程序詳解
這篇文章主要給大家介紹了關(guān)于利用golang如何實(shí)現(xiàn)抓取IP地址的蜘蛛程序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07RabbitMQ延時(shí)消息隊(duì)列在golang中的使用詳解
延時(shí)隊(duì)列常使用在某些業(yè)務(wù)場(chǎng)景,使用延時(shí)隊(duì)列可以簡(jiǎn)化系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā)、提高系統(tǒng)的可靠性和可用性、提高系統(tǒng)的性能,下面我們就來(lái)看看如何在golang中使用RabbitMQ的延時(shí)消息隊(duì)列吧2023-11-11Golang線(xiàn)上內(nèi)存爆掉問(wèn)題排查(pprof)與解決
這篇文章主要介紹了Golang線(xiàn)上內(nèi)存爆掉問(wèn)題排查(pprof)與解決,涉及到數(shù)據(jù)敏感,文中代碼是我模擬線(xiàn)上故障的一個(gè)情況,好在我們程序都有添加pprof監(jiān)控,于是直接通過(guò)go tool pprof分析,需要的朋友可以參考下2024-04-04go語(yǔ)言VScode?see?'go?help?modules'?(exit?statu
最近上手學(xué)習(xí)go語(yǔ)言,準(zhǔn)備在VSCode上寫(xiě)程序的時(shí)候卻發(fā)現(xiàn)出了一點(diǎn)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于go語(yǔ)言VScode?see?'go?help?modules'(exit?status?1)問(wèn)題的解決過(guò)程,需要的朋友可以參考下2022-07-07gtoken替換jwt實(shí)現(xiàn)sso登錄的問(wèn)題小結(jié)
這篇文章主要介紹了gtoken替換jwt實(shí)現(xiàn)sso登錄,主要介紹了替換jwt的原因分析及gtoken的優(yōu)勢(shì),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05解析GOROOT、GOPATH、Go-Modules-三者的關(guān)系
這篇文章主要介紹了解析GOROOT、GOPATH、Go-Modules-三者的關(guān)系,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10