📜  Golang 中的命名返回参数

📅  最后修改于: 2021-10-25 02:30:38             🧑  作者: Mango

先决条件:Golang 中的函数

在 Golang 中,命名返回参数通常称为命名参数。 Golang 允许在函数签名或定义中为函数的返回或结果参数命名。或者你可以说它是函数定义中返回变量的显式命名。基本上,它消除了在 return 语句中提及变量名称的要求。通过使用命名返回参数或命名参数只能在函数末尾使用 return 关键字将结果返回给调用者。当函数必须返回多个值时,通常会使用此概念。所以为了用户的舒适度和提高代码的可读性,Golang 提供了这个功能。

声明命名返回参数

要声明命名结果或返回参数,只需使用函数签名的返回类型部分。下面是在 Golang 中声明函数的一般语法。

声明没有命名返回参数的函数的语法:

func function_name(Parameter-list)(Return_type){
    // function body.....
}

这里, Return_Type 是可选的,它包含函数返回的值的类型。如果您在函数中使用 Return_Type,则有必要在函数使用 return 语句。

使用命名返回参数声明函数的语法:

这里, (result_parameter1 data-_type, result_parameter2 data_type, ....)是命名的返回参数列表及其类型。您可以声明 n 个命名返回参数。

命名返回参数-Golang1

示例:在下面的程序中, func calculator(a, b int) (mul int, div int)代码行包含命名的返回参数。函数末尾的 return 语句不包含任何参数。 Go 编译器会自动返回参数。

// Golang program to demonstrate the
// use of Named Return Arguments
  
package main
  
import "fmt"
  
// Main Method
func main() {
  
    // calling the function, here
    // function returns two values
    m, d := calculator(105, 7)
  
    fmt.Println("105 x 7 = ", m)
    fmt.Println("105 / 7 = ", d)
}
  
// function having named arguments
func calculator(a, b int) (mul int, div int) {
  
    // here, simple assignment will
    // initialize the values to it
    mul = a * b
    div = a / b
  
    // here you have return keyword
    // without any resultant parameters
    return
}

输出:

105 x 7 =  735
105 / 7 =  15

要点

  • 如果所有命名返回参数的类型是通用的或相同的,那么您可以指定通用数据类型。将下面的代码与您在上面阅读的示例进行比较,以获得更好的可理解性。
    // function having named arguments
    func calculator(a, b int) (mul, div int) {
    

    这里, muldiv变量都是 int 类型。因此,您还可以声明具有通用数据类型的命名参数,例如函数变量(即ab

  • 使用命名返回参数将提高代码可读性,因为只需阅读函数签名即可了解返回参数。
  • 使用命名返回参数后,返回语句通常称为Naked 或 Bare return。
  • 默认情况下,Golang 使用零值定义所有命名变量,函数将能够使用它们。如果函数不修改值,则将自动返回零值。
  • 如果您将使用短声明运算符(:=) 来初始化命名的返回参数,则会出现错误,因为它们已被 Go 编译器初始化。因此,您可以使用简单的赋值(=) 将值分配给命名的返回参数。
    // function having named arguments
    func calculator(a, b int) (mul int, div int) {
    
        // here, it will give an error
            // as parameters are already defined
            // in function signature
        mul := a * b
        div := a / b
    
        // here you have return keyword
        // without any resultant parameters
        return
    }
    
  • 命名返回参数或裸返回语句仅适用于短函数签名。对于较长的函数,显式返回结果参数(不使用命名返回参数)以保持代码的可读性。
  • 在命名返回参数的情况下,裸或裸返回语句是必须的。