Go語句與表示式深度解析:全案例手冊

2023-09-12 12:00:46

關注公眾號【TechLeadCloud】,分享網際網路架構、雲服務技術的全維度知識。作者擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智慧實驗室成員,阿里雲認證的資深架構師,專案管理專業人士,上億營收AI產品研發負責人。

語句

語句是Go程式語言中完成特定操作的單個邏輯指令。語句是組成程式的基本單元,它們可以控制程式流程、進行賦值、宣告變數等。

1. 宣告語句

1.1 變數宣告

用於定義一個或多個變數,但不一定要賦值。

舉例

var age int
var name, address string

1.2 常數宣告

定義一個或多個常數值。

舉例

const PI = 3.14
const greeting = "Hello, Go!"

2. 賦值語句

用於給已宣告的變數分配新的值。

舉例

x := 10
y = x + 5
a, b := 20, 30

3. 控制流語句

3.1 條件語句

if語句

基於某個條件來執行程式碼塊。

舉例

if x > y {
    fmt.Println("x is greater than y")
} else if x < y {
    fmt.Println("x is less than y")
} else {
    fmt.Println("x is equal to y")
}

switch語句

基於一個表示式或值來執行多個程式碼塊中的一個。

舉例

switch grade {
case "A":
    fmt.Println("Excellent!")
case "B":
    fmt.Println("Good")
default:
    fmt.Println("Passed")
}

3.2 迴圈語句

for語句

用於重複執行某段程式碼。

舉例

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

for _, value := range array {
    fmt.Println(value)
}

3.3 跳轉語句

break語句

用於中斷當前迴圈。

舉例

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

continue語句

跳過當前迭代,並繼續下一個迭代。

舉例

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

return語句

從函數中返回特定值。

舉例

func add(a int, b int) int {
    return a + b
}

goto語句

跳轉到指定的標籤。

舉例

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

4. 其他語句

4.1 defer語句

確保在函數結束前執行某個語句。

舉例

func printFile() {
    file, err := os.Open("file.txt")
    if err != nil {
        panic(err)
    }
    defer file.Close()
    
    // Do file operations...
}

4.2 go語句

在新的goroutine中執行函數呼叫。

舉例

go func() {
    fmt.Println("Executing in a new goroutine")
}()

實戰案例

語句 語句樣例
變數宣告 var age intvar name, address stringvar x, y int = 3, 4var active boolvar salary = 50000
常數宣告 const PI = 3.14const greeting = "Hello, Go!"const active = falseconst daysInWeek = 7const lightSpeed = 299792458
賦值語句 x := 10y = x + 5a, b := 20, 30name = "Alice"isActive := true
if語句 if x > 10 { ... }if x > 10 && y < 5 { ... }if active { ... }if name := getName(); name != "" { ... }if age > 18 { ... } else { ... }
switch語句 switch x { ... }switch { case x > 10: ... }switch day { case "Monday": ... }switch n := 4; n { ... }switch y.(type) { ... }
for語句 for i := 0; i < 5; i++ { ... }for i, v := range arr { ... }for x > 5 { ... }for key, val := range mapData { ... }for _, char := range str { ... }
break語句 for { if condition { break } }switch { case x: if y { break } }for x > 10 { ...; break; ... }label: for { ...; break label; ... }for i := 0; i < 10; i++ { if i == 5 { break } }
continue語句 for i := 0; i < 10; i++ { if i%2 == 0 { continue } }for _, v := range data { if v == nil { continue } }for x > 0 { ...; if condition { continue } ... }for { if !isValid(data) { continue } ... }for idx, value := range items { if value == "" { continue } }
return語句 func add(a, b int) int { return a + b }func name() string { return "Alice" }func getDetails() (string, int) { return "Alice", 30 }func isActive() bool { ...; return false }func calculate() float64 { ...; return result }
goto語句 label1: for { ...; if x > 5 { goto label1 } }label2: fmt.Println("Start"); ...; goto label2if condition { goto errorHandling } ... errorHandling: ...if !isValid { goto cleanup } ... cleanup: ...
defer語句 file, _ := os.Open("file.txt"); defer file.Close()mutex.Lock(); defer mutex.Unlock()defer fmt.Println("Finished!")conn.Connect(); defer conn.Disconnect()reader := openReader(); defer reader.Close()
go語句 go fmt.Println("Running in goroutine")go process(data)go func(val int) { ... }(x)go startServer()go handleRequest(request)

表示式介紹、詳解、舉例

在程式設計中,表示式是一個結構,通過某種方式組合了變數、常數和操作符,並且可以被評估為某個值。在Go中,表示式根據所包含的內容和結果的不同,可以有多種形式。

