函数

函数是一种特殊的代码块,用于执行某项任务。

函数的声明
func runing(footer string, ...interface{}) (string, error) {
    // statement
}

// 各种声明函数例子
func add(x int, y int) int {}
func sub(x, y int) int {}
func div(x int, _ int) (int, error) {}
func mul(x int, y int) (result int) {}

func关键字用于声明这是一个函数,紧接着是函数的名字,即running,圆括号为函数形参列表,最后是返回值列表和花括号里具体的实现逻辑。

函数特点
  1. 可以为函数的返回值像形参一样命名,这时候,每一个命名的返回值会声明为一个局部变量,并根据变量类型初始化为相应的零值
  2. 函数的类型称为函数签名。当两个函数拥有相同的形参列表和返回值列表时,认为这两个函数的类型或签名是相同的。而形参和返回值的名字不会影响到函数类型,采用简写同样也不会影响函数类型
  3. Go语言没有默认值的概念也不能指定实参名,所以除了用于文档说明之外,形参和返回值的命名不会对调用方有任何影响。
  4. 形参变量都是函数的局部变量,初始值由调用者提供的实参传递。函数形参以及命名返回值同属于函数最外层作用域的局部变量
  5. 实参是按值传递的,所以函数接收到的是每个实参的副本;修改函数的形参变量并不会影响到调用者提供的实参。如果提供的实参包含引用类型,例如指针,slice, map,函数或通道,那么函数使用形参变量时就有可能会间接地修改实参变量。
函数的多返回值

go语言是支持多参数返回的,通常按照惯例多返回值的最后一个参数的类型应为error

函数变量
  1. 函数在Go语言中是头等重要的值。就像其他值,函数变量也有类型,而且它们可以赋给变量或传递或从其他函数返回。
  2. 函数类型的零值为nil,调用一个空的函数变量将导致宕机(panic)。
  3. 函数变量可以和空值相比较,但它们本身不可比较,所以不可以相互进行比较或者作为键值出现在map中。
匿名函数

匿名函数只能在包级别的作用域进行声明,但是我们可以用函数字面量在任何表达式内指定函数变量。函数字面量就像函数声明,但func关键字后面没有函数的名称。它是一个表达式,它的值称为匿名函数。以这种方式定义的函数能够获取到整个词法环境,因此里层的函数可以使用外层函数中的变量。

package main

import "fmt"

func squares() func() int {
    var x int
    return func() int {
        x++
        return x * x
    }
}

func main() {
    f := squares()
    fmt.Println(f())
}
变长函数

变长函数被调用的时候可以有可变的参数个数,在参数列表最后的类型名称前使用省略号表明一个变长函数,调用这个函数时可以传递该类型任意数目的参数。

// 定义
func sum(n ...int) {}

func main() {
    arr := []int{1, 2, 3}
    sum(arr...)// 调用
}

that's all

results matching ""

    No results matching ""