了解 Go 中的控制流程构造,了解函数和其应用,包括闭包和递归。
full lessons here👇:
https://programmerscareer.com/zh-cn/golang-basic-skill/
由AI生成,可能有错误,仅供参考
主题:For、If Else、Switch
控制流是所有编程语言的重要方面。它确定了代码执行的顺序。在 Golang 中,这些主要是 if-else
、for
和 switch
。
For 循环:
for
循环是 Go 语言中唯一的循环结构。下面是一个基本的 for 循环:
1 | for i := 0; i < 10; i++ { |
这个 for
循环打印从 0 到 9 的数字。
If-Else 构造:
if
语句允许您的程序条件地执行代码。您可以将多个 if 语句组合使用 else if
或 else
。
1 | num := 10 |
这个 if-else
构造打印出一个数字是否为偶数或奇数。
Switch Case 构造:
switch
语句是一种更短的方式来写一系列 if-else
语句。它运行第一个值与条件表达式相等的 case。下面是一个示例:
1 | fruit := "Apple" |
这个 switch case
构造根据 fruit
变量的值打印出一条语句。
主题:函数
现在让我们来探索 Go 语言中的函数!
函数声明:
Go 语言中的函数使用 func
关键字定义。下面是函数声明的通用语法:
1 | func functionName(parameterName parameterType) returnType { |
例如,下面是一个简单的函数,它将两个整数作为参数,并返回它们的和:
1 | func addNumbers(num1 int, num2 int) int { |
函数参数:
我们的 addNumbers
函数拥有两个参数 num1
和 num2
,它们都是整型。在 Go 语言中,函数参数在括号中提供,紧随函数名。
返回类型:
我们的 addNumbers
函数也返回一个整型值。函数的返回类型在函数参数和函数体之间指定。使用 return
语句在函数体中指定要返回的结果。
主题:使用 range
在 Go 中
Go 语言中的 range
关键字用于 for 循环来遍历数组、切片、字符串或映射的项目。
range 在数组中:
下面是一个使用 range
与数组的示例:
1 | numbers := [6]int{10, 20, 30, 40, 50, 60} |
在这个示例中,range
返回两个值:索引和该索引对应的值。
range 在切片中:
range
对切片工作方式与数组相同。如果您使用的是切片,而不是数组,这个代码仍然有效。
range 在映射中:
当用于映射时,range
返回键和值。下面是一个示例:
1 | m := make(map[string]int) |
range
提供了一种简单和直观的方式来遍历数组、切片和映射在 Go 语言中。
Topic: Go 中的闭包
闭包是一种特殊的匿名函数。匿名函数可以通过捕捉周围作用域中的变量来形成闭包。
定义闭包:
在 Go 中,闭包是在需要它们的地方定义的,并且可以将它们赋值给一个变量或立即调用。下面是一个简单的示例:
1 | func main() { |
在这个示例中,我们定义了一个匿名函数,它将两个整数作为参数,并返回它们的和。我们立即将这个函数赋值给变量 sum
,使得 sum
成为一个闭包。
理解闭包:
闭包可以访问其周围作用域中的变量。在下面是一个简单的闭包,它保持状态:
1 | func counter() func() int { |
在这个示例中,counter
函数返回另一个函数,这个函数形成了对 count
变量的闭包。每次调用这个返回函数时,它将增加 count
并返回其值。这 count
变量会跨越多个对 count()
函数的调用,但不能在外部访问。
Topic: Go 中的更多闭包
让我们更深入地探讨 Go 中的闭包概念。需要注意的是,Go 支持闭包,这意味着函数可以拥有一个“包含”环境,持有自己的变量。
考虑以下示例:
1 | package main |
在这个示例中,我们调用 intSeq()
,将结果赋值给 nextInt
。这个 nextInt
函数值捕捉了自己的 i
值,这个值将在每次调用 nextInt
时被更新。
为了确认状态是唯一的,可以创建和测试一个新的函数。
输出结果将是:
1 | 1 |
这个闭包的特性允许我们使用它们来实现更多有趣的事情,例如 nextInt := intSeq()
。根据您所做的事情,使用闭包与封装数据可以使您的程序具有良好的结构。
Topic: Go 中的递归
递归是指函数调用自己直接或间接地。对应的函数称为递归函数。
理解递归:
让我们来看一个简单的递归函数示例:
1 | package main |
在这个函数中,recurse
函数打印,然后调用自己与递减的计数器直到计数器变为 0。每个嵌套调用都有自己的 count
变量,它们不会互相干扰。
乘积递归函数:
乘积函数是一个经典的递归示例:
1 | func factorial(n int) int { |
在这个 factorial
函数中,它调用自己,乘以 n
和前一个函数的结果直到它降低到 0,然后开始解开,返回计算值。
请注意,在使用递归时需要确保基准情况是可达的。
English post: https://programmerscareer.com/go-basic-03/
作者:Wesley Wei – Twitter Wesley Wei – Medium
注意:本文为作者原创,转载请注明出处。
评论