1. 基礎表示式

1.1 字面量

字面量是一個表示固定值的表示式。

舉例

42       // 整型字面量
3.14     // 浮點字面量
true     // 布林字面量
"Hello"  // 字串字面量

1.2 變數和常數

變數和常數是預先定義的,具有特定名稱和值的實體。

舉例

const PI = 3.14
var name = "Go"

2. 複合表示式

2.1 算術表示式

這些表示式使用算術運運算元,如+-*/%

舉例

a := 5
b := 2
sum := a + b        // 結果:7
difference := a - b // 結果:3
product := a * b    // 結果:10
quotient := a / b   // 結果:2
remainder := a % b  // 結果:1

2.2 關係表示式

關係表示式評估為布林值,常用的關係運算子有==!=<<=>>=

舉例

x := 5
y := 3
result1 := x == y  // 結果:false
result2 := x > y   // 結果:true

2.3 邏輯表示式

邏輯表示式用於組合多個布林表示式,常用的邏輯運運算元有&&||!

舉例

a := true
b := false
result1 := a && b  // 結果:false
result2 := a || b  // 結果:true
result3 := !a     // 結果:false

2.4 賦值表示式

賦值表示式給變數賦值,並返回該值。

舉例

x := 10           // 使用 := 進行賦值
y = x + 5         // 使用 = 進行賦值

3. 函數呼叫表示式

函數呼叫返回函數的返回值。

舉例

func add(a int, b int) int {
    return a + b
}

result := add(5, 3)  // 結果:8

4. 型別轉換表示式

這些表示式將值從一個型別轉換為另一個型別。

舉例

x := 5.8
y := int(x)  // 結果:5

實戰案例

語句 語句樣例
變數宣告 var age intvar name, address stringvar x, y int = 3, 4var active boolvar salary = 50000
常數宣告 const PI = 3.14const greeting = "Hello, Go!"const active = falseconst daysInWeek = 7const lightSpeed = 299792458
賦值語句 x := 10y = x + 5a, b := 20, 30name = "Alice"isActive := true
if語句 if x > 10 { ... }if x > 10 && y < 5 { ... }if active { ... }if name := getName(); name != "" { ... }if age > 18 { ... } else { ... }
switch語句 switch x { ... }switch { case x > 10: ... }switch day { case "Monday": ... }switch n := 4; n { ... }switch y.(type) { ... }
for語句 for i := 0; i < 5; i++ { ... }for i, v := range arr { ... }for x > 5 { ... }for key, val := range mapData { ... }for _, char := range str { ... }
break語句 for { if condition { break } }switch { case x: if y { break } }for x > 10 { ...; break; ... }label: for { ...; break label; ... }for i := 0; i < 10; i++ { if i == 5 { break } }
continue語句 for i := 0; i < 10; i++ { if i%2 == 0 { continue } }for _, v := range data { if v == nil { continue } }for x > 0 { ...; if condition { continue } ... }for { if !isValid(data) { continue } ... }for idx, value := range items { if value == "" { continue } }
return語句 func add(a, b int) int { return a + b }func name() string { return "Alice" }func getDetails() (string, int) { return "Alice", 30 }func isActive() bool { ...; return false }func calculate() float64 { ...; return result }
goto語句 label1: for { ...; if x > 5 { goto label1 } }label2: fmt.Println("Start"); ...; goto label2if condition { goto errorHandling } ... errorHandling: ...if !isValid { goto cleanup } ... cleanup: ...
defer語句 file, _ := os.Open("file.txt"); defer file.Close()mutex.Lock(); defer mutex.Unlock()defer fmt.Println("Finished!")conn.Connect(); defer conn.Disconnect()reader := openReader(); defer reader.Close()
go語句 go fmt.Println("Running in goroutine")go process(data)go func(val int) { ... }(x)go startServer()go handleRequest(request)

關注公眾號【TechLeadCloud】,分享網際網路架構、雲服務技術的全維度知識。作者擁有10+年網際網路服務架構、AI產品研發經驗、團隊管理經驗,同濟本復旦碩,復旦機器人智慧實驗室成員,阿里雲認證的資深架構師,專案管理專業人士,上億營收AI產品研發負責人。

如有幫助,請多關注
個人微信公眾號:【TechLeadCloud】分享AI與雲服務研發的全維度知識,談談我作為TechLead對技術的獨特洞察。
TeahLead KrisChang,10+年的網際網路和人工智慧從業經驗,10年+技術和業務團隊管理經驗,同濟軟體工程本科,復旦工程管理碩士,阿里雲認證雲服務資深架構師,上億營收AI產品業務負責人。