Golang 中的函数


2022年1月15日, Learn eTutorial
2089

在之前的教程中,我们讨论了基本的编程概念,例如理解循环或条件语句、声明变量或常量等。在所有用于理解这些概念的程序中,我们都使用了一个函数。该函数名为 main,表示为 main()。在本教程中,您将学习函数的类型、如何创建函数、其返回类型等。

Golang 中的函数是什么?

在 Golang 中,程序的执行从主函数 func main() 开始。

GO : Functions

一个`函数`是一组相似的语句或逻辑语句的集合。考虑一个简单的日常例子——泡茶。为了泡茶,您需要遵循一系列指令,例如:

  • 拿一杯水
  • 加糖和茶叶
  • 加牛奶
  • 煮沸直到茶准备好
GO : Functions

因此,如果我们将泡茶视为一个函数,上述步骤是需要分组执行的语句或指令,那么这些语句将每次一起执行。如果泡茶时添加了额外的配料,如姜或小豆蔻等,这些语句(步骤)可能会有一些变化。这些变量可以作为函数的输入。我们将在本教程的后续部分中探讨如何传递这些输入并改变函数流程。

如何在 Golang 中声明函数?

在 Golang 中声明函数时,您应该使用关键字 `func`。

  • 关键字 `func` 后跟函数名称,该名称将是大写字母(大写)或小写字母(小写),具体取决于访问级别。
  • 如果函数名以大写字母作为第一个字符,则该函数将具有公共范围,并且可以从其他包访问。
  • 名称后面有一个括号(),其中包含所有需要提供给函数以改变函数流程的输入参数。
  • 然后是用于开始函数的左大括号“{”,并在末尾用右大括号“}”关闭函数。
     

声明函数的语法


func name(parameters){
    body of statements
}

其中

  • func 是函数关键字
  • name 是函数名
  • parameter 是传递给函数的参数,可能是单个或多个参数,带有或不带返回类型。
  • 花括号 **{ }** 包含函数体,在函数被调用时执行。
     

注意:需要注意的是,左大括号应与函数名声明在同一行,不能在另一行。

在Go语言中,不像许多其他编程语言那样允许这样做。让我们看一个简单的程序。


package main
import ("fmt")

// main function
func main()  {
  fmt.Println("I am main function ")
}

输出


I am main function 

如何在 Golang 中调用函数?

让我们通过经典的“Hello World”程序来理解函数调用的概念。让我们使用上述语法介绍一个函数 hello,`hello()`。


func hello() {
    fmt.Println("Hello, World!")
}

Go 语言函数,带空括号

GO : Functions

我们创建了一个函数 hello()。如果您在 Go 程序中运行此代码,它将不会在程序内部执行,因为我们的函数尚未完全定义。为了执行并打印或显示输出,我们需要在程序的主函数 main() 内部调用该函数。

让我们看看如何在 `main()` 函数块内部调用函数 `hello()`。

程序从 `main()` 函数开始执行。`main()` 函数在任何 `package main` 的程序中只出现一次,它不接收也不返回任何参数。以下示例显示了在 `main()` 中调用 `hello()` 函数的完全可执行代码。
调用函数的程序


package main
import "fmt"

func main() {     //main  function
    hello()       //calling user defined function named hello
}

func hello() {   //created function hello 
    fmt.Println("Hello  World!")
}

输出


Hello, World!

如何在 Golang 中调用带参数的函数?

在上一节中,我们讨论了调用带空括号的函数。现在让我们学习如何在已定义的函数括号内使用参数。在括号内定义参数时,还需要指定其对应的数据类型。
Golang 函数,括号内带参数

GO : Functions

让我们通过下面的示例程序来理解。该程序有一个名为 `site()` 的函数,括号内定义了两个参数。第一个参数是字符串数据类型,名为 `name`,第二个参数是整数类型,名为 `rept`。当函数 `site("Learn eTutorials", 5)` 被调用时,控制权转移到 `func site`,在那里定义了在 `site` 函数调用期间要执行的指令集。函数体中提供的指令是一个 `for` 循环,它将 `name` 循环 5 次。


