2020 10 15Go語言之函式

2021-10-24 19:11:23 字數 2054 閱讀 9072

函式是組織好的、可重複使用、用於執行指定任務的基本**塊

go語言支援:函式、匿名函式和閉包

go語言中定義函式使用 func 關鍵字,具體格式如下

func 函式名(引數)(返回值型別)
package main

import "fmt"

func main()

//單返回值 計算 a+b

func sum(a int,b int) int

//單返回值 計算 a+b-x(x可變引數)

func sumandsub(a int,b int,x ...int) int

return a+b-sumnum

}//多返回值

func sumandsubmul(a int,b int,x ...int) (int,int)

return a+b,sumnum

}// 函式定義時可以給返回值命名,並在函式體中直接使用這些變數,最後通過return關鍵字返回

func sunfn4(x int, y int)(sum int, sub int)

我們可以使用type關鍵字來定義乙個函式型別,具體格式如: type calculation func(int, int) int

方法作為引數

func main() 

type calculation func(int, int) int

/**傳遞兩個引數和乙個方法

*/func sunfn (a int, b int, sum func(int, int)int) int

匿名函式匿名函式就是沒有函式名的函式,匿名函式的定義格式如下

func (引數)(返回值)
匿名函式因為沒有函式名,所以沒有辦法像普通函式那樣呼叫,所以匿名函式需要儲存到某個變數或者作為立即執行函式:

func main() ()

}

結合方法作為引數的業務場景,我們可以直接返回匿名函式的方法 如:

func main() 

// 返回乙個方法

type calctype func(int, int)int

func do(o string) calctype

case "-":

return func(i int, i2 int) int

case "*":

return func(i int, i2 int) int

case "/":

return func(i int, i2 int) int

default:

return nil

}}

go 語言支援匿名函式,可作為閉包。匿名函式是乙個"內聯"語句或表示式。匿名函式的優越性在於可以直接使用函式內的變數,不必申明。閉包可以理解成 「定義在乙個函式內部的函式」。在本質上,閉包就是將函式內部 和 函式外部連線起來的橋梁。或者說是函式和其引用環境的組合體。

package main

import "fmt"

func getsequence() func() int

}func main()

go 語言中的defer 語句會將其後面跟隨的語句進行延遲處理。在defer歸屬的函式即將返回時,將延遲處理的語句按defer定義的逆序進行執行,也就是說,先被defer的語句最後被執行,最後被defer的語句,最先被執行。

注意:當存在多個 defer 時,他們的執行順序類似 「壓棧」 「彈棧」 ,按照**順序執行規則,先進後出

package main

import "fmt"

func main()

2020 10 15Go語言陣列

陣列是具有相同唯一型別的一組已編號,且長度固定的資料項序列。這種型別可以使任意的原始型別例如 int float string以及自定義型別等等。golang中陣列的另乙個特點是占用記憶體的連續性,也就是說陣列中的元素是被分配進乙個連續的記憶體位址中,因此通過索引獲取陣列元素的速度會非常快。和陣列相...

2020 10 15Go語言切片

go 語言切片是對陣列的抽象。go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片 動態陣列 與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。宣告切片型別的基本語法如下 var 切片名稱 元素型別示例 package m...

Go語言之GO 語言常量

相對於變數,常量是恆定不變的值,多用於定義程式執行期間不會改變的那些值。常量的宣告和變數宣告非常類似,只是把var換成了const,常量在定義的時候必須賦值。const pi 3.1415 const e 2.7182宣告了pi和e這兩個常量之後,在整個程式執行期間它們的值都不能再發生變化了。多個常...