Go 函数是什么

Go 函数是什么,简单地说,函数接受输入并返回输出。数据流经函数时,将被变换。一个典型的示例是将两个数相加的简单函数,它接受两个数字,将它们相加并返回结果。在这个简单示例中,接受的两个数字被称为输入,相加得到的结果被称为输出。

func addUp(x int, y int) int {
return x + y
}

函数的结构

在Go语言中,函数向编译器和程序员提供了有关的信息,这些信息指出了函数将接受什么样的输入并提供什么样的输出。这种信息是在函数的第一行中提供的,而这一行被称为函数签名。我们再以函数addUp为例,阐述Go语言中函数的结构是什么样的。

func addUp(x int, y int) int {
return x + y
}

关键字func指出这是一个函数的开头位置。接下来是函数名,这是可选的,但能够让您在其他地方调用(或使用)这个函数。接下来是一对括号,指出了函数接受什么样的值,在这里,是两个类型为int的值(带符号整数,长度至少为32位)。在右括号后面是返回值,这里也是一个类型为int的值。左大括号表示接下来为函数体,函数体以右大括号结束。如果函数签名声明了返回值,则函数体必须以终止语句结束。通常有一个返回值,但并非总是如此。

返回单个值

别忘了,在最简单的情况下,函数接受一个输入并返回一个输出,比如判断一个数字是奇数还是偶数的函数。实现函数前,务必花点时间想一想它要做什么、输入值是什么、返回值是什么。这不仅有助于设计函数,还能让您知道如何测试它。

编程语言通常提供了多种解决问题的方式,因此清楚函数的输入和输出后,从设计角度看函数的实现将不那么重要。

对于判断一个数字是奇数还是偶数的函数,可对其做如下假设。

  • 这个函数接受一个整型参数。
  • 这个函数返回一个布尔值:如果传入的整数为偶数,就返回true:否则返回false。

函数的输入和输出类型是在签名中声明的。只要稍微想一想,就可编写出这个函数的声明。

func isEven(i int) bool {
}

这个函数名为isEven,它将一个整数作为输入并返回一个布尔值。确定函数签名后,就可编写实现了。这个函数必须判断一个整数值是否为偶数,并返回一个布尔值。为此,一种办法是使用求模运算符%,这个运算符将一个整数作为左操作数,将其与右操作数相除,并返回余数。现在可以编写这个函数的实现了。

Func isEven(i int) bool {
return i%2 == 0
}

在设计函数方面,程序员仅受制于语言和想像力。编写复杂的软件或团队写作开发时,必须对一些重要的考虑因素做到心中有数。

  • 让每个函数只做一件事情并把这件事情做好。软件不可避免地要修改,通过结合使用大量简短的函数,可让软件更容易修改。这还有助于测试各个函数以及整个软件。
  • 维护。在团队合作开发中,您编写的函数易于阅读和理解吗?如果不是这样的,就说明它过于复杂或必须添加注释。别忘了,您可能在一年后的午夜时分回过头来阅读这个函数!
  • 性能。在有些情况下,函数的性能至关重要。定义明确的函数能够让程序员修改其实现,并测试其性能是否达到了目标基准。就函数isEven而言,调用者并不关心其实现——只要它实现了签名指定的功能。这让您能够轻松地修改其实现。

如下程序声明并调用了一个函数。

 package main

 import "fmt"

 func isEven(i int) bool {
  return i%2 == 0
 }

 func main() {
  fmt.Printf("%v\n", isEven(1))
  fmt.Printf("%v\n", isEven(2))
 }

要调用函数,可通过名称来对其进行引用,并提供所需的参数。在上面程序中,调用了函数isEven两次,并将结果打印到终端。对函数调用次数没有任何限制。

输出如下:
Go 函数是什么

返回多个值

在Go语言中,可在函数签名中声明多个返回值,让函数返回多个结果。在这种情况下,终止语句可返回多个值。在下面的示例中,函数签名指出函数不接受任何参数,并返回一个整数和一个字符串。在函数体中,return语句返回了多个用逗号分隔的值。

func getPrize() (int, string) {
i := 2
s := "goldfish"
return i, s
}

调用这个函数时,可直接将返回值赋给变量并使用它们。

func main() {
    quantity, prize := getPrize()
    fmt.Printf("You won %v %v\n", quantity, prize)
}

如下程序演示了一个返回多个结果的函数。

 package main

 import "fmt"

 func getPrize() (int, string) {
  i := 2
  s := "goldfish"
  return i, s
 }
 func main() {
  quantity, prize := getPrize()
  fmt.Printf("You won %v %v\n", quantity, prize)
 }

输出如下:
Go 函数是什么

赞(0)

评论 抢沙发

评论前必须登录!