關注TechLeadCloud,分享網際網路架構、雲服務技術的全維度知識。作者擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智慧實驗室成員,阿里雲認證的資深架構師,專案管理專業人士,上億營收AI產品研發負責人。
關鍵字(Keywords)是程式語言中預定義的一組特殊詞彙,每個關鍵字都有一個明確的功能和用途。在Go程式語言中,關鍵字起著構建程式邏輯框架的作用,是程式語意和結構的基礎。本篇文章旨在深入探究關鍵字在Go中的定位與應用,以理解其在程式設計中的重要性。Go語言有25個預定義的關鍵字,這些關鍵字用於各種特定目的,從宣告變數和函數,到流程控制和並行程式設計。
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語言也不例外。它們是用於描述程式邏輯、定義資料結構、和處理錯誤等多方面任務的工具。
Go語言以其簡潔性和高效性而受到廣泛歡迎,這在很大程度上得益於其有限但高度優化的一組關鍵字。Go僅有25個關鍵字,相較於其他程式語言,這個數位相對較小,但每一個關鍵字都有明確和重要的用途。
雖然關鍵字本身是固定的,但Go提供了一系列複合語句和操作符,以實現高度的可延伸性和靈活性。例如,你可以使用 if-else,for 和 switch 關鍵字建立複雜的邏輯結構。
關鍵字 | 描述 |
---|---|
const | 用於宣告一個或多個常數 |
func | 用於定義新的函數 |
import | 用於匯入外部包 |
package | 用於宣告包名,通常位於每個Go原始檔的第一行 |
type | 用於宣告自定義型別,如結構體、介面、別名等 |
var | 用於宣告一個或多個變數 |
關鍵字 | 描述 |
---|---|
chan | 用於宣告一個新的通道(channel) |
interface | 用於定義一個新的介面 |
map | 用於宣告一個新的對映(鍵-值儲存) |
struct | 用於定義一個新的結構體 |
關鍵字 | 描述 |
---|---|
break | 用於中斷當前迴圈或 switch 語句 |
case | switch 語句中的一個分支 |
continue | 跳過當前回圈迭代的剩餘語句,進入下一次迭代 |
default | switch 語句中的預設分支 |
else | if 語句的否定分支 |
fallthrough | 用於 switch 語句中,使控制流繼續執行下一個 case |
for | 用於迴圈 |
goto | 跳轉到標籤(不推薦使用) |
if | 條件語句 |
range | 用於 for 迴圈,遍歷陣列、切片、對映或通道 |
return | 用於從函數返回值 |
select | 用於多路通道選擇 |
switch | 用於多分支選擇語句 |
關鍵字 | 描述 |
---|---|
defer | 用於延遲執行函數,通常用於清理資源 |
go | 用於啟動一個新的 goroutine,實現並行 |
關鍵字 | 程式碼範例 | 程式碼作用 |
---|---|---|
const | const PI = 3.14159 |
定義常數 PI |
func | func add(x, y int) int { return x + y } |
定義名為 add 的函數 |
import | import "fmt" |
匯入 fmt 包 |
package | package main |
定義包名為 main |
type | type Point struct {x, y int} |
定義一個名為 Point 的結構體 |
var | var name string = "John" |
定義一個名為 name 的變數 |
chan | ch := make(chan int) |
建立一個新的整數型別的通道 |
interface | type Writer interface { Write([]byte) error } |
定義一個名為 Writer 的介面 |
map | m := map[string]int{"one": 1} |
建立一個鍵為字串、值為整數的對映 |
struct | type Circle struct { Radius float64 } |
定義一個名為 Circle 的結構體 |
break | if x > 0 { break } |
如果 x > 0 ,則跳出迴圈 |
case | case "apple": fmt.Println("It's an apple") |
在 switch 語句中,定義一個 case |
continue | if x < 0 { continue } |
如果 x < 0 ,則跳過當前回圈迭代 |
default | default: fmt.Println("It's default") |
在 switch 語句中,定義一個預設 case |
else | if x > 0 { /*...*/ } else { /*...*/ } |
if 語句的否定分支 |
fallthrough | case 1: fallthrough |
在 switch 語句中,強制執行下一個 case |
for | for i := 0; i < 10; i++ { /*...*/ } |
迴圈10次 |
goto | goto myLabel |
跳轉到 myLabel 標籤(不推薦) |
if | if x > 0 { /*...*/ } |
條件為 x > 0 時,執行某個操作 |
range | for k, v := range m { /*...*/ } |
遍歷對映 m |
return | return x + y |
從函數中返回 x + y |
select | select { case <-ch: /*...*/} |
多路通道選擇 |
switch | switch x { case 1: /*...*/ } |
多分支選擇 |
defer | defer fmt.Println("bye") |
延遲執行 fmt.Println("bye") 直到函數退出 |
go | go doSomething() |
在新的 goroutine 中執行 doSomething() 函數 |
識別符號是程式語言中用於識別各種程式設計元素(如變數、函數、型別等)的名字。在Go語言中,識別符號有一組特定的規則和約定。下面將詳細解析這些規則和特性。
一個識別符號是一個以Unicode字母或者下劃線(_
)開頭,並且完全由Unicode字母和Unicode數位組成的單詞。
Go的關鍵字不能被用作識別符號。這是一個重要的限制,以避免命名衝突和語法混淆。
識別符號 _
是一個特殊字元,它被稱為空識別符號。它用於忽略函數的某個返回值或強制性宣告一個變數,但不使用。
注意:截至目前(Go 1.20),東方字元都被視為非匯出字元。
Player_9
DoSomething
VERSION
Ĝo
Π
_
_status
memStat
book
π
一個型別
변수
エラー
123
, 3apples
a.b
, *ptr
, $name
, [email protected]
type
, range
在Go語言中,識別符號用於命名各種型別的程式設計元素,如變數、常數、函數等。本文將通過表格的形式,提供不同型別識別符號的程式碼範例和相關解釋。
識別符號型別 | 識別符號範例 | 解釋 |
---|---|---|
變數 | myVariable |
用於儲存資料值。 |
常數 | MAX_COUNT |
用於儲存不會改變的資料值。 |
函數 | CalculateSum |
包含執行特定任務的程式碼塊。 |
結構體 | Person |
用於定義包含多個欄位(變數)的複合資料型別。 |
介面 | Writer |
定義了方法集,任何實現了這些方法的型別都被認為實現了該介面。 |
切片 | mySlice |
動態陣列,可以在執行時更改大小。 |
Map | colorMap |
鍵值對的集合。 |
Channel | msgChannel |
用於在Goroutine之間傳送和接收資料。 |
包 | fmt |
用於組織和複用程式碼,通常包含函數、變數、常數等。 |
別名 | type MyInt int |
用於給現有型別建立一個新名字。 |
列舉 | enum Status |
一組命名的整數常數。 |
Goroutine | go doSomething() |
並行執行的函數。 |
標籤 | LOOP: |
用於控制流語句,如break 和continue 。 |
空識別符號 | _ |
用於忽略不需要的值。 |
匯出識別符號 | PublicVar |
在其他包中可見和可用的識別符號。 |
非匯出識別符號 | privateVar |
僅在定義它的包內可見和可用的識別符號。 |
在本部分中,我們將通過一個綜合性的程式碼實戰案例來探討Go中所有關鍵詞和識別符號的實際應用。我們將建立一個簡單的計算器程式,該程式將實現加、減、乘、除四種操作。
package main // package關鍵詞用於定義包名
import "fmt" // import關鍵詞用於引入外部包
// 全域性變數宣告
var result int // var關鍵詞用於宣告變數
const maxInput = 100 // const關鍵詞用於宣告常數
// 自定義型別宣告
type Calculator func(int, int) int // type關鍵詞用於宣告自定義型別
// 主函數
func main() { // func關鍵詞用於宣告函數
var operator string // 區域性變數宣告
var num1, num2 int
for { // for關鍵詞用於迴圈
fmt.Println("請輸入操作符 (+, -, *, /, exit):")
fmt.Scanln(&operator)
if operator == "exit" { // if關鍵詞用於條件判斷
fmt.Println("程式退出。")
break // break關鍵詞用於跳出迴圈
}
fmt.Println("請輸入兩個整數:")
fmt.Scanln(&num1, &num2)
switch operator { // switch關鍵詞用於多條件判斷
case "+":
result = calculate(add, num1, num2)
case "-":
result = calculate(subtract, num1, num2)
case "*":
result = calculate(multiply, num1, num2)
case "/":
if num2 == 0 { // else關鍵詞用於條件判斷
fmt.Println("除數不能為0")
continue // continue關鍵詞用於跳過本次迴圈
}
result = calculate(divide, num1, num2)
default: // default關鍵詞用於多條件預設選項
fmt.Println("無效的操作符")
continue
}
fmt.Printf("結果為: %d\n", result)
}
}
// 函數宣告與定義
func calculate(calc Calculator, num1, num2 int) int {
return calc(num1, num2)
}
// 加法
func add(a, b int) int {
return a + b
}
// 減法
func subtract(a, b int) int {
return a - b
}
// 乘法
func multiply(a, b int) int {
return a * b
}
// 除法
func divide(a, b int) int {
return a / b
}
package
:定義了當前程式碼所屬的包,這裡是main
。import
:用於引入外部庫,這裡我們引入了fmt
庫。var
:全域性和區域性變數宣告。const
:用於定義常數,這裡定義了一個名為maxInput
的常數。type
:用於宣告自定義型別,這裡定義了一個Calculator
函數型別。func
:用於宣告函數,這裡宣告了多個函數。for
:用於迴圈,這裡是一個無限迴圈。if
、else
:用於條件判斷。switch
、case
、default
:用於多條件判斷。break
:用於跳出迴圈。continue
:用於跳過當前回圈迭代。關注TechLeadCloud,分享網際網路架構、雲服務技術的全維度知識。作者擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智慧實驗室成員,阿里雲認證的資深架構師,專案管理專業人士,上億營收AI產品研發負責人。
如有幫助,請多關注
個人微信公眾號:【TechLeadCloud】分享AI與雲服務研發的全維度知識,談談我作為TechLead對技術的獨特洞察。
TeahLead KrisChang,10+年的網際網路和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里雲認證雲服務資深架構師,上億營收AI產品業務負責人。