ZXH的 《Go 语言入门指南:基础语法和常用特性解析-6》|青训营

76 阅读2分钟

Day6:《Go 语言入门指南:基础语法和常用特性解析-6》

  1. 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
}

今天的学习就到这里啦,明天再见~