Skip to content

函数

4

https://tour.go-zh.org/basics/4

go
package main

import "fmt"

func add(x int, y int) int {
	return x + y
}

func main() {
	fmt.Println(add(42, 13))
}

func add(x int, y int) 可简写为 func add(x, y int)

多个相同类型可简写。

返回多个值

https://tour.go-zh.org/basics/6

go
package main

import "fmt"

func swap(x, y string) (string, string) {
	return y, x
}

func main() {
	a, b := swap("hello", "world")
	fmt.Println(a, b)
}

named return values / 带名字的返回值

https://tour.go-zh.org/basics/7

go
package main

import "fmt"

func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}

func main() {
	fmt.Println(split(17))
}

关键点在于 (x, y int) 和空的 return

裸 return(bare return)会自动返回 x 和 y

适用于短函数,优点是知道返回值

函数参数

go
func compute(fn func(float64, float64) float64) float64 {
	return fn(3, 4)
}

func main() {
	hypot := func(x, y float64) float64 {
		return math.Sqrt(x*x + y*y)
	}
	fmt.Println(hypot(5, 12))

	fmt.Println(compute(hypot))
	fmt.Println(compute(math.Pow))
}

闭包

go
func adder() func(int) int {
	sum := 0
	return func(x int) int {
		sum += x
		return sum
	}
}