zoukankan      html  css  js  c++  java
  • Golang 流程控制

    1. 选择结构

    if 语句

    if else

    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    )
    
    func if001() {
    	var num = 34
    	if num%2 == 0 {
    		fmt.Println("是偶数")
    	} else {
    		fmt.Println("是奇数")
    	}
    }
    
    func if002() {
    	filename := "a.txt"
    	contents, err := ioutil.ReadFile(filename)
    	if err != nil {
    		fmt.Println("读取文件失败")
    	} else {
    		fmt.Printf("%s
    ", contents)
    	}
    
    	// 以上读取文件动作和判断并打印动作可以写成一下格式
    	if contents, err := ioutil.ReadFile(filename); err != nil {
    		fmt.Println("读取文件失败")
    	} else {
    		fmt.Printf("%s
    ", contents)
    	}
    }
    
    func main() {
    	//if001()
    	if002()
    }
    

    else if

    package main
    
    import "fmt"
    
    func main() {
    	score := 75
    
    	if score >= 60 && score<= 100 {
    		fmt.Println("合格")
    	} else if score >=0 && score < 60 {
    		fmt.Println("不合格")
    	} else {
    		fmt.Println("存在问题")
    	}
    }
    

    switch case 语句

    写法 1

    package main
    
    import "fmt"
    
    // 输入成绩返回等级
    func grade(score int) string {
    	// 定义空字符串
    	var level string
    
    	switch {
    	case score <0 || score > 100:
    		level = "输入错误"
    	case score < 60:
    		level = "D"
    	case score < 80:
    		level = "C"
    	case score < 90:
    		level = "B"
    	case score < 100:
    		level = "A"
    	default:
    		level = "其他"
    	}
    	return level
    }
    
    func main() {
    	fmt.Println(grade(89))
    }
    

    写法 2

    package main
    
    import "fmt"
    
    func main() {
    	str := "a"
    	switch str {
    	case "a", "b":
            fmt.Println("找到了")
        case "c":
            fmt.Println("找到了")
    	default:
    		fmt.Println("没有找到")
    	}
    }
    

    在 java 和 js 等其他语言中 case 语句中需要添加 break 来终止当前 switch 语句的执行,如果不写 break 则会自动穿透到下一个 case 语句块。但是在 go 语言中每个 case 语句结束默认 break ,不会穿透到下一个 case 语句块,如果要想使当前 case 语句块穿透到下一个 case 语句块,可以使用关键字 fallthrough

    package main
    
    import "fmt"
    
    func main() {
    	str := "a"
    	switch str {
    	case "a":
    		fmt.Println("A")
    		fallthrough
    	case "b":
    		fmt.Println("B")
    	default:
    		fmt.Println("XXX")
    	}
    }
    

    2. 循环结构

    语句结构

    for 初始化语句;条件判断;结束语句 {
      循环代码块
    }
    

    for

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    func for001() {
    	// 死循环
    	for {
    		fmt.Println("无限循环中...")
    		time.Sleep(1*time.Second)
    	}
    }
    
    func for002() {
    	for i:=0;i<5;i++ {
    		fmt.Println("123")
    	}
    }
    
    func for003() {
    	i :=0
    	for ;i<5; i++ {
    		fmt.Println("456")
    	}
    }
    
    func for004() {
        // 多参数
    	for i,num := 0,1; i < 5 && num < 10; i,num = i+1, num+2 {
    		fmt.Println("abc")
    	}
    }
    
    func main() {
    	//for001()
    	//for002()
    	//for003()
    	for004()
    }
    

    range

    package main
    
    import "fmt"
    
    func main() {
    	s := "abc"
    	// 接收下标
    	for i := range s {
    		fmt.Printf("index: %d, value: %c
    ", i, s[i])
    	}
    
    	// 接收下标和值
    	for i, v := range s {
    		fmt.Printf("index: %d, value: %c
    ", i, v)
    	}
    }
    

    3. 跳转语句

    break

    package main
    
    import "fmt"
    
    func main() {
    	for i:=0; i<=5;i++ {
    		if i == 2 {
    		    // 跳出当前循环
    			break
    		}
    		fmt.Println(i)
    	}
    }
    

    continue

    package main
    
    import "fmt"
    
    func main() {
    	for i:=0; i<=5;i++ {
    		if i == 2 {
    			// 跳过当次循环
    			continue
    		}
    		fmt.Println(i)
    	}
    }
    

    goto

    创建 label 标签,使用 goto 关键字可以跳转到 label 标签位置

    label 名字是自定义的

    package main
    
    import "fmt"
    
    func main() {
    	for i := 0; i <= 5; i++ {
    		if i == 2 {
    			// 跳转到lable_tag代码块位置
    			goto LABEL_TAG
    		}
    		fmt.Println(i)
    	}
    	fmt.Println("123")
    	// 自定义的lable跳转位置标签
    LABEL_TAG:
    	fmt.Println("456")
    }
    
  • 相关阅读:
    Javascript的一些小知识点
    Peterson和多线程版本号
    java 数据流DataOutputStream和DataInputstream
    Domino 怎样整Hibernate最佳实践
    学生管理系统
    最小生成树Kruskal算法的提出者Joseph Bernard Kruskal,Jr.
    创建一个Low-touch Silverlight 集成
    LeetCode OJ
    00106_UDP通信
    雷林鹏分享:jQuery EasyUI 树形菜单
  • 原文地址:https://www.cnblogs.com/zhichaoma/p/12510006.html
Copyright © 2011-2022 走看看