iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
1
自我挑戰組

Go從新學系列 第 16

[DAY 16]GO 的 函式(二)

  • 分享至 

  • xImage
  •  
  • 不定長參數

有時候我們要填入的參數

值的數量是不固定的

由於Go 支援不定長度參數的特性,所以我們可以用一個「...」的語法完成此類麻煩

關於'...'的用法

...其實是go的一種語法糖。

第一個用法主要是用於函數有多個不定參數的情況,可以接受多個不確定數量的參數。
第二個用法是slice可以被打散進行傳遞。
第三個是標識數組元素個數
第四個是Go命令行中的通配符

https://juejin.im/post/5d10304c51882532251d2121

以下就是一個不定長參數的實例

package main

import (
	"fmt"
)

func sum1(arr ... float64) float64 {
	sum := 0.0

	for _, e := range arr {
		sum += e
	}

	return sum
}

func main() {
	s := sum1(1, 2, 3, 4, 5)

	fmt.Println(s)
}

在 sum1 函數設定輸入值 arr ... 就代表我設定了一個名為 arr 的輸入值,但稍後會有若干個(不只一個)參數輸入

sum1 的函數裡 我宣告了一個 sum 值並初始化為 0.0

用 range 呼叫等會數列裡的值,並逐一加法進 sum 裡取得數列總和

最後記得要 return(回傳) sum 值

這樣一來,我便可以在 main 函數設定新的數列 並呼叫 sum1 函數幫我取得數列總和

  • 函式重載

什麼是函數重載(what)?

函數重載是指在同一作用域內,可以有一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數。重載函數通常用來命名一組功能相似的函數,這樣做減少了函數名的數量,避免了名字空間的污染,對於程序的可讀性有很大的好處。

https://kknews.cc/code/x3jmkk8.html

簡單來說,今天我想弄一個 print() 函式可以印數值(int)

另一個 print() 函式可以用來印字串(String)

如果支持函式重載的程式語言

print(12)會去調用print(int),print("hello world")會去調用print(string)

不過,很可惜的 GO 不支援函式重載

go的官方文檔中說到,不支持重載機制可以簡化方法調度。從其他語言的經驗上看,重載只是偶爾有用,但會在實踐中引起誤解和導致脆弱性。

通常的作法我們還是只能直接命名兩種不同的函式名稱

package main

import "fmt"

func multi(x float64, y float64)  float64{
	return x * y
}

func multiFive(x float64)  float64{
	return multi(x , 5)
}
func main() {
	fmt.Println(multi(7 , 4))
	fmt.Println(multiFive(7))
}

執行結果

28
35

部份內容參自:https://michaelchen.tech/golang-programming/function/


上一篇
[DAY 15]GO 的 函式(一)
下一篇
[DAY 17]GO 的 函式(三)
系列文
Go從新學26
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言