1. 函數定義
import "errors" func Add(a int, b int) (ret int, err error) { if a < 0 || b < 0 { err = errors.New("必須是非負數") } return a + b, nil // 支持多重返回 }
多個參數值類型相同可以簡寫
func Add(a, b int) int { return a + b }
2. 函數調用
//導入函數所在的包,然後直接調用即可 import Mymath Mymath.Add(1, 2)
3.不定參數
func Myfunc(args ...int){ // ...int是一個語法糖,只能作爲函數參數存在,且必須是最後一個 for _, val := range(args){ fmt.Println(val) } }
不定參數的傳遞
func Myfunc(args ...int) { for _, val := range(args) { fmt.Println(val) } } func Myfunc1(args ...int) { Myfunc(args...) // 將所有不定參數傳遞 } func Myfunc2(args ...int) { Myfunc(args[1:]...) // 傳遞片段 }
任意類型的不定參數
func Myprintf(args ...interface{}) { for _, val := range args{ switch val.(type) { case int: fmt.Println(val, "int") case string: fmt.Println(val, "string") } } }
3.多值返回
func foo()(n int, l int) { n = 1 l = 2 fmt.Println(n, l) return //return不帶任何值的時候,返回對應的返回值變量的值 } func main() { a, b := foo() fmt.Printf("in main a = %d b is %d", a, b) }
4匿名函數和閉包
func main() { f := func(x ,y int) int { // 匿名函數賦值給變量 return x + y } f(1, 2) func(a, b int){ //匿名函數直接執行 fmt.Println(a + b) }(1,2) }