Go控制语句
指针
- Go虽然保留了指针,但是与其他编程语言不通的是,在Go当中不支持指针运算以及“->”运算符,而是直接采用“.”选择符来操作指针目标对象的成员。
- 操作符“&”取变量地址,使用“*”通过指针间接访问目标对象
- 默认值是nil而非NULL
package main
import (
"fmt"
)
func main() {
a := 1
var p *int = &a
fmt.Println(p) //打印的是p所指向的内存地址
fmt.Println(*p) //取出p指针指向地址的值,也就是a的值
}
递增递减语句
- 在go当中,++与--是作为语句而并非作为表达式
package main
import (
"fmt"
)
func main() {
a := 1
//a := a++ //表达式是可以直接放在等号右边的,而此时是不行的
a++ //只能这样使用
var p *int = &a
fmt.Println(p)
fmt.Println(*p)
}
判断语句if
- 条件表达式没有括号
- 支持一个初始化表达式(可以是并行方式)
- 左大括号必须和条件语句或else在同一行
- 支持单行模式
- 初始化语句中的变量为block级别,同时隐藏外部同名变量
package main
import (
"fmt"
)
func main() {
a := 10
if a := 1; a > 0 { //初始化语句中定义的变量它的作用域只在这个初始化语句块,超出这个语句块,这个变量就会变成没有定义的
fmt.Println(a) //此时外部的a会被隐藏,输出内部语句a,也就是1
}
fmt.Println(a) //if语句执行完毕以后,会打印出外部的a,也集是10
}
循环语句for
- Go只有for一个循环语句关键字,但支持3种形式
- 初始化和步进表达式可以是多个值
- 条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数,尽量提前计算好条件并以变量或常量替代
- 左大括号必须和语句在同一行
//第一种形式,类似于while True的应用
package main
import (
"fmt"
)
func main() {
a := 1
for {
a++
if a > 3 {
break
}
fmt.Println(a)
}
fmt.Println("over!")
}
//第二种形式,自己本身带条件的语句,也属于变异的while语句
package main
import (
"fmt"
)
func main() {
a := 1
for a <= 3 {
a++
fmt.Println(a)
}
fmt.Println("over!")
}
//第三种形式,for循环常用形式
package main
import (
"fmt"
)
func main() {
a := 1
for i := 0; i < 3; i++ {
a++
fmt.Println(a)
}
fmt.Println("over")
}
选择语句switch
- 可以使用任何类型或表达式作为条件语句
- 不需要些break,一旦条件符合自动终止
- 如果希望继续下一个case,需要使用fallthrough语句
- 支持一个初始化表达式(可以是并行方式),右侧需要跟分号
- 左大括号必须和条件语句在同一行
//第一种形式
package main
import (
"fmt"
)
func main() {
a := 1
switch a { //检查的变量条件是a本身
case 0:
fmt.Println("a=0")
case 1:
fmt.Println("a=1")
default:
fmt.Println("None")
}
}
//第二种形式
package main
import (
"fmt"
)
func main() {
a := 1
switch { //如果没有在switch后面跟条件表达式,就必须在case后面跟条件表达式
case a >= 0:
fmt.Println("a>=0")
fallthrough //如果需要继续检查下一个case,就需要用到fallthrough
case a >= 1:
fmt.Println("a>=1")
default:
fmt.Println("None")
}
}
//第三种形式
package main
import (
"fmt"
)
func main() {
switch a := 1; { //如果没有在switch后面跟条件表达式,就必须在case后面跟条件表达式
case a >= 0:
fmt.Println("a>=0")
fallthrough //如果需要继续检查下一个case,就需要用到fallthrough
case a >= 1:
fmt.Println("a>=1")
default:
fmt.Println("None")
}
fmt.Println(a)//此时无法找到a
}
//不管是if、for、switch语句当中,进行初始化的变量,都是一个局部变量,作用域范围只在当前语句块
跳转语句goto,break,continue
- 三个语法都可以配合标签使用
- 标签名区分大小写,如果不使用也会造成编译错误
- break和continue配合标签可用于多层循环的跳出
- goto是调整执行位置,与其它两个语句配合标签的结果并不相同
package main
import (
"fmt"
)
func main() {
LABEL1:
for {
for i := 0; i < 10; i++ {
fmt.Println(i)
if i > 3 {
fmt.Println(i)
break LABEL1 //这里使用标签的话,就可以一次性跳出循环
}
}
}
fmt.Println("OK")
}
package main
import (
"fmt"
)
func main() {
for {
for i := 0; i < 10; i++ {
fmt.Println(i)
if i > 3 {
fmt.Println(i)
goto LABEL1 //这里如果使用goto语句的话,建议标签放在goto语句之后,如果放在goto语句之前的话,会造成死循环
}
}
}
LABEL1:
fmt.Println("OK")
}
package main
import (
"fmt"
)
func main() {
LABEL1:
for i := 0; i < 10; i++ {
fmt.Println(i)
if i > 3 {
fmt.Println(i)
continue LABEL1//跳过这次循环,continue下面的语句不会被执行
}
}
fmt.Println("OK")
}
Go控制语句的更多相关文章
- Linux Shell 流程控制语句
* 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...
- 使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)
一:变量 变量分为局部变量和全局变量 (全局变量是系统自定的,是不可手动给值的,若想自己定义全局变量可考虑创建全局临时表!) 局部变量的定义: declare @变量名 数据类型 (局部变量只能 ...
- Sql Server系列:数据控制语句
数据控制语句用来设置.更改用户或角色的权限,包括GRANT.DENY.REVOKE等语句. GRANT用来对用户授予权限,REVOKE可用于删除已授权的权限,DENY用于防止主体通过GRANT获得特定 ...
- 8-04流程控制语句BEGIN ..END
流程控制语句: 是用来控制程序流程的语句. 常用的流程控制语句的分类: 顺序结构:BEGIN...END 分支结构: IF ..ELSE 或CASE ..END 循环结构:WHILE 顺序结构 语法 ...
- javaScript条件控制语句
当某段代码的执行,需要首先满足某些条件时,我们就需要用到条件控制语句.判断条件是否满足,满足条件才去执行某些代码. 如判断数组中值等于条件值时,将这个值从数组中删除 a.switch <scri ...
- JAVA 1.7 流程控制语句 续
1. Java中的循环控制语句一共有3种,分别是while,do… while以及for循环.2. while循环,形式为:while(布尔表达式){//待执行的代码}3. do…while循环,新式 ...
- JAVA 1.6 流程控制语句
1. 条件运算符(三元表达式),其形式为:type d = a ? b : c; 具体化形式为:int d = 2 < 1 ? 3 : 4;2. 轻量级的文本编辑器:UltraEdit.Edit ...
- 20151013 C# 第一篇 流程控制语句
20151013 流程控制语句: 1.选择语句 if … else if...else 选择语句 if(布尔表达式){ 语句块:} if(布尔表达式){ 语句块1:}else{ 语句块2:} i ...
- Python 3 —— 控制语句
控制语句 1.if if <s>: ... elif <s>: ... else: ... 2 for for e in list .. if <s> break; ...
- java基础3_流程控制语句
一 条件判断 1. 条件运算符(三元表达式) ,其形式为: type d = a ? b : c; 具体化形式为:int d = 2 < 1 ? 3 : 4; 2. 轻量级的文本编辑器:Ultr ...
随机推荐
- noip第21课作业
1. 遍历二叉树 [问题描述] 以先序的方式建立一棵二叉树,空结点用‘#’号表示,例如:abd###ce##f##,将建立一棵如下的二叉树: 输出其中序序列和后序序列,其中总结点个数不超过100. 输 ...
- 三种初步简易的方法求解数值问题 of C++
1. “二分法解方程” 在二分法中,从区间[a,b]开始,用函数值f(a)与f(b)拥有相反的符号.如果f在这个区间连续,则f的图像至少在x=a,x=b之间穿越x轴一次,因此方程f(x)=0在[a,b ...
- jQuery插件初级练习1答案
html: <script> $(".btn").click(function(){ $.color($("#box"),"blue&qu ...
- bootstrap1相关学习文档
<em>Bootstrap 框架</em> //倾斜 4.对齐 //设置文 ...
- [FMX]获取控件样式中的指定项目以便进行调节
[FMX]获取控件样式中的指定项目以便进行调节 2017-03-26 • C++ Builder.Delphi.教程 • 暂无评论 • swish •浏览 650 次 FMX 的样式丰富了我们的设计, ...
- RNN以及LSTM的介绍和公式梳理
前言 好久没用正儿八经地写博客了,csdn居然也有了markdown的编辑器了,最近花了不少时间看RNN以及LSTM的论文,在组内『夜校』分享过了,再在这里总结一下发出来吧,按照我讲解的思路,理解RN ...
- php file_get_contents fopen 连接远程文件
使用file_get_contents和fopen必须空间开启allow_url_fopen. 方法: 编辑php.ini,设置allow_url_fopen =true On,allow_url_f ...
- [C#]剖析异步编程语法糖: async和await
一.难以被接受的async 自从C#5.0,语法糖大家庭又加入了两位新成员: async和await. 然而从我知道这两个家伙之后的很长一段时间,我甚至都没搞明白应该怎么使用它们,这种全新的异步编程模 ...
- WTS 2.1.18124.1 彻底抛弃了 15063(Win 10 创意者更新)
现在新建的WTS模板,默认最低版本是16299了,目标版本是17134 17134到来之前,就感觉到会这样,不过终究还是来了. 不支持15063的原因是导航菜单Windows.UI.Xaml.Cont ...
- Webapi文件上传
1/ multipart/form-data方式 using Abp.UI; using Abp.Web.Models; using System; using System.Collections ...