Golang func 关键字
最后修改于 2025 年 5 月 7 日
本教程解释了如何在 Go 中使用 func 关键字。我们将通过定义和使用函数的实际示例来介绍函数基础知识。
func 关键字用于在 Go 中声明函数。函数是执行特定任务且可重用的独立代码块。
在 Go 中,func 可以定义独立函数,也可以定义附加到类型的方法。函数是 Go 类型系统中的一等公民。
基本函数声明
func 的最简单用法是创建一个不接受任何参数也不返回任何值的函数。此示例展示了一个基本函数。
basic_func.go
package main
import "fmt"
func greet() {
fmt.Println("Hello, World!")
}
func main() {
greet()
}
greet 函数使用 func 声明,并从 main 调用。执行时它会打印一条消息。
带参数的函数
函数可以接受参数。此示例演示了一个接受两个整数并返回其总和的函数。
params_func.go
package main
import "fmt"
func add(a int, b int) int {
return a + b
}
func main() {
sum := add(5, 7)
fmt.Println("Sum:", sum)
}
add 函数接受两个 int 参数并返回它们的总和。具有相同类型的参数可以一起声明。
多个返回值
Go 函数可以返回多个值。此示例展示了一个同时返回商和余数的函数。
multi_return.go
package main
import "fmt"
func divide(dividend, divisor int) (int, int) {
quotient := dividend / divisor
remainder := dividend % divisor
return quotient, remainder
}
func main() {
q, r := divide(10, 3)
fmt.Printf("10 / 3 = %d with remainder %d\n", q, r)
}
返回类型在括号中指定。多个值使用逗号分隔的列表返回。
命名返回值
Go 允许为返回值命名,以方便文档和提高清晰度。此示例演示了命名返回。
named_return.go
package main
import "fmt"
func rectangleProps(length, width float64) (area, perimeter float64) {
area = length * width
perimeter = 2 * (length + width)
return
}
func main() {
a, p := rectangleProps(5.0, 3.0)
fmt.Printf("Area: %.2f, Perimeter: %.2f\n", a, p)
}
命名返回值的声明在函数签名中。裸露的 return 语句返回这些变量的当前值。
可变参数函数
可变参数函数接受可变数量的参数。此示例展示了一个对任意数量整数进行求和的函数。
variadic_func.go
package main
import "fmt"
func sum(numbers ...int) int {
total := 0
for _, num := range numbers {
total += num
}
return total
}
func main() {
fmt.Println("Sum of 1, 2, 3:", sum(1, 2, 3))
fmt.Println("Sum of 4, 5, 6, 7:", sum(4, 5, 6, 7))
}
... 前缀使参数成为可变参数。在函数内部,它被视为指定类型的切片。
函数作为类型
函数是 Go 中的一等公民。此示例展示了如何将函数用作值和类型。
func_type.go
package main
import "fmt"
type mathFunc func(int, int) int
func add(a, b int) int {
return a + b
}
func multiply(a, b int) int {
return a * b
}
func calculate(a, b int, operation mathFunc) int {
return operation(a, b)
}
func main() {
sum := calculate(5, 3, add)
product := calculate(5, 3, multiply)
fmt.Println("Sum:", sum)
fmt.Println("Product:", product)
}
我们为具有特定签名的函数定义了一个 mathFunc 类型。函数可以作为参数传递并存储在变量中。
方法声明
func 关键字也用于为类型定义方法。此示例展示了一个附加到结构体的方法。
method.go
package main
import "fmt"
type Rectangle struct {
length, width float64
}
func (r Rectangle) area() float64 {
return r.length * r.width
}
func main() {
rect := Rectangle{length: 5.0, width: 3.0}
fmt.Println("Area:", rect.area())
}
方法接收者 (r Rectangle) 出现在函数名之前。方法使用点表示法在类型的实例上调用。
来源
本教程通过各种场景下函数和方法声明的实际示例,介绍了 Go 中的 func 关键字。