Go基礎(chǔ)語法的使用
概述
在上一節(jié)的內(nèi)容中,我們介紹了第一個(gè)Go程序,包括:安裝Go環(huán)境、編寫第一個(gè)Go程序、編譯并運(yùn)行程序等。在本節(jié)中,我們將介紹Go的基礎(chǔ)語法。Go是一門簡(jiǎn)潔和優(yōu)雅的語言,有自己特殊的一些語法規(guī)則。因此,在介紹Go編程的有關(guān)知識(shí)之前,先熟悉下Go的基礎(chǔ)語法,是非常有必要的。
截止到2023年10月,Go的最新版本為1.21,本專欄將使用Go 1.21的語法介紹相關(guān)知識(shí)。
標(biāo)識(shí)符
在Go語言中,標(biāo)識(shí)符是用于命名變量、函數(shù)、結(jié)構(gòu)體、接口等程序元素的名稱。以下是Go語言對(duì)標(biāo)識(shí)符的一些要求。
1、標(biāo)識(shí)符必須以字母(a-z或A-Z)或下劃線(_)開頭。
2、標(biāo)識(shí)符的后面可以跟字母、數(shù)字(0-9)或下劃線。
3、標(biāo)識(shí)符是區(qū)分大小寫的,這意味著變量x和變量X被視為兩個(gè)不同的標(biāo)識(shí)符。
4、不能使用Go語言的關(guān)鍵字作為標(biāo)識(shí)符,比如:break、case、const、continue等。
5、標(biāo)識(shí)符的命名應(yīng)具有描述性,能夠清晰地表達(dá)其用途和含義;良好的命名可以提高代碼的可讀性和可維護(hù)性。
6、盡量避免使用單個(gè)字符作為標(biāo)識(shí)符,特別是變量名;單個(gè)字符的變量名可能會(huì)導(dǎo)致代碼的可讀性降低。
7、在不同的作用域內(nèi),盡量避免使用相同名稱的標(biāo)識(shí)符,以確保代碼的一致性和準(zhǔn)確性。
以下是一些無效的標(biāo)識(shí)符:1name(以數(shù)字開頭)、case(Go語言的關(guān)鍵字)、i+j(+是不允許的字符)。
關(guān)鍵字
Go語言的關(guān)鍵字(Keywords)是預(yù)定義的特殊標(biāo)識(shí)符,用于表示程序中的特定概念或語法結(jié)構(gòu)。一共有25個(gè)關(guān)鍵字,分別為: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。
行分隔符
在Go語言中,行分隔符通常通過換行符來表示,而不是分號(hào)。Go語言與其他一些編程語言(比如:C/C++、Java等)不同,它不需要在每行代碼末尾使用分號(hào)來表示語句的結(jié)束。每個(gè)語句的結(jié)束是通過自然換行符來識(shí)別的,也就是說,當(dāng)你在代碼中輸入一個(gè)換行符時(shí),Go編譯器會(huì)認(rèn)為該語句已經(jīng)結(jié)束。
在下面的示例代碼中,fmt.Println語句沒有使用分號(hào)來分隔,而是通過自然換行符來分隔不同的語句。
package main import "fmt" func main() { fmt.Println("Hello") fmt.Println("CSDN") }
當(dāng)然,如果需要將多個(gè)語句寫在同一行,則必須使用分號(hào)來人為區(qū)分。但在實(shí)際開發(fā)中,我們并不鼓勵(lì)這種做法。
package main import "fmt" func main() { fmt.Println("Hello");fmt.Println("CSDN") }
var關(guān)鍵字
在Go語言中,var是一個(gè)關(guān)鍵字,用于聲明一個(gè)或多個(gè)變量。使用var關(guān)鍵字可以聲明不同類型的變量,并可以指定變量的初始值。
以下是使用var聲明變量的基本語法:
var 變量名 類型
在下面的示例代碼中,我們聲明了一個(gè)整數(shù)類型的變量。
package main import "fmt" func main() { var a int }
可以在聲明的同時(shí)初始化變量,如果給變量指定了初始值,可以省去類型,由編譯器根據(jù)初始值自動(dòng)推斷變量的類型。當(dāng)然,也可以一次聲明多個(gè)變量,用逗號(hào)分隔它們即可。
package main import "fmt" func main() { var a int = 66 var b = 88 var c, d string c = "Hello" d = "CSDN" // 輸出:66 88 Hello CSDN fmt.Println(a, b, c, d) }
注意:如果聲明的變量和import的包未被使用, 將會(huì)導(dǎo)致編譯錯(cuò)誤,這有助于提高代碼的清潔度和可讀性。
:=運(yùn)算符
在Go語言中,:=是一個(gè)特殊的運(yùn)算符,用于聲明變量并初始化它們的值,它被稱為短變量聲明運(yùn)算符。使用 :=運(yùn)算符可以同時(shí)完成變量的聲明和初始化,它將根據(jù)右側(cè)的表達(dá)式推斷變量的類型,并將該類型的值賦給變量。
在下面的示例代碼中,變量a被聲明為整數(shù)類型,并將其初始化為66。
package main import "fmt" func main() { a := 66 fmt.Println(a); }
需要注意的是,:=運(yùn)算符只能用于函數(shù)內(nèi)部的局部變量,不能用于全局變量。在函數(shù)外部,應(yīng)該使用普通的變量聲明語法,即使用var關(guān)鍵字進(jìn)行聲明。另外,出現(xiàn)在:=運(yùn)算符左側(cè)的變量不應(yīng)該是已經(jīng)被聲明過的,否則會(huì)導(dǎo)致編譯錯(cuò)誤。
空格
在Go語言中,空格通常用于分隔標(biāo)識(shí)符、關(guān)鍵字、運(yùn)算符等,用于提高代碼的可讀性。
Go語言使用空格進(jìn)行代碼塊的縮進(jìn),通常使用4個(gè)空格作為一個(gè)縮進(jìn)級(jí)別。這是Go語言中代碼格式化的重要組成部分,以區(qū)分不同的代碼塊。
package main import "fmt" func main() { a := 6 if a > 0 { fmt.Println("positive") } else { fmt.Println("zero or negative") } }
在變量與運(yùn)算符間、運(yùn)算符兩側(cè)、函數(shù)參數(shù)間等場(chǎng)景下使用空格,可以大大增加代碼的可讀性。
package main import "fmt" func add(a, b int) int { return a + b } func main() { a := 66 b := 99 c := add(a, b) fmt.Println(c) }
注意:使用空格可以提高代碼的可讀性和清晰度,但過度使用空格可能會(huì)使代碼看起來過于分散。因此,在使用空格時(shí)應(yīng)該保持適度,遵循良好的編碼風(fēng)格和規(guī)范。
注釋
在Go語言中,注釋是一種向代碼中添加說明和解釋的方式,不會(huì)影響程序的執(zhí)行。Go語言支持兩種類型的注釋:?jiǎn)涡凶⑨尯投嘈凶⑨尅?/p>
單行注釋以雙斜線(//)開頭,可以在其后添加注釋內(nèi)容。單行注釋可以獨(dú)立占用一行,也可以出現(xiàn)在代碼行的末尾。
// 這是注釋1 a := 66 b := 99 // 這是注釋2
多行注釋以/*開頭,以*/結(jié)尾,可以包含多行文本,通常用于說明函數(shù)、結(jié)構(gòu)體等代碼塊的用途和行為。
/* 第一行多行注釋 第二行多行注釋 */ a := 66
package
在Go語言中,package用于組織代碼、提供命名空間。一個(gè)package可以包含多個(gè)Go源文件,并且可以是自定義的或標(biāo)準(zhǔn)庫(kù)中的。通過使用package關(guān)鍵字,可以將相關(guān)的代碼文件組合在一起,形成一個(gè)獨(dú)立的模塊。每個(gè)Go源文件都必須屬于一個(gè)package,并且每個(gè)package都可以包含一個(gè)或多個(gè)Go源文件。
在下面的示例代碼中,我們聲明了test.go文件屬于main package。在main package中,我們導(dǎo)入了fmt package,并使用fmt.Println函數(shù)打印了一條消息。
// test.go package main import "fmt" func main() { fmt.Println("Hello, CSDN") }
通過將相關(guān)的代碼文件組織在同一個(gè)package中,可以確保它們之間的命名沖突最小化,并且可以輕松地在其他地方引用和使用這些文件。
import
在Go語言中,import關(guān)鍵字用于引入外部依賴包,以便在程序中使用它們提供的函數(shù)、類型和變量等。要使用import導(dǎo)入包,需要指定包的完整名稱,并使用符號(hào).來指定導(dǎo)入的包所在的目錄。比如:要導(dǎo)入標(biāo)準(zhǔn)庫(kù)中的fmt包,可以使用以下語句:import "fmt"。這將在程序中引入fmt包,并使其中的函數(shù)和類型可用。
還可以使用別名來為導(dǎo)入的包指定一個(gè)自定義名稱,指定別名后,可以使用別名來調(diào)用包中的函數(shù)。比如:要將fmt包導(dǎo)入為my_fmt,可以參考下面的示例代碼。
package main import my_fmt "fmt" func main() { my_fmt.Println("Hello, CSDN") }
輸入輸出
在Go語言中,輸入輸出是通過標(biāo)準(zhǔn)庫(kù)中的fmt包來處理的,fmt包提供了許多用于格式化輸入和輸出的函數(shù)。要實(shí)現(xiàn)輸入輸出,可以使用fmt.Scan或fmt.Scanln函數(shù)從標(biāo)準(zhǔn)輸入(通常是鍵盤)讀取輸入,并使用fmt.Print或fmt.Println函數(shù)將輸出寫入到標(biāo)準(zhǔn)輸出(通常是屏幕)。
在下面的示例代碼中,我們首先聲明了兩個(gè)變量name和age,分別用于保存用戶輸入的名字和年齡。然后,使用fmt.Print函數(shù)提示用戶輸入名字和年齡,并使用fmt.Scanln函數(shù)讀取用戶的輸入。最后,使用fmt.Printf函數(shù)將用戶的輸入信息格式化并輸出到標(biāo)準(zhǔn)輸出。
package main import "fmt" func main() { var name string fmt.Print("請(qǐng)輸入您的名字:") // 從標(biāo)準(zhǔn)輸入讀取名字 fmt.Scanln(&name) var age int fmt.Print("請(qǐng)輸入您的年齡:") // 從標(biāo)準(zhǔn)輸入讀取年齡 fmt.Scanln(&age) // 輸出信息到標(biāo)準(zhǔn)輸出 fmt.Printf("歡迎%s, 您今年%d歲。\n", name, age) }
注意:在上面的示例代碼中,我們使用了&符號(hào)將變量的地址傳遞給了Scanln函數(shù)。這是因?yàn)?,Scanln函數(shù)需要訪問變量的內(nèi)存地址來更新變量的值。
運(yùn)算符
Go語言支持以下的運(yùn)算符。
算術(shù)運(yùn)算符:+(加法)、-(減法)、*(乘法)、/(除法)、%(取模)。
賦值運(yùn)算符:=(賦值)、+=(加等于)、-=(減等于)、*=(乘等于)、/=(除等于)、%=(模等于)。
比較運(yùn)算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。
邏輯運(yùn)算符:&&(邏輯與)、||(邏輯或)、!(邏輯非)。
位運(yùn)算符:&(按位與)、|(按位或)、^(按位異或)、~(按位取反)、<<(左移位)、>>(右移位)。
指針運(yùn)算符:&(取變量地址,返回變量的指針)、*(解引用指針)。
括號(hào)運(yùn)算符:()(括號(hào)運(yùn)算符,用于改變運(yùn)算順序)。
類型運(yùn)算符:typeOf(類型查詢運(yùn)算符),sizeof(大小查詢運(yùn)算符)。
空值運(yùn)算符:nil(空值運(yùn)算符,用于判斷變量是否為空)。
錯(cuò)誤運(yùn)算符:error(錯(cuò)誤運(yùn)算符,用于判斷變量是否為錯(cuò)誤值)。
接收運(yùn)算符:<-(接收運(yùn)算符,用于通道操作)。
索引運(yùn)算符:[](索引運(yùn)算符,用于訪問數(shù)組、切片、映射等類型的元素)。
斷言運(yùn)算符:類型.(值)(斷言運(yùn)算符,用于將一個(gè)接口類型的值轉(zhuǎn)換為具體的類型)。
類型轉(zhuǎn)換運(yùn)算符:類型(值)(類型轉(zhuǎn)換運(yùn)算符,用于將一個(gè)類型的值轉(zhuǎn)換為另一個(gè)類型)。
條件控制
在Go語言中,可以使用if、else if、else進(jìn)行條件判斷與執(zhí)行控制。
package main import "fmt" func main() { a := 66 if a >= 88 { fmt.Println("Hello") } else if a > 50 && a < 88 { fmt.Println("CSDN") } else { fmt.Println("Other") } }
還可以使用switch語句根據(jù)不同的條件執(zhí)行不同的代碼塊,其基本語法如下。其中,condition是一個(gè)布爾表達(dá)式,value1、value2等是要比較的值。如果condition的值等于某個(gè)值,就會(huì)執(zhí)行相應(yīng)的代碼塊。如果沒有匹配的值,可以選擇使用default代碼塊來執(zhí)行默認(rèn)操作。
switch condition { case value1: // 執(zhí)行條件為value1時(shí)的代碼塊 case value2: // 執(zhí)行條件為value2時(shí)的代碼塊 ... default: // 執(zhí)行條件不滿足時(shí)的默認(rèn)代碼塊(可選) }
在下面的示例代碼中,我們使用switch語句來輸出某個(gè)月的天數(shù)。
package main import "fmt" func main() { month := 3 switch month { case 1, 3, 5, 7, 8, 10: fmt.Println("31 days") case 4, 6, 9, 11: fmt.Println("30 days") case 2: fmt.Println("28 days or 29 days") default: fmt.Println("invalid month") } }
注意:?jiǎn)蝹€(gè)case后面可以傳多個(gè)值,用逗號(hào)進(jìn)行分隔;當(dāng)匹配多個(gè)值中的任何一個(gè)值時(shí),就會(huì)執(zhí)行后面的語句。
循環(huán)
在Go語言中,使用for語句來進(jìn)行循環(huán)控制。注意:與C/C++、Java等語言不同,Go語言中沒有while循環(huán)。
for循環(huán)有三種形式:第一種是基本的for循環(huán),第二種是簡(jiǎn)化的for循環(huán),最后一種是無限循環(huán)。
基本的for循環(huán)語法如下。其中,initialization是循環(huán)開始前的初始化語句;condition是循環(huán)條件,滿足條件時(shí)繼續(xù)執(zhí)行循環(huán);post是每次循環(huán)執(zhí)行完畢后的后處理語句。
for initialization; condition; post { // 循環(huán)體 }
在下面的示例代碼中,我們使用基本的for循環(huán)計(jì)算1到100相加的總和。
package main import "fmt" func main() { sum := 0 for i := 1; i <= 100; i++ { sum += i } fmt.Println(sum) }
簡(jiǎn)化的for循環(huán)只有循環(huán)條件,沒有初始化語句和后處理語句。在下面的示例代碼中,我們使用簡(jiǎn)化的for循環(huán)計(jì)算1到100相加的總和。
package main import "fmt" func main() { sum := 0 i := 1 for i <= 100 { sum += i i += 1 } fmt.Println(sum) }
無限循環(huán)直接使用for關(guān)鍵字即可,后面不需要帶其他語句。在下面的示例代碼中,我們使用無限循環(huán)計(jì)算1到100相加的總和。
package main import "fmt" func main() { sum := 0 i := 1 for { sum += i i += 1 if i > 100 { break } } fmt.Println(sum) }
到此這篇關(guān)于Go基礎(chǔ)語法的使用的文章就介紹到這了,更多相關(guān)Go 基礎(chǔ)語法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解如何在Go語言中循環(huán)數(shù)據(jù)結(jié)構(gòu)
這篇文章主要為大家詳細(xì)介紹了如何在Go語言中循環(huán)數(shù)據(jù)結(jié)構(gòu)(循環(huán)字符串、循環(huán)map結(jié)構(gòu)和循環(huán)Struct),文中的示例代碼代碼講解詳細(xì),需要的可以參考一下2022-10-10Go語言跨平臺(tái)時(shí)字符串中的換行符如何統(tǒng)一?
本文介紹了Go語言中統(tǒng)一換行符的方法,包括使用`strings.ReplaceAll`函數(shù)將Windows風(fēng)格的換行符`\r\n`替換為Unix風(fēng)格的換行符`\n`,或?qū)\n`替換為`\r\n`,統(tǒng)一換行符可以避免不同平臺(tái)間顯示不一致、傳輸時(shí)出現(xiàn)多余的換行符或丟失換行符,以及解析錯(cuò)誤等問題2024-11-11go實(shí)現(xiàn)一個(gè)內(nèi)存緩存系統(tǒng)的示例代碼
本文主要介紹了go實(shí)現(xiàn)一個(gè)內(nèi)存緩存系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-10-10Go結(jié)構(gòu)體指針引發(fā)的值傳遞思考分析
這篇文章主要為大家介紹了Go結(jié)構(gòu)體指針引發(fā)的值傳遞思考分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12Golang模擬令牌桶進(jìn)行對(duì)訪問的限流方式
這篇文章主要介紹了Golang模擬令牌桶進(jìn)行對(duì)訪問的限流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04golang elasticsearch Client的使用詳解
這篇文章主要介紹了golang elasticsearch Client的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-05-05