ZetCode

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 语言规范

本教程通过各种场景下函数和方法声明的实际示例,介绍了 Go 中的 func 关键字。

作者

我叫 Jan Bodnar,是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出所有 Golang 教程