一、结构
func name(InputParameter-list) (OutPutResult-list) {
function body
}
InputParameter: 输入的变数
OutPutResult: 输出的变数
输出的变数,如果只有一个,可以省略()。下面有範例。
二、特性
在Go语言中,函数是一等(first-class)公民,函数类型也是一等的数据类型。
常用的 fmt.Println()之类的函数,就是可以接收可变长的参数。
在类型的前面加上... (三个点)
package mainimport ("fmt")func Sum(ops ...int) int { sum := 0 for _, ops := range ops { sum += ops } return sum}func main() { fmt.Println(Sum()) fmt.Println(Sum(1)) fmt.Println(Sum(1,2,3))}
https://play.golang.org/p/JQMsgZsBOr-
多返回值可以用_ (下滑线),省略参数
package mainimport ("fmt")func Sum(ops ...int) (number, total int) { sum := 0 num := 0 for _, ops := range ops { num ++ sum += ops } return num, sum}func main() { x, y := Sum() fmt.Println(x,y) _, y = Sum(1) //忽略第一个返回值 fmt.Println(y) x, y = Sum(1,3,5) fmt.Println(x, y)}
https://play.golang.org/p/dTYzJefJNxn
把函数当做值传递(函数做为值传入和函数做为返回值)
package mainimport ("fmt""errors")type operate func(x, y int) int//输入: 两个int类型的变数,和一个operate类型的参数//输出: 一个int类型,和一个error类型的结果func check(x int, y int, op operate) (int, error) {if op == nil { //检查op的参数,是不是 nilreturn 0, errors.New("Invalid")}return op(x, y), nil}//Sum和operate的宣告方式一致func Sum(a, b int) int { return a + b}func main() {x, y := 1, 2op := Sumresult, err := check(x, y, op)fmt.Printf("Result: %d (error: %v)\n", result, err)result, err = check(x, y, nil)fmt.Printf("Result: %d (error: %v)\n", result, err)}
https://play.golang.org/p/3-xXDTb89t2
参考来源:
Go语言核心36讲-郝林
https://www.flysnow.org/2017/03/31/go-in-action-go-method.html