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

留言
張貼留言