GO(2) - 函數
1. 定義函數:
定義一個函數 sum 需要 a 和 b 兩個 int 當參數,計算總和後回傳:
package main import "fmt" func sum(a int, b int) int { return a + b } func main() { a := 10 b := 20 total := a + b fmt.Printf("Total is: %d\n", total) }
2. 函數返回多值:
Go 函數可以像 Python 一樣一次返回多個值。
定義 foo 一次返回兩個 string,再利用短宣告賦值給 s1 和 s2。
func foo() (string, string) { return "foo", "bar" } func main() { s1, s2 := foo() fmt.Println(s1, s2) }
3. 匿名函數:
Go 允許將函數賦值給一個變量,下面我們把一個沒有名字的函數賦值給 sum。
sum := func(a int, b int) int { return a + b } fmt.Println(sum(10, 20))
這種做法的好處是函數可以當作是一種參數傳給其他函數,map 跟 sort 就是傳遞並調用函數。
compute 的第一個參數 operation 是一個接收兩個 int 回傳一個 int 的函數,其型別為 func(int, int) int
func main() { sum := func(a int, b int) int { return a + b } multiply := func(a int, b int) int { return a * b } compute := func(operation func(int, int) int, a int, b int) int { return operation(a, b) } fmt.Println(compute(sum, 10, 20)) fmt.Println(compute(multiply, 10, 20)) }
4. 返回函數+closure:
Go 函數可以返回函數。
下面紅色的字體代表 newCounter 返回的類型是一個函數,這個返回的函數每次被呼叫會回傳一個整數。
func newCounter(base int) func() int { return func() int { base += 1 return base } } func main() { counter := newCounter(10) fmt.Println(counter()) // 11 fmt.Println(counter()) // 12 fmt.Println(counter()) // 13 }
5. Currying:
Go 函數可以寫成 Currying 的形式。
func sum(a int) func(int) int { return func(b int) int { return a + b } } func main() { fmt.Println(sum(10)(20)) }
目前還無法領悟 Currying 的好處 QQ
留言
張貼留言