Day6:《Go 语言入门指南:基础语法和常用特性解析-6》
- for 结构
与其他语言中的循环结构不同,比如c、java中有for、while、do-while循环结构,但是在go中如果想要重复执行某些语句,Go 语言中只有 for 结构可以使用。但是这个 for 结构比其它语言中的更为灵活。
注意 其它许多语言中也没有发现和 do-while 完全对等的 for 结构,可能是因为这种需求并不是那么强烈。
for语句的结构:
for 初始化语句; 条件语句; 修饰语句 {}
示例:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
fmt.Printf("This is the %d iteration\n", i)
}
}
2.for结构实现while
for 结构的第二种形式是没有头部的条件判断迭代(类似其它语言中的 while 循环),基本形式为:for 条件语句 {}。
也可以认为这是没有初始化语句和修饰语句的 for 结构,因此 ;; 便是多余的了。
package main
import "fmt"
func main() {
var i int = 5
for i >= 0 {
i = i - 1
fmt.Printf("The variable i is now: %d\n", i)
}
}
3.函数
每一个程序都包含很多的函数:函数是基本的代码块。
Go是编译型语言,所以函数编写的顺序是无关紧要的;鉴于可读性的需求,最好把 main() 函数写在文件的前面,其他函数按照一定逻辑顺序进行编写(例如函数被调用的顺序)。
Go 里面有三种类型的函数:
- 普通的带有名字的函数
- 匿名函数或者lambda函数
- 方法(Methods)
有趣的一点是,go中的函数大括号比如是跟func在同一行:
func g() {
}
而不能是如下的写法,不然会报错:
func g()
{
}
同时还需要注意,go中式不支持函数的重载的,如果想实现类似的方法但是不同的参数个数的话,必须使用不同的函数名字。
此外,目前 Go 没有泛型 (generic) 的概念,也就是说它不支持那种支持多种类型的函数。不过在大部分情况下可以通过接口 (interface),特别是空接口与类型选择与/或者通过使用反射来实现相似的功能。
4.函数参数与返回值
go中的函数参数与返回值很特殊, 函数能够接收参数供自己使用,也可以返回零个或多个值(我们通常把返回多个值称为返回一组值)。相比与 C、C++、Java 和 C#,多值返回是 Go 的一大特性,具体可以看下面的例子:
package main
import "fmt"
// 一个函数返回两个参数的示例
func divide(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("除数不能为0")
}
return a / b, nil
}
// 使用命名返回值的示例
func multiply(a, b int) (result int) {
result = a * b
return // 省略了return后面的变量名,直接返回result的值
}
func main() {
// 普通的函数参数调用
additionResult := add(3, 5)
fmt.Println("Addition:", additionResult)
// 调用返回多个值的函数
divisionResult, err := divide(10, 2)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Division:", divisionResult)
// 调用使用命名返回值的函数
multiplicationResult := multiply(4, 6)
fmt.Println("Multiplication:", multiplicationResult)
}
func add(a, b int) int {
return a + b
}
今天的学习就到这里啦,明天再见~