GO语言基础语法5 —— 函数 | 青训营

87 阅读2分钟

在很多编程语言中都有函数,GO语言也不例外。下面是一个经典例子:

package main
import "fmt"

func add(a int, b int) int {
	return a + b
}

func add2(a, b int) int {
	return a + b
}

func exists(m map[string]string, k string) (v string, ok bool) {
	v, ok = m[k]
	return v, ok
}

func main() {
	res := add(1, 2)
	fmt.Println(res) // 3

	v, ok := exists(map[string]string{"a": "A"}, "a")
	fmt.Println(v, ok) // A True
}

一.函数的定义:

  • 使用func关键字来定义函数。
  • 函数名紧跟在func关键字后面。
  • 函数可以接受参数,并且可以返回一个或多个值。

二.函数的参数和返回值:

1.参数

  • 可以在函数名后的括号中指定一个或多个参数。每个参数由参数名、类型组成,用逗号分隔。
  • 可以在函数括号后面指定返回值的类型,如果没有返回值,可以省略返回值列表。
func add(x int, y int) int {
    return x + y
}

2. 多个返回值:

  • 函数可以返回一个或多个值。
  • 返回值的类型可以在函数定义时进行指定。
  • 使用逗号分隔返回值列表。
func divide(x, y float64) (float64, error) {
    if y == 0 {
        return 0, errors.New("division by zero")
    }
    return x / y, nil
}

3. 命名返回值:

  • 可以在函数定义时为返回值指定名称。
  • 命名返回值就像定义了一个具有该名称的变量。
  • 不需要显式使用return语句返回命名返回值,函数结束时会自动返回。
func divide(x, y float64) (result float64, err error) {
    if y == 0 {
        err = errors.New("division by zero")
        return
    }
    result = x / y
    return
}

三. 可变参数函数:

  • 可以使用...声明可变参数列表。
  • 在函数体内,可变参数被当作切片来处理。
func sum(numbers ...int) int {
    total := 0
    for _, num := range numbers {
        total += num
    }
    return total
}

注意 在GO语言中,函数的变量是后置的

四. 匿名函数:

  • 可以在函数内部定义匿名函数。
  • 匿名函数可以作为值传递给其他函数或存储在变量中。
```go
func main() {
    greeting := func() {
        fmt.Println("Hello, world!")
    }
    greeting()
}
```

五. 闭包:

  • 闭包是一个函数值,它可以引用其外部作用域中的变量。
  • 闭包使得我们可以在函数内部继续访问和修改外部函数的变量。
func increment() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

func main() {
    counter := increment()
    fmt.Println(counter()) // 输出 1
    fmt.Println(counter()) // 输出 2
}