go语言中的闭包就是指一个函数和其他相关的引用环境组合的一个整体(即实体),好比是一个类,其优点是:
1、只需传递一个参数,即传入一次,就可以反复使用;
2、闭包可以保留引用的值,而函数不能。
案例:
package main
import (
"fmt"
"time"
)
func daysCount(month int) func(int) int {
return func(year int) int {
switch month {
case 2:
if year % 4 == 0 && year % 100 != 0 || year % 400 == 0 {
return 29
}else {
return 28
}
case 1,3,5,7,8,10,12:
return 31
case 4,6,9,11:
return 30
// default :
// fmt.Println("输入有误")
}
return 0
}
}
func main() {
var month int
var year int
var j int = 10
for {
fmt.Println("请输入月份:")
fmt.Scanln(&month)
if month <= 12 && month > 0 {
break
}else {
j --
fmt.Printf("输入错误,您还有%v次机会...",j)
//continue
}
if j == 0 {
fmt.Println("错误输入已超过10次,月份输入将在3秒后关闭...")
time.Sleep(time.Second * 3)
break
}
}
fmt.Println("请输入年份:")
fmt.Scanln(&year)
f := daysCount(month)
days := f(year)
fmt.Printf("%v年%v月的天数为%v天 \n",year,month,days)
}
说明:f := daysCount(month), days := f(year), 形成闭包的引用。