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 ...
随机推荐
- iOS中的序列帧动画
UIImageView对象的有一个animationImages属性,将图片数组赋值给该属性即可.如图: 控制动画的播放方法是:[ ___ startAnimating]; 控制动画的停止方法是:[ ...
- Maven提高篇系列之五——处理依赖冲突
个人分类: Maven 不知道你在使用Maven时是否遇到过诸如"NoSuchMethodError"或"ClassNotFoundException"之类的问 ...
- hdu 3015
这个题给你一堆树,每棵树的位置x和高度h都给你 f[i]代表这棵树的位置排名,s[i]代表这棵树的高度排名 问你任意两棵树的(f[i] - f[j])*min(s[i],s[j])和 (f[i]-f[ ...
- express4.x socket
在这个版本下使用socket,配置比较麻烦. 使用实例:http://www.open-open.com/lib/view/open1402479198587.html 配置文件:BarOrderPr ...
- 佛祖保佑,永不死机 - /etc/motd文件配置
/etc/motd (message of to day:每日信息) 一.执行命令: cat <<EOT >/etc/motd _oo0oo_ (| -_- |) \ = / ___ ...
- Cerebro_变量名搜索插件
Cerebro 安装 兼容环境:Windows, MacOS, Linux 插件依赖于 Cerebro,下载地址: https://github.com/KELiON/cerebro/releases ...
- 使用HAProxy实现sql server读库的负载均衡
前置条件 使用sqlserver的发布订阅功能实现读写分离,并创建多个读库. 本文的负载均衡是针对多个读库而言的. 测试环境 vmware 10 64位 windows server 2008 R2 ...
- MQ的demo
public class WorkTest { @Test public void send() throws Exception{ //获取连接 Connection conn = ...
- 「PKUSC2018」主斗地(暴搜)
这道斗地主比 \(PKUWC\) 那道可做多了... 我们用 \(NOIP\) 那道斗地主的思路:暴搜出三代和四代,贪心出散牌. 还有jry为什么要出xx网友而不出他的另一个老婆 我们发现两个人的每回 ...
- Django(ORM查询1)
day69 参考:http://www.cnblogs.com/liwenzhou/p/8660826.html 在Python脚本中调用Django环境 orm1.py import os if _ ...