golang 不是一種 OOP (Object-oriented programming) ,反而比較偏向 FP (Functional Programming),雖然我個人認為它不是很純的 FP,但是它擁有 First-class function 的特性,所以可以用一些 script language 常見的手法,使用在 golang 上面。
接下來我們來介紹,該如何宣告一個 func
package main
import "fmt"
func add(a int, by int) int {
return a + b
}
func main() {
fmt.Println(add(3, 2))
}
https://play.golang.org/p/AQ9ZaPECNYk
還可以顯示的命名回傳值,直接在回傳值上宣告要命名的變數名稱,這樣最後在 return 時,就不用刻意指定要回傳哪個變數回去了。
package main
import "fmt"
func add(a int, b int) (c int) {
c = a + b
return
}
func main() {
fmt.Println(add(3, 2))
}
https://play.golang.org/p/s0L2JHXYD6X
還可以多重回傳值,此手法在 golang error handling (後續章節會介紹) 很常見,約定俗成來說,如果有 error 要回傳,最右邊的變數為 error。
可參考官網 ioutil 的 ReallAll func。
下面範例,為回傳一個 int,一個 string。
package main
import "fmt"
func Info() (age int, name string) {
age = 18
name = "syhlion"
return
}
func main() {
age, name := Info()
fmt.Printf("age:%d, name:%s\n", age, name)
}
https://play.golang.org/p/pVu38aHJCBE