GoLang - 函數介紹 (上) 基礎格式、多值回傳與指標類型
在這幾篇,會以 Go 語言的入門基礎進行逐步說明,本篇針對函數進行說明
Go 語言的函數透過 func 宣告,基本格式如下:
func funcName (Input1 Type1, Input2 Type2..) (Output1 Type1, Output2 Type2..) {
return Value1, Value2..
}
基本格式:
在這裡,傳入型態為整數的 x, y ,回傳值則為int類型。
func numSum(x, y int) int {
return x + y
}
func main() {
x := 10
y := 20
sum := numSum(x, y)
fmt.Println(sum)
}
傳入的類型也可以是 array, slice, map
func multiArg(param []int) {
for _, n := range param {
fmt.Println(n)
}
}
func main() {
m := []int{1, 2, 3}
multiArg(m)
}
多值回傳:
多回傳值,可以直接定義回傳的是什麼類型,也可以直接命名變數名稱,例如下方,我們將傳值欄位,直接定義了 sum int, max int 。
官方同樣也建議,為了能有良好的可讀性,建議命名回傳值。
func numSumAndMax(x, y int) (sum int, max int) { //回傳值欄位可以是 (int, int) 這裡我們改用直接定義回傳變數名
sum = x + y
if x > y {
max = x
} else {
max = y
}
return sum, max //多回傳值
}
func main() {
x := 10
y := 20
sum, max := numSumAndMax(x, y) //取得多回傳值
fmt.Println(sum, max)
}
指標類型:
Go 提供了指標類型的參數,可以讓多個函數操作同一個物件。
將參數以指標的方式帶入函數,在函數運算會真實的修改同一指標。
例如,我們將 x 作為指標,傳入函數計算,但先不回傳。在函數計算過程改變 x 值,在外的 x 也會一起變更。
指標類型函數,在函數帶入參數要用 “*",在呼叫函示參數前要加上 “&",定義方式如下:
func myFunction(param *int) {
// *param
}
myFunction(&data)
例如:
package main
import "fmt"
func addOne(x *int) {
*x = *x + 1
}
func main() {
num := 1
addOne(&num)
fmt.Println(num) //output 2
addOne(&num)
fmt.Println(num) //output 3
}
透過這種傳遞指標的方式,在複雜的運算會是比較好的做法,操作都是在傳遞記憶體位置。
如果用其他 copy 的方式,消耗的資源就會比較多。