接下来我们看函数,这个是各种语言中重要的组成部分
func 函数名(参数列表)(返回参数列表){
函数内容
}
来一个简单的求和函数
//输入两个参数,求和!
func Sum(a, b int) int {
return a + b
}
下面通过常量声明每天、小时、分钟,通过传输秒,计算出对应的天、小时、分钟的值,然后输出对应的值。
const (
//定义每分钟的秒数
SecondsPerMinute = 60
//定义每小时的秒数
SecondPerHour =SecondsPerMinute * 60
//定义每天的秒数
SecondPerDay = SecondPerHour* 24
)
//将传入的“秒”解析为3种时间单位
func resolveTime(seconds int) (day int, hour int, minute int) {
day = seconds /SecondPerDay
hour = seconds /SecondPerHour
minute = seconds / SecondsPerMinute
return
}
调用函数,输出
//将返回值作为打印参数
fmt.Println(resolveTime(1000))
//只获取小时和分钟
_, hour, minute := resolveTime(18000)
fmt.Println(hour, minute)
//只获取天
day, _, _ := resolveTime(180000)
fmt.Println(day)
0 0 16
5 300
2
下面我们看匿名函数
func (参数列表)(返回列表){
}
我们来看看实际的例子:
//匿名函数
func(data int) {
fmt.Println("匿名函数", data)
}(100)
//将匿名函数赋值给变量,使用变量名调用
xyz := func(data int) {
fmt.Println("匿名函数01 ", data)
}
xyz(88)
匿名函数作为回调函数
//遍历切片的每个元素,通过给定函数进行元素访问
func visit(list []int, f func(int)) {
for_, v := range list {
f(v)
}
}
//使用匿名函数打印切片内容
visit([]int{1,2,3,4,5},func(v int){
fmt.Println(v)
})
闭包(Closure)-引用了外部变量的匿名函数,闭包是引用了自由变量的函数,被引用的自由变量和函数同时存在,即使已经离开了自由变量的环境也会被释放或者删除,在闭包中更可以继续使用这个自由变量。
//提供一个值,每次调用函数会指定对值进行累加
func Accumulate(value int) func() int {
//返回一个闭包
return func() int {
//累加
value++
//返回一个累加值
return value
}
}
//创建一个累加器,初始值为1
accumulator := Accumulate(1)
//累加1并打印
fmt.Println(accumulator())
//累加1并打印
fmt.Println(accumulator())
//创建一个累加器,初始值为10
accumulator02 := Accumulate(10)
//累加1并打印
fmt.Println(accumulator02())
2 3 11
函数类型实现接口
//定义函数类型
typeFuncCallerfunc(interface{})
//实现Invoker的Call
func (f FuncCaller) Call(p interface{}) {
//调用
f(p)
}
下面我们来看参数数量不固定的函数形式
//定义一个函数,参数数量不固定,类型约束为字符串
func joinStrings(slist ...string) string {
//定义一个字节缓冲,快速地连接字符串
var b bytes.Buffer
//遍历可变参数列表slist,类型为[]string
for_, s := range slist {
//将遍历除的字符串连续写入字节数组
b.WriteString(s)
}
//将连接好的字节数组转换为字符串并输出
return b.String()
}
//输入3个字符串,将他们连成一个字符串
fmt.Println(joinStrings("pig", " and", " rat"))
fmt.Println(joinStrings("one", " two", "three", " four","five"))
pig and rat
one two three four five
请开始你的表演,践行,践行,再践行。未完待续。。。
网友评论