首页 > 其他分享 >GO分支循环

GO分支循环

时间:2023-05-31 14:01:04浏览次数:49  
标签:case 10 fmt else Println 循环 GO 分支

(文章目录)

单分支

if condition {
    代码块
}
if 5 > 2 {
    fmt.Println("5 greater than 2")
}

==注意==:Go语言中,花括号一定要跟着if、for、func等行的最后,否则语法出错。这其实就是为了解决C 风格、Java风格之争。

  • condition必须是一个bool类型,在Go中,不能使用其他类型等效为布尔值。 if 1 {} 是错误的
  • 语句块中可以写其他代码
  • 如果condition为true,才能执行其后代码块

多分支

if condition1 {
    代码块1
} else if condition2 {
    代码块2
} else if condition3 {
    代码块3
} ... {
    ...
} else if conditionN {
    代码块N
} else {
    代码块
}

a := 6
if a < 0 {
 fmt.Println("negative")
} else if a > 0 { // 走到这里一定 a 不小于 0
 fmt.Println("positive")
} else { // 走到这里一定 a 不大于、也不小于 0
 fmt.Println("zero")
}

  • 多分支结构,从上向下依次判断分支条件,只要一个分支条件成立,其后语句块将被执行,那么其 他条件都不会被执行
  • 前一个分支条件被测试过,下一个条件相当于隐含着这个条件
  • 一定要考虑一下else分支是有必要写,以防逻辑漏洞

switch分支

a := 20
switch a { // 待比较的是a
case 10:
 fmt.Println("ten")
case 20:
 fmt.Println("twenty")
case 30, 40, 50: // 或关系
 fmt.Println(">=30 and <=50")
default:
 fmt.Println("other")
}
switch a:=20;a { // 待比较的是a
case 10:
 fmt.Println("ten")
case 20:
 fmt.Println("twenty")
case 30, 40, 50: // 或关系
 fmt.Println(">=30 and <=50")
 default:
 fmt.Println("other")
}

==2种写法a的作用域问题== image.png image.png image.png ==从上面3张图片可以看出,第一种写法a整个函数都有效,第二种写法 a只对当前switch有效==

C语言的switch有穿透效果,而Go语言没有。如果想在Go语言中实现穿透效果,使用fallthrough穿透当前case语句块。 image.png

for循环

注意:Go语言没有提供while关键字,可以用for方便的替代

C风格for

for [初始操作];[循环条件];[循环后操作] {
    循环体
}
  • 初始操作:第一次进入循环前执行,语句只能执行一次,之后不再执行
  • 循环条件:要求返回布尔值,每次进入循环体前进行判断。如果每次条件满足返回true,就进入循 环执行一次循环体;否则,循环结束
  • 循环后操作:每次循环体执行完,在执行下一趟循环条件判断之前,执行该操作一次

for i := 0; i < 10; i++ {
 fmt.Println(i)
}// 初始操作中的短格式定义的i的作用域只能在for中
// 特殊写法
for i := 5; i < 10; {}
for i := 5; ; {} // 没条件就相当于true
for i < 10 {} // for condition {},condition就是循环条件
for ;; {} // 死循环
// 死循环简写如下
for {} // 死循环 相对于 for true {}

continue

中止当前这一趟循环体的执行,直接执行“循环后操作”后,进入下一趟循环的条件判断。

for i := 0; i < 10; i++ {
    if i%2 == 0 {
        continue
    }
    fmt.Println(i)
}

image.png

break

终止当前循环的执行。

for i := 0; ; i++ {
		if i%2 == 0 {
			continue
		}
		fmt.Println(i)
		if i >= 10 {
			break
		}
}

image.png 除了break,函数的return结束函数执行,当然也能把函数中的循环打断。

goto label

这里我不推荐使用,想了解的可以去官方文档自己看下

for range

for i, v := range "abcd测试" {
		fmt.Printf("%d, %[2]d, %[2]c, %#[2]x\n", i, v)
	}
	fmt.Println("\xe6\xb5\x8b\xe8\xaf\x95") // 6个字节

image.png

  • 索引就是字节偏移量,从索引可以看出,中文在字符串中是utf-8编码,占3个字节。但是for range读取字符串返回的是一个个字符(整数),而字符是ASCII或UNICODE对应的编码值。
  • %d 打印的是unicode值 -%c 打印的是字符

