---
# System prepended metadata

title: 'Day 28 : Golang variadic function'
tags: [About Go]

---

# Day 28 : Golang variadic function

## 前言
原本寫完interface相關文章，要學習Golang是如何實現OOP，但覺得這主題感覺很大，然後interface又花了好多心力重新學習，今天就記錄個較簡單且實用的小主題，也就是之前常常出現的使用`...`的在函式的應用 - variadic function。

## variadic function
有時候如果函式不能確定要接受多少數量的參數，例如當我中樂透要買東西的時候，看到想要的時候就買，要放入購物車要算加總多少錢的時候，根本不知道買了多少商品，也無法確切寫出每個商品的價格，這時候就可以用variadic function，定義如下
`func function_name(para1, para2...type)`

下面定義一個專門做加法的variadic function，不管輸入幾個數字，都可以完成加總並輸出。
這時候代表sum函式等待接收的是一連串型別為int的參數，然後在函式裡面收集成一個`[]int`。

```go!
func main() {
  sum(1,2,3)    // 6
  sum(100,300)  // 400
  sum(50)       // 50
}

func sum(nums ...int){
  sum :=0
  for _,num :=range nums{
    sum += num
  }
  fmt.Println(sum)
}
```

使用variadic function的時候，也可以包含其他參數，但是數量不定的參數必須在固定參數**後面**。

```go!
func main() {
  sum("測試",1,2,3)  // 測試 6
}

func sum(s string,nums ...int){
  sum :=0
  for _,num :=range nums{
    sum += num
  }
  fmt.Println(s,sum)
}
```





## References
1. [Variadic Functions in Go](https://www.geeksforgeeks.org/variadic-functions-in-go/)


###### tags: `About Go`