云原生系列Go语言篇 - 函数,函数伴我闯江湖
2023-12-14 23:18:15
函数,函数伴我闯江湖
学到现在,我们的程序都局限于 main 函数中的寥寥数行。是时候搞点更大的动作了。本章中我们会学习如何在 Go 语言中编写函数以及函数那些有趣的东西。
1. 函数的定义
函数是 Go 语言中代码复用的基本单位。函数可以被定义在包级别或局部作用域内。包级别的函数可以在包的任何地方被调用,而局部作用域内的函数只能在定义它们的函数或块内被调用。
函数的定义由函数名、参数列表和函数体组成。函数名是用来标识函数的唯一名称,参数列表是函数接收的参数,函数体是函数要执行的代码块。
func greet(name string) {
fmt.Println("Hello", name)
}
上面的代码定义了一个名为 greet 的函数,它接收一个字符串参数 name,并在函数体中打印出 "Hello" 和 name 的值。
2. 函数的调用
函数可以通过函数名后面跟着参数列表来调用。参数列表中的参数必须与函数定义中的参数一一对应。
greet("John")
上面的代码调用了 greet 函数,并传入了一个字符串参数 "John"。
3. 函数的类型
函数的类型由其参数类型和返回值类型组成。函数的类型可以被用作变量的类型。
var f func(string)
上面的代码声明了一个变量 f,它的类型是一个函数类型,该函数接收一个字符串参数并返回 void。
4. 函数式编程
函数式编程是一种编程范式,它强调函数的使用和避免状态的变化。函数式编程语言通常支持高阶函数、闭包和惰性求值。
5. 高阶函数
高阶函数是指可以接收函数作为参数或返回值的函数。高阶函数可以使代码更具通用性和可重用性。
func map(f func(int) int, xs []int) []int {
ys := make([]int, len(xs))
for i, x := range xs {
ys[i] = f(x)
}
return ys
}
上面的代码定义了一个名为 map 的高阶函数,它接收一个函数 f 和一个切片 xs 作为参数,并返回一个新的切片 ys。新的切片 ys 是通过将函数 f 应用于切片 xs 中的每个元素而得到的。
6. 闭包
闭包是指可以访问其定义作用域中变量的函数。闭包可以使代码更具模块性和可重用性。
func makeCounter() func() int {
i := 0
return func() int {
i++
return i
}
}
上面的代码定义了一个名为 makeCounter 的函数,它返回一个闭包。闭包返回一个函数,该函数每次被调用时都会将 i 的值递增 1 并返回 i 的值。
7. 函数指针
函数指针是指指向函数的指针。函数指针可以使代码更具通用性和可重用性。
var f func(int) int
f = func(x int) int { return x * x }
上面的代码声明了一个变量 f,它的类型是一个函数指针。函数指针 f 被赋值为一个匿名函数,该函数接收一个整数参数并返回该整数的平方。
8. 接口
接口是指定义了一组方法的类型。接口可以使代码更具通用性和可重用性。
type Shape interface {
Area() float64
Perimeter() float64
}
上面的代码定义了一个名为 Shape 的接口,它定义了两个方法 Area 和 Perimeter。任何实现这些方法的类型都是 Shape 接口的类型。
9. 面向对象编程
面向对象编程是一种编程范式,它强调对象和类的使用。面向对象编程语言通常支持封装、继承和多态性。
10. 总结
函数是 Go 语言中代码复用的基本单位。函数可以被定义在包级别或局部作用域内。函数可以通过函数名后面跟着参数列表来调用。函数的类型由其参数类型和返回值类型组成。函数式编程是一种编程范式,它强调函数的使用和避免状态的变化。高阶函数是指可以接收函数作为参数或返回值的函数。闭包是指可以访问其定义作用域中变量的函数。函数指针是指指向函数的指针。接口是指定义了一组方法的类型。面向对象编程是一种编程范式,它强调对象和类的使用。