很久以前做的笔记,整理一下,分享出来。。。。
/*
函数的使用:
A. "无"返回值 函数
B. “有”返回值 函数
C. 多态:回调函数
D. 闭包
*/
package Bfunction
import (
"fmt"
)
// 通过 Main函数 调用 运行函数
func TestRun() {
//定义参数: Slice
//args := []int{7, 5, 8, 66, 55, 24}
//调用 无返回值: 传参: func03
//func0(args...)
//调用 有返回值 参数
// str := func03()
// fmt.Println(str)
//输出返回的值
// fmt.Println(func04())
//调用 有参数有返回值
// max, min := func05(3, 8)
// fmt.Printf("max 是 %d, min 是 %d\n", max, min)
// 使用_占位符:即不需要的数,可通过 _ 点位符丢弃
// max01, _ := func05(6, 20)
// fmt.Printf("两个数中的大数是:%d\n", max01)
//调用回调函数: 计算器
//(只修改调用 的参数,即可 实现 同一个调用函数,不同的执行结果)
//resuft := Calc(3, 8, add) //传递 add 执行 加法
// resuft := Calc(10, 8, Minus) //传递 Minus 执行 减法
// fmt.Println("resuft=", resuft)
//调用 闭包 函数
testRun()
}
/*----------------------------------------------------------------------*/
//A."无"返回值 函数 调用
//接收不定参的传递,及转发传递
func func0(args ...int) {
//Func02(args...) //按args原样传递全部元素
/*
1.其本质上是Slice切片;(ars[:]...)(args[:(len)-1]...)都合法
2.参数后面的 ... 不能丢
*/
Func02(args[3:]...) //从args[3]开始(包括索引为3的元素)到后面所有元素传递过去
Func02(args[:5]...) //从args[0]至args[5](但不包括 元素args[5] 传递过去
}
//多个参数类型
func Func01(a int, b string, c float32) { //参数中也可以用 (a ,b int,c string)
fmt.Printf("a=%d,b=%s,c=%v\n", a, b, c)
}
// ...type 不定参数类型
func Func02(args ...int) {
//获取参数的个数
fmt.Println("len(args)=", len(args))
//获取每个参数
// for i := 0; i < len(args); i++ {
// fmt.Printf("args[%d]=%d\n", i, args[i])
// }
//通过 迭代 输出参数
for i, data := range args { //遍历参数列表
fmt.Printf("args[%d]=%d\n", i, data)
}
}
/*-------------------------------------------------------------------*/
//B. “有”返回值 函数
//无参,有一个返回值 官方推荐给返回值"命名";
func func03() (resuft string) {
//赋值
resuft = "一个返回值"
return
}
//无参 多个返回值
func func04() (a, b, c int) { // 等价于 返回值(int,int,int)
//赋值
a, b, c = 10, 20, 30
//直接返回
return
}
//定义函数: 两个数比较大小
func func05(a, b int) (max, min int) {
if a > b {
max = a
min = b
} else {
max = b
min = a
}
return
}
/*----------------------------------------------------------------------*/
//C. 多态:回调函数
//回调函数即 有一个参数是函数类型,即回调函数
//调用同一个接口,不同的表现,即 多态
//通过使用 函数 类型的变量,可以先将调用写上,以后再 将 调用 的方法本体完善
type funcType func(int, int) int //定义一个函数类型
//实现一个 加法
func add(a, b int) int {
return a + b
}
//实现一个 减法
func Minus(a, b int) int {
return a - b
}
//定义计算器的函数 通过 函数类型的参数,实现 回调函数
func Calc(a, b int, F funcType) (result int) {
//F 这个函数并没有实现,可以先调用着
result = F(a, b)
return
}
/*----------------------------------------------------------------------*/
//D. 闭包函数
//返回一个匿名函数类型
func func06() func() int {
var a int //初始值是0
return func() int { //闭包函数
a++
return a * a
}
}
//调用上面的函数
//特点:闭包函数使用的a变量,只要闭包还在使用它,它就不会被释放;即:不关心作用域
func testRun() {
f := func06()
x1 := f() //通过f来调用闭包函数
x2 := f()
x3 := f()
x4 := f()
fmt.Printf("x1=%d,x2=%d,x3=%d,x3=%d", x1, x2, x3, x4)
//输出:x1=1,x2=4,x3=9,x3=16
}
/*----------------------------------------------------------------------*/
浙公网安备 33010602011771号