Go语言的流程结构简单介绍

流程结构


流程结构

和c及java一样,go程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构。

顺序结构:从上向下,逐行执行。

选择结构:条件满足,某些代码才会执行。0-1次

​ 分支语句:if,switch,select

循环结构:条件满足,某些代码会被反复的执行多次。0-N次

​ 循环语句:for

if

if的基本表达

GO中的if与c和Java中的基本一致,只是表达方法不一样,Go的if不需要使用括号

如代码所示

if 布尔表达式1 {
   /* 在布尔表达式1为 true 时执行 */
} else if 布尔表达式2{
   /* 在布尔表达式1为 false ,布尔表达式2为true时执行 */
} else{
   /* 在上面两个布尔表达式都为false时,执行*/
}

特殊用法

Go语言中的if语句还有一个特殊用法

if statement; condition {  
}

代码中的statemen表示创建一个作用域在if中的数据,分号后表示条件

示例代码

if num := 10; num % 2 == 0 { 
    //checks if number is even
        fmt.Println(num,"is even") 
    }  else {
        fmt.Println(num,"is odd")
    }

switch

swith基本用法

和c以及java一样,可以用if来表示的语句基本都可以使用switch来表示

switch var1 {
    case val1:
        ...
    case val2:
        ...
    default:
        ...
}

但是Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用fallthrough强制执行后面的case代码。感觉在这一点上比c和Java要更方便

case中的表达式是可选的,可以省略。如果该表达式被省略,则被认为是switch true,并且每个case表达式都被计算为true,并执行相应的代码块。

如代码所示

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var grade string = "B"
   var marks int = 90
    
   switch marks {
      case 90: grade = "A"
      case 80: grade = "B"
      case 50,60,70 : grade = "C"  //case 后可以由多个数值
      default: grade = "D"  
   }
//switch后没有变量的话默认switch后跟bool型true
   switch {
      case grade == "A" :
         fmt.Printf("优秀!\n" )     
      case grade == "B", grade == "C" :
         fmt.Printf("良好\n" )      
      case grade == "D" :
         fmt.Printf("及格\n" )      
      case grade == "F":
         fmt.Printf("不及格\n" )
      default:
         fmt.Printf("差\n" );
   }
   fmt.Printf("你的等级是 %s\n", grade );      
}

fallthrough

如需贯通后续的case,就添加fallthrough

case

package main

import (
	"fmt"
)

type data [2]int

func main() {
	switch x := 5; x {
	default:
		fmt.Println(x)
	case 5:
		x += 10
		fmt.Println(x)
		fallthrough
	case 6:
		x += 20
		fmt.Println(x)

	}

}

运行结果

15
35

注意:switch的注意事项

  1. case后的常量值不能重复
  2. case后可以有多个常量值
  3. fallthrough应该是某个case的最后一行。如果它出现在中间的某个地方,编译器就会抛出错误。

Type Switch

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

例如

switch i := x.(type) {
      case nil:	  
         fmt.Printf(" x 的类型 :%T",i)                
      case int:	  
         fmt.Printf("x 是 int 型")                       
      case float64:
         fmt.Printf("x 是 float64 型")           
      case func(int) float64:
         fmt.Printf("x 是 func(int) 型")                      
      case bool, string:
         fmt.Printf("x 是 bool 或 string 型" )       
      default:
         fmt.Printf("未知型")     
   }   

for

基础语法

for init; condition; post { }

例如

func main() {  
    for i := 1; i <= 10; i++ {
        fmt.Printf(" %d",i)
    }

和if一样在for循环中声明的变量仅在循环范围内可用。因此,上述代码中的i不能在外部访问循环。

for语法2

在for循环中,如果变量已经声明,在for中可以只存在判断语句

例如

var b int = 15
var a int
for a < b {
      a++
      fmt.Printf("a 的值为: %d\n", a)
      }

for的range格式

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

如:

for key, value := range oldMap {
    newMap[key] = value
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值