函数

函数用于封装一段可复用逻辑。

一、最简单的函数

package main

import "fmt"

func sayHello() {
	fmt.Println("Hello")
}

func main() {
	sayHello()
}

函数定义格式:

func 函数名(参数列表) 返回值类型 {
}

二、带参数的函数

func greet(name string) {
	fmt.Println("你好," + name)
}

func main() {
	greet("张三")
}

多个参数:

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

相邻参数类型一样,可以简写:

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

三、返回值

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

func main() {
	result := add(1, 2)
	fmt.Println(result)
}

四、多个返回值

Go 函数可以返回多个值。

func divide(a, b int) (int, bool) {
	if b == 0 {
		return 0, false
	}
	return a / b, true
}

func main() {
	result, ok := divide(10, 2)
	if !ok {
		fmt.Println("除数不能为 0")
		return
	}

	fmt.Println(result)
}

多个返回值在 Go 里很常见,尤其是:

value, err := doSomething()

五、命名返回值

func fullName(first, last string) (name string) {
	name = first + " " + last
	return
}

命名返回值可以用,但不要滥用。普通业务代码里,明确 return value 往往更清楚。

六、函数作为变量

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

	fmt.Println(add(1, 2))
}

这种匿名函数常用于回调、测试或临时封装逻辑。

七、可变参数

func sum(nums ...int) int {
	total := 0
	for _, num := range nums {
		total += num
	}
	return total
}

func main() {
	fmt.Println(sum(1, 2, 3))
}

nums ...int 表示可以传任意多个 int

八、函数写法建议

  • 函数名表达动作,例如 createUserfindUser
  • 函数尽量短,一个函数只做一件主要的事。
  • 错误用返回值表达,不要到处用 panic
  • 参数太多时,考虑用结构体承载参数。