golang-基础知识(流程控制)

1 条件判断if和switch

所有的编程语言都有这个if,表示如果满足条件就做某事,不满足就做另一件事,go中的if判断和其它语言的区别主要有以下两点

1. go里面if条件判断不需要括号

2. go的条件判断语句中允许声明一个变量,这个变量的作用只在该条件逻辑块中

例子如下:
 

package main

import "fmt"

func main() {
	x := 5
    // 条件变量在外部声明
	if x >= 5 {
		fmt.Println("x >= 5")
	} else {
		fmt.Println("x < 5")
	}
    // 条件变量在条件语句内部声明
	if y := 3; y > 5 {
		fmt.Println("y > 5")
	} else {
		fmt.Println("y <= 5")
	}
}

结果如下:

当同时有多个if判断时,使用switch会使得我们的代码更简洁和灵活

例子如下:

package main

import "fmt"

func main() {

	i := 6
	switch i {
	case 4:
		fmt.Println("The integer was <= 4")
		fallthrough
	case 5:
		fmt.Println("The integer was <= 5")
		fallthrough
	case 6:
		fmt.Println("The integer was <= 6")
		fallthrough
	case 7:
		fmt.Println("The integer was <= 7")
		fallthrough
	case 8:
		fmt.Println("The integer was <= 8")
		fallthrough
	default:
		fmt.Println("default case")
	}
}

switch中默认每个case都带了一个break, 如果匹配成功不会继续往下执行,如果需要继续往下执行,则使用fallthrough强制执行后面的代码,因此,上面代码的运行结果是:

2. 无条件跳转goto

goto适用方法和c/c++类似,我们需要在函数中定义一个标签label,然后使用goto label即可无条件跳转到该位置,例子如下:

package main

import "fmt"

func main() {
	x := 5
	fmt.Println("x = ", x)
	goto Here
	fmt.Println("test")
Here:
	fmt.Println("goto here")
}

结果:

1.3 循环控制for

for和其它语言C、C++类似,只是格式不用括号包括,用法如下
for expression1; expression2; expression3 {
    //...
}

expression1, expression2和expression3都是表达式,其中expression1和expression3是变量声明和函数调用返回值之类的,expression2用来条件判断,expression1在循环开始前调用,expression3在每轮循环结束时调用

例子:计算1-9整数之和

package main

import "fmt"

func main() {
	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	fmt.Println("sum is equal to ", sum)
}

// 输出:sum is equal to 45

go里面是没有while这个关键字的,想要达到和while一样的效果也可以通过for实现,在for循环中expression1和expression3都省略掉就可以达到while的效果了。例子:

package main

import "fmt"

func main() {
	sum := 1
	for sum < 10 {
		sum += sum
	}
	fmt.Println("sum is equal to ", sum)
}

// 输出:sum is equal to 16

在循环中有两个关键操作continue和break,continue表示跳过本次循环,break表示跳出当前循环,这一点和C、C++一致。举个简单的例子

package main

import "fmt"

func main() {

	for i := 10; i > 0; i-- {
		if i == 5 {
			break // 或者continue
		}
		fmt.Println(i)
	}
	// break打印出来10、9、8、7、6
	// continue打印出来10、9、8、7、6、4、3、2、1
}

除此之外,还有一个常见的用法就是for和range配合来便利slice和map的数据,例子如下:

package main

import "fmt"

func main() {
	stus := map[string]string{
		"name":  "test",
		"age":   "18",
		"score": "78",
	}
	for key, val := range stus {
		fmt.Printf("key = %s, val = %s\n", key, val)
	}
}

输出结果为:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值