學習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...