GoLang - 函數介紹 (上) 基礎格式、多值回傳與指標類型

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 的方式,消耗的資源就會比較多。