Skip to content

Latest commit

 

History

History
executable file
·
69 lines (53 loc) · 2.06 KB

File metadata and controls

executable file
·
69 lines (53 loc) · 2.06 KB

函数

函数介绍

Go 中的函数重载是被禁止的,即不能通过不同的参数传递执行同名函数的不同功能。

Go 中没有泛型的概念,因此它不支持那种支持多种类型的函数,不过大部分情况可以使用 interface 跟反射来实现相似的功能。

传递变长参数

如果某个函数的最后一个参数采用 ...type 的形式,那么这个函数就可以用来处理一个变长的参数,这个长度可以是 0,这样的函数称为变参函数。

func SampleFunc(prefix string, who ...string)

SampleFunc("Hello", "world1", "world2", "world3")

defer 和追踪

关键字 defer 允许在 函数执行完之前或 return 执行完之后 推迟执行某一段代码,类似于其它语言中的 finally 关键字。

当有多个 defer 行为被注册时,它们会逆序执行(类似于栈)

Go 的内置函数

名称 说明
close 用于关闭管道通信
len 返回某个类型的长度或者数量(string, list, slice, map, channel)
cap 返回某个类型的最大容量(map, channel)
new new 用于值类型和用户定义的类型
make make 用于内置引用类型(slice, map, channel)
copy 复制
append 连接切片
panic 错误处理
recover 错误处理

lambda 函数

当为了实现一个简单的函数的时候,可以在函数体中对一个函数进行不命名的定义。

lambdaFunc := func (x, y int) int {
    return x+y
}
lambdaFunc(1, 2)

或者可以直接调用 lambda 函数

func (x, y int) int {
    return x+y
}(1, 2)

工厂模式

一个返回值为另一个函数的函数可以称为工厂函数,在需要创建一系列相似的函数的时候很有用处。在 Python 中被称为高阶函数或者装饰器。如下:

func MakeAddSuffix(suffix string) func(string) string {
    return func (name string) string {
        if !string.HasSuffix(name, suffix){
            return name + suffix
        }
        return name
    }
}

addTxt := MakeAddSuffix(".txt")
addTxt("test")  // test.txt