跟我一起学习GO语言006

2019-07-13  本文已影响0人  搬砖人1314

接下来我们看函数,这个是各种语言中重要的组成部分

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

请开始你的表演,践行,践行,再践行。未完待续。。。

上一篇下一篇

猜你喜欢

热点阅读