go語法 函式

2021-09-22 21:02:05 字數 3315 閱讀 1289

學習go語言之前,我們應該知道go語言是乙個函式式程式語言,函式是重中之重,所以本部分介紹了go語言基本的函式用法以及,為什麼說go語言是乙個函式式程式語言

在go語言中,函式的命名方式與變數相同,都是關鍵字,函式名、型別這種,型別寫在最後的方式

函式具體寫法如下:

func

eval

(a, b,

int,op string

)int

下面是乙個簡單的函式寫法及呼叫方法:

package main

import

("fmt"

)func

eval

(a, b int

, op string

)int

}func

main()

在go語言中,前面也提到過,go語言支援多個返回值,現在介紹的是go語言的,兩個返回值的寫法:

// 兩個返回值的函式

func

div(a,b int)(

int,

int)

如上,在兩個返回值的函式寫法中,在定義返回值型別的地方再寫乙個返回值的型別即可

go語言支援為函式的返回值起名字,具體的寫法如下:

package main

import

("fmt"

)// 給返回值起名

func

div(a,b int

)(q,r int

)func

main()

上述**可以看出對返回值起名時遵循變數定義時,變數在前,型別在後的方式,在函式體中存在這麼兩種寫法

方法一指定兩個返回值q,r分別代表什麼,然後返回;

方法二不指定具體代表,按照預設先後順序進行返回,在主函式體內選取變數進行接受;函式返回值q,r與主函式內接收的q,r沒有關聯,變數名隨意取,不要求相同

注意上述**返回值**內起名這種方式僅僅用於簡單函式,複雜函式會增加**複雜度,對呼叫者而言沒有區別

在其他語言中函式執行報錯時會中斷整個程式,而go語言可以自定義返回錯誤資訊,並借助多返回值的優勢,幫助使用者除錯**

修改一下上次說到的四則運算**,示例:

package main

import

("fmt"

"math"

"reflect"

"runtime"

)func

div(a,b int

)(q,r int

)func

eval2

(a, b int

, op string)(

int,

error)}

func

main()

else

}

上述**中,函式擁有兩個返回值int型別和erroe型別,由於go語言中定義的變數必須使用,所以在每個返回值後面,再多返回乙個nil表示error型別返回值,且無錯誤;

在主函式的if中呼叫eval2函式,按照switch邏輯,將呼叫div函式進行運算,並返回兩個返回值,檢視**我們可以發現div也是兩個返回值,如果我們只想要其中的乙個返回值的時候應該怎麼辦呢?

類似與下面一句**,當我們不想要某個返回值時只需要使用_便可以表示接收不使用

q, _ := div(a,b)

回到剛剛的話題,剛剛定於的error型別如何使用呢?從**來看,如果我們輸入引數eval2(3, 4, "z"),很明顯,我們定義的eval2函式沒法處理z這個引數,這時候就會觸發default中定義的error處理

default中的return首先將int型別返回值返回乙個0,然後使用fmt.errorf錯誤資訊輸出語句輸出錯誤引數並返回到主程式中並使用err接收,if判斷err不為nil,則輸出正常執行結果,否則執行自定義錯誤資訊

go語言相交之c++等其他語言,沒有預設引數、可選引數、函式過載等花哨的用法

僅有可變引數列表這一種用法,關於這兩點我們通過兩段**驗證一下

package main

import

("fmt"

"math"

"reflect"

"runtime"

)// go語言是乙個函式式程式語言,體現如下,函式內的函式

func

(op func

(int

,int

)int

, a,b int

)int

func

pow(a,b int

)int

func

main()

,3,4

))fmt.

println

(sum(1

,2,3

,4,5

))}

這三個引數在函式d呼叫時,以d(a,b,c)的形式呼叫

pow的引數便是a,b

實際上main中呼叫部分傳入的pow甚至不需要提前定義

可以寫成如下這樣

// 函式直接寫在呼叫處,匿名函式,無需寫函式名

fmt.

println((

func

(a,b int

)int,3

,4))

採用匿名函式的方式,直接將函式寫在呼叫處,此方法不需要寫傳入的函式名

關於這部分比較簡單,只需要記住...即可,在go語言中...代表無限制引數數量

package main

import

("fmt"

"math"

"reflect"

"runtime"

)func

sum(numbers ...

int)

intreturn s

}func

main()

GO程式設計 GO入門語法基礎

學習一門語言,首先肯定是要熟悉他的語法,然後才可以進行程式設計開發,雖然本人使用過c net等語言,不過對於go的一些新特性還是需要多多熟悉,否則即使看得懂也寫不出程式來。今天我們就開始我們的go hello world 當我們新建乙個go module,就會看到乙個main.go,具體 如下所示 ...

GO程式設計 GO入門語法基礎

學習一門語言,首先肯定是要熟悉他的語法,然後才可以進行程式設計開發,雖然本人使用過c net等語言,不過對於go的一些新特性還是需要多多熟悉,否則即使看得懂也寫不出程式來。今天我們就開始我們的go hello world 當我們新建乙個go module,就會看到乙個main.go,具體 如下所示 ...

go基本語法 golang基本語法

匯入包 import fmt import fmt os 函式外申明變數 var a int 函式內申明變數 a slice申明 slice本質是指向陣列的指標 var s int var s int make int,3 s make int,3 基於陣列建立slice a 3 int s a 3...