一、结构
func name(InputParameter-list) (OutPutResult-list) {
function body
}
InputParameter: 输入的变数
OutPutResult: 输出的变数
输出的变数,如果只有一个,可以省略()。下面有范例。
二、特性
在Go语言中,函数是一等(first-class)公民,函数类型也是一等的数据类型。
package main
import (
"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 main
import (
"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 main
import (
"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的参数,是不是 nil
return 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, 2
op := Sum
result, 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
<<: Day 31. 你以为结束了吗? 错了!今天要来回顾整个系列
>>: 【修正模型】4-2 呼叫堆叠(Call Stack)
什麽是 DNS DNS 全称 Domain Name System 中文为「网域名称系统」, 可视为...
了解什麽是 GitHub 後,就来将先前新建好的 Local Repository 与 GitHub...
前言 哈罗,我是神天,一个不专业的废物.w. 欢迎大佬在下面用力的鞭打我这个不成熟的废物 昨天忘记提...
我们昨天有提到说,Django是一个Python的框架,理所当然的我们的电脑也要有Python才能运...
Hook是React在16.8中增加的新功能,和过往React Component架构相比,可以帮助...