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 ...
随机推荐
- C#、.Net经典面试题目及答案
1 请你说说 .NET 中类和结构的区别? 答:结构和类具有大体的语法,但是结构受到的限制比类要多.结构不能申明有默认的构造函数,为结构的副本是又编译器创建 和销毁的,所以不需要默认的构造函数和 ...
- DataStage 的优化原则
DataStage Job优化指导原则之一:算法的优化. 任何程序的优化,第一点首先都是算法的优化.当然这一点并不仅仅局限于计算机程序的优化,实际生活中也处处可以体现这一点.条条大路通罗 ...
- cocos游戏的例子(摘抄记录,非原创)
3.1 搭建Cocos2d-JS v3.x 开发环境 下载所需的软件包 下载 Cocos Code IDE.目前 Cocos Code IDE 最新发布版本是 1.0.0-RC2.我们为什么 Coco ...
- Android-Recyclerview-GridView&瀑布流等效果
由于Recyclerview是在 android.support.v7.widget.包 RecyclerView,所以需要导Recycler库: 导Recycler库: 选择项目,右键--> ...
- 【Unity】UGUI系列教程——拼接一个简单界面
0.简介: 在目前的游戏市场上,手游依然是市场上的主力军,而只有快速上线,玩法系统完善的游戏才能在国内市场中占据份额.而在手游开发过程中,搭建UI系统是非常基本且重要的技能,极端的说如果对Unity的 ...
- 《PHP, MySQL, Javascript和CSS》读书随手记----MySQL篇
一 基础 要求结尾分号 如果在命令输入期间想要终止其运行,不要Ctrl-C. 要输入\c,并按回车键. sql命令和关键字不区分大小写. 表名在windows中不区分大小写,但是在linux和os x ...
- 网络编程-socket(二)
https://www.cnblogs.com/mys6/p/10587673.html(网络编程) 持续通话 总结 # 网络开发的架构 :C/S B/S# mac地址是什么 -身份证号# ip地址 ...
- 564. Find the Closest Palindrome
Given an integer n, find the closest integer (not including itself), which is a palindrome. The 'clo ...
- Zookeeper客户端Curator使用详解
Zookeeper客户端Curator使用详解 前提 最近刚好用到了zookeeper,做了一个基于SpringBoot.Curator.Bootstrap写了一个可视化的Web应用: zookeep ...
- webpack快速入门——实战技巧:watch的正确使用方法,webpack自动打包
随着项目大了,后端与前端联调,我们不需要每一次都去打包,这样特别麻烦,我们希望的场景是,每次按保存键,webpack自动为我们打包,这个工具就是watch! 因为watch是webpack自带的插件, ...