【Golang】三、基础篇 -- 流程控制

一、分支

(1)if单分支

func main() {
	var name string = "11"
	num, _ := strconv.ParseInt(name, 10, 8)
	if num == 11 {
		fmt.Println(model.Name)
	}

	// ***** go中用于判断字符串是否为空的方法 *****
	name = ""
	if len(name) != 0 {
		fmt.Println("空字符产")
	}
}

(2)if多分支

func main() {
	// 双分支
	if len(name) != 0 {
		fmt.Println("空字符产")
	} else {
		fmt.Println("非空字符产")
	}

	// 多分支
	name = "李四"
	if name == "zhangsan" {
		fmt.Println(1)
	} else if name == "wangwu" {
		fmt.Println(2)
	} else {
		fmt.Println(3)
	}
}

(3)switch

需要注意,case中的值类型,必须和switch中值类型一致

  1. 单值匹配
func mian(){
	name := "张三"
	switch name {
		case "zhangsan":
			fmt.Println(1)
		case "wangwu":
			fmt.Println(2)
		case "李四", "赵六":      // case中可以写多个值匹配
			fmt.Println(3)
		default:
			fmt.Println("no case")
	}
}
  1. 范围匹配
    依据name的长度进行匹配!
func main(){
	name := "张三"
	switch {
		case len(name) < 2:
			fmt.Println("长度小于2")
		case len(name) > 2:
			fmt.Println("长度大于2")
		default:
			fmt.Println("长度:2")
	}	
}
  1. swith匹配值类型
func main(){
	var x interface{}
	var y = 10.0
	x = y
	switch x.(type) {
		case int:
			fmt.Println("int")
		case float64:
			fmt.Println("float64")
		default:
			fmt.Println("default")
	}
}

二、for循环

golang中只有for循环一种方式

(1)方式1:for i := 0; i < 10; i++{}

for i := 0; i < ; i++ {		
	// 99乘法表
	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			fmt.Print(j,"*",i,"=",i*j, "\t")
 		}
		fmt.Println()
	}

(2)方式2:for i < 10 {}

	// 指定变量i
	i := 1
	// for 条件判断 { i循环一次递增一次 }
	for i < 10 {
		fmt.Println(i)
		i++
	}

	// 循环体内break
	for {
		fmt.Println("测试")
		i++
		if i == 20 {
			break
		}
	}

(3)方式3:for index, val := range str {}

遍历汉字用range(按照字符方式遍历),不会出现乱码

str := "hello world你好世界"
for index, val := range str {
	fmt.Printf("%d:%c\t",index,val)
}
// 输出:(由于汉字再utf-8编码中占三个字节,所以后年汉字三个index跳)
// 0:h     1:e     2:l     3:l     4:o     5:      6:w     7:o     8:r     9:l     10:d    11:你   14:好   17:世   20:界

需要注意:

方式2遍历字符串是按照字节遍历

	str := "hello world你好世界"
	for i := 0; i < len(str); i++ {
		fmt.Printf("%c\t", str[i])
	}

这种遍历按字节遍历,所以后续输出是乱码
输出格式如下:h e l l o w o r l d ä ½ å ¥ ½ ä ¸ç

(4)循环案例

  1. 九九乘法表
// 99乘法表
func FuncForOne() {
	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			fmt.Print(j,"*",i,"=",i*j, "\t")
 		}
		fmt.Println()
	}
}
  1. 三角形
func FuncJZT(n int){
	for i := 1; i <= n; i++ {
		// 空格
		for k := 0; k < n-i; k++ {
			fmt.Print(" ")
		}
		// 打印 *
		for j := 1; j <= 2*i-1 ; j++ {
			// 空心三角
			if n != 1 && n!=i {
				if j == 1 || j == 2*i-1{
					fmt.Print("*")
				} else {
					fmt.Print(" ")
				}
			} else {
				fmt.Print("*")
			}
		}
		fmt.Println()
	}
}
// 输出:
         *
        * *
       *   *
      *     *
     *       *
    *         *
   *           *
  *             *
 *               *
*******************

  1. 水仙花数
func FuncSXH(n int64){
	var sx int64= 0
	str_n := strconv.Itoa(int(n))
	for i := 0; i < len(str_n); i++ {
		v, _ := strconv.ParseInt(string(str_n[i]), 10, 8)
		sx += v * v * v
	}
	if sx == n {
		fmt.Println("是水仙花数")
	} else {
		fmt.Println("不是水仙花数")
	}
}

二、跳转

(1)break 跳出当前循环

  1. 随机生成1-100的随机数 到79弹出
    func FunSJ() {
    	for {
    		// 需要seed一个种子,否则每次出现的随机数都是一样的
    		rand.Seed(time.Now().UnixNano())
    		rand := rand.Intn(100)
    		fmt.Println(rand)
    		if rand == 79 {
    			break
    		}
    	}
    }
    
  • 附:随机数演示
    for {
    	rand := rand.Intn(100)
    }
    
    每次输出都是一样的结果
    在这里插入图片描述
    需要一个随机种子数字seedseed(参数)参数给定一个数,只要数字不通则随机输出的数字也不同!事例参照如上

(2)continue 跳出本次循环

说明:只跳出本次循环

func FunCon()  {
	for i := 0; i < 10; i++ {
		// 不输出2
		if i == 2 {
			continue
		}
		fmt.Print(" ",i)
	}
}

// 输出=》
// 0 1 3 4 5 6 7 8 9

(3)return 跳出所在的方法函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼小鱼啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值