Go 函数
- 函数定义和调用:在 Go 中,使用
func
关键字定义函数,并在函数体{}
中编写具体代码。调用函数时,只需使用函数名加上括号(如greet()
)。 - 函数参数和返回值:函数可以接受参数,并通过参数执行动态操作。函数可以返回一个或多个值,使用
return
关键字指定返回值。 - 函数的好处:函数提高了代码的重用性和可读性,使程序结构更加清晰,有助于维护和调试。
我们使用函数将代码划分为更小的块,使代码看起来更清晰易懂。
基本上,函数是执行特定任务的代码块。例如,假设我们想编写代码来创建一个圆形和矩形并给它们上色。
在这种情况下,我们可以通过创建三个不同的函数来组织我们的代码:
- 创建圆形的函数
- 创建矩形的函数
- 上色的函数
这样,我们的代码将看起来更有组织。此外,我们可以重用同一个函数来给圆形和矩形上色。因此,提供了代码重用性的好处。
创建 Go 函数
在 Golang 中,我们使用 func
关键字来创建函数。
func greet(){
// 代码
}
这里,greet()
是函数的名称(由 ()
表示),而 {....}
内的代码表示函数体。
现在,让我们创建一个打印 早上好 的函数。
// 定义函数的程序
package main
import "fmt"
// 定义函数
func greet() {
fmt.Println("Good Morning")
}
func main() {
}
当我们运行这个程序时,我们不会得到输出。
这是因为我们只是定义了一个函数。要执行函数,我们需要首先调用它。
函数调用
我们使用函数名称后跟括号来调用函数。
greet()
现在,让我们在 main()
中添加一个函数调用。
// 定义函数的程序
package main
import "fmt"
// 定义函数
func greet() {
fmt.Println("早上好")
}
func main() {
// 函数调用
greet()
}
输出
早上好
这次函数运行了,我们得到了 早上好 作为输出。
示例:Golang 函数
package main
import "fmt"
// 加两个数的函数
func addNumbers() {
n1 := 12
n2 := 8
sum := n1 + n2
fmt.Println("Sum:", sum)
}
func main() {
// 函数调用
addNumbers()
}
输出
Sum: 20
在上面的例子中,我们创建了一个名为 addNumbers()
的函数。该函数加了两个数字并打印了和。
程序是这样工作的:
Golang 中的函数参数
在我们上一个例子中,我们创建了一个只做单一任务的函数,加两个数字 12 和 8。
func addNumbers() {
n1 := 12
n2 := 8
sum := n1 + n2
fmt.Println("Sum:", sum)
}
然而,在实际项目中,我们希望我们的函数能够动态工作。也就是说,addNumbers()
函数不仅能加 12 和 8,还应该能够加任意两个数字。
在这种情况下,我们可以创建接受外部值并对其进行操作的函数。这些额外的参数被称为函数参数。
定义带参数的函数
这是我们如何创建带参数的函数:
func addNumbers(n1 int, n2 int) {
// 代码
}
现在,addNumbers()
函数接受两个参数:n1
和 n2
。这里的 int
表示这两个参数都是整数类型。
要调用这个函数,我们需要传递一些值(称为函数参数)。
// 函数调用
addNumbers(21, 13)
这里,21 和 13 是传递给 addNumbers()
函数的函数参数。
示例:函数参数
// 说明函数参数的程序
package main
import "fmt"
// 定义带有 2 个参数的函数
func addNumbers(n1 int, n2 int) {
sum := n1 + n2
fmt.Println("Sum:", sum)
}
func main() {
// 在函数调用中传递参数
addNumbers(21, 13)
}
输出
Sum: 34
程序是这样工作的:
当我们调用函数时,参数被赋给函数参数。21
被赋给 n1
和 13
被赋给 n2
。
这就是为什么当我们在函数内加 n1
和 n2
时,我们得到 34 (21 + 13)。
注意: 函数参数的数据类型应始终与函数调用期间传递的数据匹配。这里,n1 和 n2 的数据类型是 int
,所以我们在函数调用期间传递了整数值 21 和 13。
从 Go 函数返回值
在我们最后一个例子中,我们直接在函数内部打印了和的值。然而,我们也可以从函数中返回值,并在程序的任何地方使用它。
这是我们如何创建一个返回值的 Go 函数:
func addNumbers(n1 int, n2 int) int {
// 代码
return sum
}
这里,int
在开括号 {
之前表示函数的返回类型。在这种情况下,int
表示函数将返回一个整数值。
而 return sum
是返 回语句,返回 sum
变量的值。
函数将值返回到调用它的地方,所以我们需要将返回的值存储到一个变量中。
// 函数调用
result := addNumbers(21, 13)
这里,我们将返回值存储到 result
变量中。
示例:函数返回值
package main
import "fmt"
// 函数定义
func addNumbers(n1 int, n2 int) int {
sum := n1 + n2
return sum
}
func main() {
// 函数调用
result := addNumbers(21, 13)
fmt.Println("Sum:",result)
}
输出
Sum: 34
在上面的例子中,当遇到 return
语句时,它返回 sum 的值。返回的值被分配给 main()
中的 result 变量。
程序是这样工作的。
return
语句应该是函数的最后一个语句。当遇到返回语句时,函数终止。
让我们看一个例子,
package main
import "fmt"
// 函数定义
func addNumbers(n1 int, n2 int) int {
sum := n1 + n2
return sum
// 返回语句后的代码
fmt.Println("After return statement")
}
func main() {
// 函数调用
result := addNumbers(21, 13)
fmt.Println("Sum:",result)
}
我们得到了 "missing return at the end of function" 错误,因为我们在返回语句后添加了一行代码。
从 Go 函数返回多个值
在 Go 中,我们还可以从函数中返回多个值。例如,
// 从函数返回多个值的程序
package main
import "fmt"
// 函数定义
func calculate(n1 int, n2 int) (int, int) {
sum := n1 + n2
difference := n1 - n2
// 返回两个值
return sum, difference
}
func main() {
// 函数调用
sum, difference := calculate(21, 13)
fmt.Println("Sum:", sum, "Difference:", difference)
}
输出
Sum: 34 Difference: 8
在上面的例子中,我们创建了一个名为 calculate()
的函数。
func calculate(n1 int, n2 int) (int, int) {
...
}
这里的 (int, int)
表示我们从函数返回两个整数值:总和和差值。
由于函数返回两个值,我们在调用函数时使用了两个变量。
sum, difference = calculate(21, 13);
使用函数的好处
以下是在编程中使用函数的好处:
1. 代码复用
我们可以在程序中多次复用同一个函数。例如,
// 程序示例:在函数中实现代码复用
package main
import "fmt"
// 函数定义
func getSquare(num int) {
square := num * num
fmt.Printf("%d 的平方是 %d\n", num, square)
}
// 主函数
func main() {
// 调用函数 3 次
getSquare(3)
getSquare(5)
getSquare(10)
}
输出
3 的平方是 9
5 的平方是 25
10 的平方是 100
在上面的程序中,我们创建了名为 getSquare()
的函数来计算一个数的平方。
这里,我们多次复用同一个函数来计算不同数字的平方。
2. 代码可读性
函数帮助我们将代码分割成块,使我们的程序易于阅读和理解。它还使代码更容易维护和调试。