训练

fmt.Print("=======================九九乘法表=====================\n")
	for i := 1; i < 10; i++ {
		for j := 1; j <= i; j++ {
			var s = i * j
			if s < 10 {
				fmt.Printf("%d * %d = %d  ", j, i, i*j)
			} else {
				fmt.Printf("%d * %d = %d ", j, i, i*j)
			}
		}
		fmt.Print("\n")
	}

image.png

标签:case,10,fmt,else,Println,循环,GO,分支
From: https://blog.51cto.com/u_14661954/6386393

相关文章

  • API NEWS | 三个Argo CD API漏洞
    欢迎大家围观小阑精心整理的API安全最新资讯,在这里你能看到最专业、最前沿的API安全技术和产业资讯,我们提供关于全球API安全资讯与信息安全深度观察。本周,我们带来的分享如下:关于三个ArgoCDAPI漏洞的文章Gartner对API安全的看法分布式标识是现代API安全的关键关于三个ArgoCDAPI......
  • 超参数调优——google Vizier采用迁移学习的思想,主要是从之前调参的经验中学习,为新算
    Google使用一套超参数调优算法来烘焙更美味的饼干“超参数调优”和“烘焙饼干”这两件事情,乍一听感觉风马牛不相及,但细想一下,似乎又有一定的相似之处——“黑盒优化”。结构复杂的深度学习模型某种程度上就是一个黑盒,为实现更好的优化目标,我们不断进行“超参数调优”来优化这个黑盒......
  • 【解决一个小问题】macbook m2 上交叉编译 gozstd
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯已知zstd是一个优秀的压缩库,gozstd封装了这个库。一开始在macbookm2芯片的笔记本上开发包含了gozstd的程序时,一切正常。发布的时候,需要分别编译linux+arm64......
  • node连接mongodb
    主要试用了两个库:mongodb、mongoose由于服务器使用的是比较老版本的mongodb,如果使用比较新的客户端,编译时会出现问题:Serveratxxxx:27017reportsmaximumwireversion4,butthisversionoftheNode.jsDriverrequiresatleast6(MongoDB3.6)终级解决方案:去掉类型constm......
  • go-RabbitMQ
    erlang安装编译依赖:yuminstallmakegccgcc-c++build-essentialopensslopenssl-develunixODBCunixODBC-develkernel-develm4ncurses-devel解压:tar-zxvf创建存放环境目录:mkdir/opt/rabbitMq/erlang进入erlang解压目录执行命令:./configure--prefix=/opt/rabbit......
  • API NEWS | 三个Argo CD API漏洞
    欢迎大家围观小阑精心整理的API安全最新资讯,在这里你能看到最专业、最前沿的API安全技术和产业资讯,我们提供关于全球API安全资讯与信息安全深度观察。本周,我们带来的分享如下:关于三个ArgoCDAPI漏洞的文章Gartner对API安全的看法分布式标识是现代API安全的关键 关......
  • Golang扫盲式学习——GO并发 | (一)
    并发与并行......
  • Invalid prop: type check failed for prop “value”. Expected String, Number, got
    记录一个报错问题,之前别的同事写的代码,还看了半天有点无语!!下拉选择部门,联动动态赋值责任人下拉列表警告,导致选择责任人的时候无法正确赋值undefined。究其原因是封装的表单formItem项中传入了下拉选项的映射字段,如下: 而在选择部门的时候又已经把动态数据遍历处理成了标准的la......
  • 【shell】ubuntu循环输出当前日期
    1、场景  我想实时输出当前系统时间,对比日志之间的时间差 2、方法#!/bin/bashwhile(true)doecho$(date+%F%n%T)sleep1done 3、date命令参数~$date--helpUsage:date[OPTION]...[+FORMAT]or:date[-u|--utc|--universal][MMDDhhmm[[CC]YY][......
  • go语言笔记——defer作用DB资源等free或实现调试
    defer和追踪关键字defer允许我们推迟到函数返回之前(或任意位置执行 return 语句之后)一刻才执行某个语句或函数(为什么要在返回之后才执行这些语句?因为 return 语句同样可以包含一些操作,而不是单纯地返回某个值)。关键字defer的用法类似于面向对象编程语言Java和C#的 fi......