函式就是一段**的封裝,把一段抽象的邏輯封裝成乙個函式,給他起個名,每次需要用到的時候直接呼叫函式名就可以。
基本語法:
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) int
、func(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...