go 流程控制及函式相關

2021-09-27 08:03:52 字數 1657 閱讀 3006

go語言中的case不僅可以基於常量進行判斷,也可以基於表示式進行判斷,不用寫break

一分支多值: case 「1」,」2」

分支表示式:case 4>r &&r>2 // 這種條件下switch後不再跟判斷變數(無判斷目標)

fallthrough關鍵字,執行完乙個case後會執行下乙個case,不建議使用。

可以退出多層迴圈 在迴圈中goto ***,迴圈外***: **

統一錯誤處理,在處理處均goto ***,在進行處理處 ***: **

跳出指定迴圈

outloop:

迴圈1迴圈2

go語言函式本身可以作為值傳遞

支援匿名函式和閉包

函式可以滿足介面

同一型別返回值

func ***() (int,int)

帶有變數名的返回值

func ***() (a,b int)

同一種型別返回值和命名返回值兩種形式只能二選一,混用會發生編譯錯誤

go語言中函式也是一種型別func(),可以和其他型別一樣被儲存在變數中。例如:

func fire()

var f func()

f=fire

f()func(引數列表) (返回引數列表)

func(引數列表) (返回引數列表) (實參列表)

f := func(引數列表) (返回引數列表)

f(實參列表)//通過變數呼叫

func visit(list int, f func(int))

}func main() , func(v int) )

}func main() ,

"run": func() ,

"fly": func() ,

}// *skillparam獲取命令列傳來的值,並在map中查詢對應命令列引數指定的字串的函式

if f, ok := skill[*skillparam]; ok else

}/* 函式實現介面 */

// 函式定義為型別

type funccaller func(inte***ce{}) //將func(inte***ce{})定義為funccaller型別

// 實現invoker的call

func (f funccaller) call(p inte***ce{})

// funccaller無需被例項化,只需要將函式轉化為funccall即可

var in2 invoker //宣告介面變數

// 將匿名函式轉為funccall型別,再賦值給介面

in2 = funccaller(func(v inte***ce{}) )

// 使用介面呼叫 funccaller.call,內部會呼叫函式本體

in2.call("hellp")

類似c++中的lambda表示式,函式是編譯時靜態的概念,閉包是執行時動態的概念

c++與c#為閉包建立了乙個類,**獲的變數在編譯時放到類的成員中,閉包在訪問**獲的變數時,實際上訪問的是閉包隱藏類的成員。

v…t一般放在函式列表的末尾

v …t,表示型別是t,即擁有多個  t元素的t型別切片

t為可變引數的型別,當t為inte***ce{}時,傳入的可以是任意型別(比如fmt.println()的實現)

獲取可變引數的型別s.(type)

go流程控制與函式

package main import fmt func main else 多條件判斷 a 15 if a 0 a 10 else if a 10 a 20 else if a 20 goto跳轉當前函式內定義的標籤 b 10 test if b 0 for迴圈 sum 0 for i 0 i 1...

go流程控制

用於測試條件是否成立,成立則執行if括起來的 if condition 複製 如果需要在條件不滿足時執行,則只需要加上else即可 if condition else 複製 如果存在多個條件,可以使用else if增加新的判斷 if condition1 else if condition2 els...

go流程控制

1 if語句 1 if ture else 2if a 44 a 23else 2 switchswitch 語句用於基於不同條件執行不同動作,每乙個 case 分支都是唯一的,從上直下逐一測試,直到匹配為止。golang switch 分支表示式可以是任意型別,不限於常量。可省略 break,預設...