Go語言中的函式

2022-07-24 09:27:13 字數 2690 閱讀 1523

函式就是一段**的封裝,把一段抽象的邏輯封裝成乙個函式,給他起個名,每次需要用到的時候直接呼叫函式名就可以。

基本語法:

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

乙個函式的返回值可以有乙個,可以有多個,也可以沒有返回值。

package main

import "fmt"

func add(a int, b int) (add int)

func add2(a int, b int) int

func multr(a int, b int) (int, int)

func printnum(a int)

func main()

當給返回值起名的時候,可以直接在函式體內使用該變數,return語句後可以不加內容

乙個函式可以擁有多個或者乙個或者沒有引數,當引數型別相同時,可以簡寫

func foo(x int, y int, z int) 

func foo1(x, y, z int, a, b string, p, q bool)

可變引數可變引數只能放在引數的最後乙個,在傳入實際引數的時候可以傳入乙個、多個或者零個,該引數會形成乙個該資料型別的切片

func foo2(name string, ints ...int) (res string)
defer關鍵字修飾的語句可以延時執行,他們會在函式返回前逆序執行

函式也屬於一種型別,但是引數和返回值型別不同的函式又屬於不同的型別,比如func(int, int) intfunc(string, string)func(float64, int) bool

函式也可以作為引數或者返回值傳遞,這種函式稱為高階函式

func f1(x, y int) int 

func f2(f func(int, int) int, x, y int) (int, int)

func f3(x int) func(int) int

return ret

}

對於那些沒有名字的函式稱為匿名函式,通常用於乙個函式的內部

func(型別)型別{}

如果是只用一次的函式可以在匿名函式的最後加上一對()形成立即執行函式

package main

import "fmt"

func main()

sum, _, _, quotient := calfunc(10, 2)

func(x, y int) (sum, quotient)

}

閉包(closure)對於初學者來說肯定是晦澀難懂的,要理解閉包,我們首先必須得理解go中變數的作用域函式可以作為返回值這兩個概念。

我們先來看乙個函式:

func paraclosure(x int) func() int 

return res

}

這個函式它接收乙個int型別的變數,返回乙個func() int型別的函式

在宣告匿名函式的期間,用到了paraclosure函式中的x變數,這種函式就叫做閉包函式

如果在工作期間,你的同事寫了這樣的乙個函式

func exec(f func())
然後你有這樣的乙個函式

func variable(x, y int)
現在你需要把variable函式作為引數傳遞給exec函式

這時候你就需要用到閉包函式(closure function)

這個閉包函式(closure function)需要接收乙個兩個int型別引數的函式,返回乙個無參無返回值的函式

func closure(f func(int, int), m, n int) func() 

}

內建函式

介紹close

主要用來關機channel

len用來求長度,比如string、array、slice、map、channel

new用來分配記憶體,主要用來分配值型別,比如int、struct。返回的是指標

make

也是用來分配記憶體的,主要用於分配應用型別比如chan、map、slice。返回的是具體的引用

用來追加元素到陣列、slice中

panic、recover

用來做錯誤處理

go語言中的函式

package main import fmt func main 這裡傳入的是乙個slice,但外部變數確改變了,說明是位址拷貝。c d fmt.println d e 2 這裡把e的位址傳遞過去 d e fmt.println e 函式e賦值給f f e f 匿名函式 g func g 使用閉包...

go 語言中的繼承

go 語言中可以通過匿名field來實現繼承的效果,type t1 struct func t t1 log func t t1 print type t2 struct t2 t2 可以通過t2.log 直接訪問t1的method,就像物件導向的繼承之後一樣訪問,不過這裡要注意的傳遞到log的是t...

Go語言中的常量

常量,一經定義不可更改的量。功能角度看,當出現不需要被更改的資料時,應該使用常量進行儲存,例如圓周率。從語法的角度看,使用常量可以保證資料,在整個執行期間內,不會被更改。例如當預處理器的架構型別,可以保證不被更改。語法如下 const 常量名 可選的型別 常量值 const c1 int 1000g...