• 流程控制


    package main
    
    import "fmt"
    
    func main() {
    
    	var a int = -1
    	if a > 0 {
    		fmt.Println("hello")
    	}else if a == 0{        //可以 if   else if  else 做条件判断
    		fmt.Println("world")
    	}else{
    		fmt.Println("haha")
    	}
    
    }
    
    func main()  {
    	//if后面还可以跟操作
    	if err:=Connect();err != nil{
    
    	}
    
    }
    
    func main()  {
    	var a string = "hello"
    	switch a {
    	//每个case均是字符串格式
    	case "hello":
    		fmt.Println(111)
    	case "world":
    		fmt.Println(222)
    	//每个switch 只能有一个default分支
    	default:
    		fmt.Println("无论如何都会执行的")
    
    	}
    
    }
    
    //一分支多个值,多个case要放到一起的时候
    func main()  {
    	var a = "hello"
    	switch a {
    	//每个case均是字符串格式,不同的case表达式用逗号分隔
    	//代表当a是 hello 或者 world 的时候,执行逻辑
    	case "hello","world":
    		fmt.Println(111)
    	case "other":
    		fmt.Println(222)
    	//每个switch 只能有一个default分支
    	default:
    		fmt.Println("无论如何都会执行的")
    
    	}
    
    }
    
    //分支表达式
    //case后不仅仅可以是常量,还可以和if一样添加表达式
    func main()  {
    	var a = 11
    	switch  {  //注意的一点是,在switch后面不再加判断变量
    
    	case a>1:
    		fmt.Println(111)
    	case a > 1 && a < 20:
    		//case在第一个条件达成之后就跳出判断了,后面的判断将不再执行,假如前两个case都没有达成条件,将会执行最后的default
    		fmt.Println(222)
    	//每个switch 只能有一个default分支
    	default:
    		fmt.Println("无论如何都会执行的")
    
    	}
    
    }
    //case是一个独立的代码块,执行完毕后不会像C那样紧接着下一个case执行,
    //为了兼容一些一直代码,便加入了  fillthrough关键字来实现这一功能 fillthrough之后,会执行下个case 不论是否匹配
    func main()  {
    	var s = "hello"
    
    	switch  {
    	case s == "hello":
    		fmt.Println("hello")
    		fallthrough
    	case s!="world":
    		fmt.Println("紧接着要干的事")
    	}
    
    }
    
    //goto 通过标签进行代码间的无条件跳转。goto语句可以快速的跳出循环,避免重复
    //使用goto退出多层循环
    
    
    
    
    func main() {
    	// for 初始语句;条件表达式;结束语句
    	// 初始语句是在第一次循环前执行的语句,一般用于变量的初始化,如果在这里初始化了变量,那么变量的作用域会局限在这个for范围内
    	// 初始语句时可以被忽略的,但是初始语句后的  ;  必须写,
    	//for i := 1; i < 10; i++ {
    	i := 1 //在外部声明
    	for ; i < 10; i++ {
    		//循环体不停循环,知道条件表达式返回false自动退出循环,
    		fmt.Println("status", i)
    		if i == 3 {
    			break
    			//for循环可以通过break,goto,return,panic强制退出循环
    		}
    
    		if i == 9 {
    			fmt.Println("this is target")
    		}
    	}
    
    }
    
    // 无限循环,注意,需要有可控的退出循环的开关
    func main() {
    
    	var i int
    	// 忽略for的所有语句,此时for循环就是无限循环
    	for {
    
    		if i == 3 {
    			break
    
    		}
    		// 将i++ 从for 的结束语句放到函数体的末尾,作用是一样的
    		i++
    	}
    
    }
    
    // 只有一个循环条件的循环,将if判断整合到for中
    func main() {
    
    	var i int
    	//在for中使用if{}判断表达式进行判断,
    	//相当于其他语言中的whild,在while后添加一个判断条件表达式,满足条件的继续被执行,不满足就停止循环
    	for i >= 3 {
    
    		//if i == 3 {
    		//	break
    		i++
    	}
    
    }
    
    //
    //for的结束语句,每次循环结束时都会执行语句
    //如过循环被break goto return panic 等语句强制退出,结束语句时不会被执行的
    func main() {
    
    	var i int
    	//在for中使用if{}判断表达式进行判断,
    	//相当于其他语言中的whild,在while后添加一个判断条件表达式,满足条件的继续被执行,不满足就停止循环
    	for i >= 3 {
    		break
    
    	}
    	i++
    	//在i大于等于三的时候,i就不会自增了
    
    }
    
    /*键值循环,for range
    for range
    	数组 切片 字符串返回索引和值
    	map 返回键和值
    	channel 只返回通道内的值*/
    
    //遍历数组 切片 字符串
    func main() {
    
    	for index, value := range []int{5, 4, 3, 2, 1} {
    		fmt.Printf("index:%d  value:%d
    ", index, value)
    
    	}
    
    }
    
    //遍历map
    //遍历map,遍历输出的键值是无序的,如果需要有序的键值输出,需要对结果进行排序
    func main()  {
    	//键为string型 值为int型
    	m := map[string] int{
    		"yy":10,
    		"bb":12,   //注意,这里的逗号必须有,不然会报错,和json数据结构正好相反,json是末尾加上,会报错
    	}
    
    	for key,value := range m{
    		fmt.Println(key,value)
    		//yy 10
    		//bb 12
    	}
    }
    
    
    //遍历chanel,只输出管道内的类型对应的数据
    func main()  {
    	//创建一个整型类型的通道
    	channel := make(chan int)
    	//启动一个goroutine,
    	go func() {
    		//给管道中填充数据
    		channel <- 1
    		channel <- 2
    		channel <- 3
    		//关闭管道
    		close(channel)
    	}()//声明完立马执行
    	//对管道进行遍历,知道管道关闭
    	for v:= range channel{
    		fmt.Println(v)
    	}
    }
    
    
    //总结:for 包含了初始化语句 条件表达式  结束语句三个部分 这三个部分均可省略
    //在需要时,可以使用匿名变量对for range取到的值做取舍
    
  • 相关阅读:
    mysql 无法连接提示 Authentication plugin &#39;caching_sha2_password&#39; cannot be loaded
    探究分析:快速对大量的数据转换为数组
    SQL Server like 字段
    InfluxDB从原理到实战
    Python学习日记(四十) Mysql数据库篇 八
    MySQL数据库基本操作
    ES入门宝典(详细截图版)
    NameNode &amp;&amp; Secondary NameNode工作机制
    MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)
    mysql单个表拆分成多个表
  • 原文地址:https://www.cnblogs.com/cizao/p/11481985.html
Copyright © 2020-2023  润新知