Go語言基礎函數基本用法及示例詳解
概述
函數是基本的代碼塊,用於執行一個任務
語法
函數定義
func 函數名稱( 參數列表] ) (返回值列表]){ 執行語句 }
一.函數參數
無參數無返回
func add()
有參數有返回
func add(a, b int) int
函數值傳遞
func swap(x,y int) int { var temp int temp = x x = y y = temp return temp }
函數引用傳遞
引用傳遞是指在調用函數時將實際參數的地址傳遞到函數中,那麼在函數中對參數所進行的修改,將影響到實際參數。
func swap(x *int ,y *int) { var temp int temp = *x //保存x地址上的值 *x = *y //將y值賦給x *y = temp //將temp值賦給y }
可變參數列表 無默認參數
func funcName(arg ...type) { }
func sum(numbers ...int) int { s := 0 for i:= range numbers { s += numbers[i] } return s }
函數作為參數
func function(a, b int, f func(a,b int) int) int{ return f(a, b) }
//需要導包 reflect runtime func apply(op func(...int) int, a, b int) (int, string){ p := reflect.ValueOf(op).Pointer() opName := runtime.FuncForPC(p).Name(); return op(a, b), opName }
二、返回值
多個返回值
func eavl(a, b int) (int, int) { return a +b, a-b }
跳過返回值
q, _ = eavl(2, 1)
匿名函數
就是沒有函數名的函數
func(x,y int) int { return x + y }
匿名函數可以賦值給一個變量
f := func() int { ... }
或者自調用
func (a,b int) int { return a+b }(1,2)
為函數類型添加方法
type Greeting func(name string) string
// 為Greeting函數類型 添加方法
func (g Greeting) say(n string) { fmt.Println(g(n)) }
總結
- Go函數支持多返回值
- 如果函數和調用不在同一個包(package)內,需要先通過import關鍵字將包引入
- 函數如果被其他包調用 首字母需要大寫
- 函數是一等公民,函數也可以像變量一樣傳遞
- 不管傳遞的是指針、引用還是其它類型參數,都是值拷貝傳遞的,區別在於拷貝的目標是目標對象還是拷貝指針而已
- GO的函數不支持嵌套,重載和默認參數
- GO的函數支持 無需聲明變量,可變長度,多返回值,匿名,閉包等
- GO的函數用func來聲明,且左大括號{不能另起一行
示例
package main import "fmt" import "reflect" import "runtime" // 一、函數參數 /*有參數有返回*/ func add(a, b int) int { return a+b } /*函數值傳遞*/ // func swap(x,y int) int { // var temp int // temp = x // x = y // y = temp // return temp // } /*函數引用傳遞*/ func swap(x *int ,y *int) { var temp int temp = *x //保存x地址上的值 *x = *y //將y值賦給x *y = temp //將temp值賦給y } /*可變參數列表 無默認參數*/ func sum(numbers ...int) int { s := 0 for i:= range numbers { s += numbers[i] } return s } /*函數作為參數*/ func function(a, b int, f func(a,b int) int) int{ return f(a, b) } //需要導包 reflect runtime func apply(op func(...int) int, a, b int) (int, string){ p := reflect.ValueOf(op).Pointer() opName := runtime.FuncForPC(p).Name(); return op(a, b), opName } // 一、返回值 /*多個返回值*/ func eavl(a, b int) (int, int) { return a +b, a-b } func main() { a,b:=20,5 fmt.Println(add(a, b)) swap(&a,&b) fmt.Println(a,b) fmt.Println(sum(a,b)) fmt.Println(function(a,b,add)) fmt.Println(apply(sum,a,b)) fmt.Println(eavl(a,b)) q, _ := eavl(a, b) fmt.Println(q) }
以上就是Go語言基礎函數基本用法及示例詳解的詳細內容,更多關於Go語言函數的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- go語言求任意類型切片的長度操作
- Golang語言學習拿捏Go反射示例教程
- Go利用反射reflect實現獲取接口變量信息
- 關於Go 是傳值還是傳引用?
- Golang 實現獲取當前函數名稱和文件行號等操作