美文网首页
跟我一起学习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

    接下来我们看函数,这个是各种语言中重要的组成部分 func 函数名(参数列表)(返回参数列表){ 函数内容} 来...

  • 跟我一起学习GO语言008

    本节我们来看GO语言中的并发。 我们看并发,就不得不学习goroutine,goroutine是Go语言...

  • 跟我一起学习GO语言004

    接上一节继续学习Go语言,存储和组织数据的方式 首先我们来学习数组,数组是一段固定长度的连续内存区域。 数组声明:...

  • 跟我一起学习GO语言007

    接上节,获得可变参数类型,可变参数为interface{}类型时,可以传入任何类型的值。 func printTy...

  • 跟我一起学习GO语言009

    本节我们做Go语言的一些语法回顾,通过语法我们可以发现Go语言非常简单,只有25个关键字,接下来我们回顾一下关键...

  • 跟我一起学习GO语言-小结

    学习GO语言有一段时间了,也写了不少的章节,因时间有点长了,所以我们对前面所学的知识做一下小结,然后作为一个目录,...

  • 跟我一起学习GO语言003

    接上一节继续学习Go基本语法与使用-字符串应用 通过Go语言内建函数获取切片、字符串、通道等长度。 例如-01: ...

  • 跟我一起学习GO语言005

    接上一节继续学习Go语言,存储和组织数据的方式 首先我们来看看列表增删方法 初始化列表:变量名:=list.New...

  • Go 语言学习技巧和编程思维

    Go 语言学习技巧和编程思维 一、了解 Go 语言 了解 Go 语言背景 学习 Go 语言,首先要了解 Go 语言...

  • 跟我一起学习GO语言012——表单操作

    上一节我们介绍了搭建一个Web服务器,本节我们来看看通过表单让客户端和服务器方便的进行数据交互,首先我们来看看一...

网友评论

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

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