美文网首页
跟我一起学习GO语言006

跟我一起学习GO语言006

作者: 搬砖人1314 | 来源:发表于2019-07-13 14:08 被阅读0次

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

    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

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

    相关文章

      网友评论

          本文标题:跟我一起学习GO语言006

          本文链接:https://www.haomeiwen.com/subject/bxyphctx.html