package main
import "fmt"

func main() {
    site("Learn eTutorial", 5)  // calling function with two parameters
}

func site(name string, rept int) {
    for i := 0; i < rept; i++ {
        fmt.Print("\n ",name)
    }
}

输出


 Learn eTutorial
 Learn eTutorial
 Learn eTutorial
 Learn eTutorial
 Learn eTutorial

Golang 中函数的返回类型是什么?

在 Golang 中,函数可以有任何返回类型,并且可以在函数括号内包含任何类型的参数。下面我们来看看如何声明函数的返回类型。
带返回类型的语法


func name(parameters) <datatype of return type>{

    body of statements
}

在上面的语法中,`关键字 func` 定义了一个函数,后跟一个 `函数名`,括号内包含 `参数`,到目前为止这与普通函数声明相似。在此语法中,我们提到了一个新内容,即 `函数的返回类型`,它可以是 int、float、我们在基本 数据类型 中讨论的任何数据类型的字符串。

GO : Functions

让我们通过一个程序来理解


package main
import "fmt"

func add(x int, y int) int {     //add function

    return x + y
}

func sub(x, y int) int {       //sub function of omit type

    return x - y
}

func main() {

    fmt.Println(add(10, 5))     //calling function add
    fmt.Println(sub(10, 5))    // calling function sub
}

输出


 15
 5

注意:当函数参数具有相同数据类型时,可以省略其中一个参数的类型,这称为省略类型。

在上面的程序中,`add()` 和 `sub()` 是两个函数,它们都有两个整数类型的参数。在 `add()` 中,`x` 和 `y` 是整数数据类型的参数,分别在括号内指定为 `int x, int y`。在 `sub()` 中,`x` 和 `y` 两个参数都是整数类型,但只指定了一个参数的数据类型。在这种情况下,如果两个参数具有相同的数据类型,我们可以省略定义其中一个参数的数据类型。

GO : Functions

在这种定义风格中,不带数据类型的参数被理解为具有括号内提到的另一个参数的相似数据类型。变量 x 的类型被省略了。

Golang 函数的命名返回变量

在 Golang 中,函数参数之后,除了函数返回类型外,还可以指定命名返回变量。

GO : Functions

让我们通过一个程序来理解


package main
import "fmt"

func add(x int, y int) (a int) {     //add function with return type variable a
   a = x + y
    return 
    
}

func sub(x, y int) (b int) {       //sub function of omit type & return variable b
 b = x - y
    return 
}

func main() {
    fmt.Println(add(10, 5))     //calling function add
    fmt.Println(sub(10, 5))    // calling function sub
}

输出


 15
 5

上面给出的代码声明了名为 `a` 和 `b` 的整数类型变量,分别用于 `add()` 和 `sub()` 函数。每个函数对应的计算结果存储在变量中,并使用 `return` 关键字返回这些值。一旦 `main()` 函数开始执行,它会调用这些函数并显示如上所示的输出。

注意:从上述程序中我们了解到 Golang 支持函数中的多个参数。在函数括号内部,可以传递多个参数。

Go 语言函数命名约定

  • 函数名必须以字母开头,并且可以包含任意数量的其他字母和数字。
  • 函数名不能以数字开头。
  • 函数名中不允许有空格。
  • 关键字 `func` 后跟函数名称,该名称将是大写字母(大写)或小写字母(小写),具体取决于访问级别。
  • 如果函数名以大写字母作为第一个字符,则该函数将具有公共范围,并且可以从其他包访问。
  • 如果名称由多个单词组成,则第一个单词之后的所有单词都应大写,例如:empName, EmpAddress 等。
  • 区分大小写 (add, ADD, Add 是三个不同的变量)。
     

Golang 中的匿名函数是什么?

没有命名标识符来引用的函数被称为匿名函数。匿名函数接受输入并返回输出,类似于标准函数。
程序匿名函数


package main
import "fmt"

var (
   add =func(x int, y int) (a int) {     //add function with return type variable a
  a=x + y
    return 
}
)
func main() { 
    fmt.Println(add(10, 5))     //calling function add
    
}

输出


 15