Golang return 关键字
最后修改于 2025 年 5 月 7 日
本教程解释了如何在 Go 中使用 return
关键字。我们将通过不同返回场景的实际示例来涵盖函数返回。
return
语句会终止当前函数的执行,并可以选择将一个或多个值返回给调用者。它是 Go 中函数行为的基础。
在 Go 中,return
可以返回单个值、多个值,或者不返回值。执行时它总是立即退出函数。具有返回类型的函数必须返回该类型的值。
基本函数返回
return
最简单的用法是退出函数并返回单个值。此示例演示了一个基本的加法函数。
package main import "fmt" func add(a, b int) int { return a + b } func main() { sum := add(3, 4) fmt.Println("Sum:", sum) }
add
函数返回两个整数的和。return
语句计算并返回结果。函数立即退出。
多个返回值
Go 支持从函数返回多个值。此示例展示了如何返回和接收多个值。
package main import "fmt" func divide(a, b float64) (float64, error) { if b == 0 { return 0, fmt.Errorf("cannot divide by zero") } return a / b, nil } func main() { result, err := divide(10, 2) if err != nil { fmt.Println("Error:", err) } else { fmt.Println("Result:", result) } }
该函数同时返回结果值和错误值。这是 Go 中错误处理的常见模式。调用者分别接收这两个值。
命名返回值
Go 允许为返回值命名以提高清晰度。当使用空的 return
语句时,这些变量会自动返回。
package main import "fmt" func rectProps(length, width float64) (area, perimeter float64) { area = length * width perimeter = 2 * (length + width) return // naked return } func main() { a, p := rectProps(5, 3) fmt.Printf("Area: %.2f, Perimeter: %.2f\n", a, p) }
返回值 area
和 perimeter
在函数签名中声明。空的 return
返回它们当前的值。这在某些情况下可以提高代码的可读性。
用于错误处理的提前返回
return
通常用于错误条件下的提前退出。此示例演示了 Go 中首先检查错误的常见模式。
package main import ( "fmt" "os" ) func processFile(filename string) error { file, err := os.Open(filename) if err != nil { return err // early return on error } defer file.Close() // Process file contents here fmt.Println("File processed successfully") return nil } func main() { err := processFile("test.txt") if err != nil { fmt.Println("Error:", err) } }
如果文件打开失败,函数将立即返回。这种模式保持了主路径未缩进,并使错误情况清晰明了。
返回函数
Go 函数可以返回其他函数。此示例展示了一个返回具有对其作用域访问权限的闭包的函数。
package main import "fmt" func multiplier(factor int) func(int) int { return func(x int) int { return x * factor } } func main() { double := multiplier(2) triple := multiplier(3) fmt.Println("Double of 5:", double(5)) fmt.Println("Triple of 5:", triple(5)) }
multiplier
函数返回另一个函数。返回的闭包会记住来自外部作用域的 factor
值。
返回结构体
函数可以返回复杂的类型,如结构体。此示例演示了返回自定义结构体类型。
package main import "fmt" type Person struct { Name string Age int } func createPerson(name string, age int) Person { return Person{ Name: name, Age: age, } } func main() { p := createPerson("Alice", 30) fmt.Printf("%+v\n", p) }
该函数返回一个完全初始化的 Person
结构体。调用者接收完整的结构体值。结构体返回在 Go 中对于复杂数据很常见。
返回指针
函数可以返回值的指针。这对于大型结构体或需要修改返回值的场景很有用。
package main import "fmt" func createCounter() *int { count := 0 return &count } func main() { counter := createCounter() *counter++ fmt.Println("Count:", *counter) }
该函数返回指向局部变量的指针。在 Go 中,这是安全的,因为编译器会执行逃逸分析。调用者可以通过指针修改该值。
来源
本教程通过函数中不同返回模式的实际示例,涵盖了 Go 中的 return
关键字。