指针

  • 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控制语句的更多相关文章

  1. Linux Shell 流程控制语句

    * 本文主要介绍一些Linux Shell 常用的流程控制语句* 1. if 条件语句:if-then/if-elif-fi/if- else-fi if [条件判断逻辑1];then command ...

  2. 使用变量 数据类型转换 逻辑控制语句(begin ...end; case...end; if...else; while)

    一:变量 变量分为局部变量和全局变量  (全局变量是系统自定的,是不可手动给值的,若想自己定义全局变量可考虑创建全局临时表!) 局部变量的定义:  declare @变量名  数据类型 (局部变量只能 ...

  3. Sql Server系列:数据控制语句

    数据控制语句用来设置.更改用户或角色的权限,包括GRANT.DENY.REVOKE等语句. GRANT用来对用户授予权限,REVOKE可用于删除已授权的权限,DENY用于防止主体通过GRANT获得特定 ...

  4. 8-04流程控制语句BEGIN ..END

     流程控制语句: 是用来控制程序流程的语句. 常用的流程控制语句的分类: 顺序结构:BEGIN...END 分支结构: IF ..ELSE 或CASE ..END 循环结构:WHILE 顺序结构 语法 ...

  5. javaScript条件控制语句

    当某段代码的执行,需要首先满足某些条件时,我们就需要用到条件控制语句.判断条件是否满足,满足条件才去执行某些代码. 如判断数组中值等于条件值时,将这个值从数组中删除 a.switch <scri ...

  6. JAVA 1.7 流程控制语句 续

    1. Java中的循环控制语句一共有3种,分别是while,do… while以及for循环.2. while循环,形式为:while(布尔表达式){//待执行的代码}3. do…while循环,新式 ...

  7. JAVA 1.6 流程控制语句

    1. 条件运算符(三元表达式),其形式为:type d = a ? b : c; 具体化形式为:int d = 2 < 1 ? 3 : 4;2. 轻量级的文本编辑器:UltraEdit.Edit ...

  8. 20151013 C# 第一篇 流程控制语句

    20151013 流程控制语句: 1.选择语句 if … else if...else 选择语句 if(布尔表达式){  语句块:} if(布尔表达式){  语句块1:}else{  语句块2:} i ...

  9. Python 3 —— 控制语句

    控制语句 1.if if <s>: ... elif <s>: ... else: ... 2 for for e in list .. if <s> break; ...

  10. java基础3_流程控制语句

    一 条件判断 1. 条件运算符(三元表达式) ,其形式为: type d = a ? b : c; 具体化形式为:int d = 2 < 1 ? 3 : 4; 2. 轻量级的文本编辑器:Ultr ...

随机推荐

  1. hdu 2642

    这题应该就是标准的二维树状数组,应该没什么难度 处理一下x,y等于0的情况就过了 #include <iostream> #include <cstdio> #include ...

  2. hdu 4975 最大流快版

    http://acm.hdu.edu.cn/showproblem.php?pid=4975 给出每行每列的和,问是否存在这样的表格:每个小格放的数字只能是0--9. 直接用第八场最大流模板. #in ...

  3. Dnsmasq安装与配置-搭建本地DNS服务器

    默认的情况下,我们平时上网用的本地DNS服务器都是使用电信或者联通的,但是这样也导致了不少的问题,首当其冲的就是上网时经常莫名地弹出广告,或者莫名的流量被消耗掉导致网速变慢.其次是部分网站域名不能正常 ...

  4. 9.json和jsonpath

    数据提取之JSON与JsonPATH JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适 ...

  5. 通过 NewLife.XCode 迁移任意现有数据库到任意数据库

    通过 NewLife.XCode 迁移任意现有数据库到任意数据库(附分表分库方法) 本文背景是将其他系统的数据库迁移到另一个数据库(仅需 20 行代码),也可以作为项目迁移用,生成自己系统的专属实体代 ...

  6. 【文文殿下】[CEOI2004]锯木厂选址 题解

    题解 我们枚举建厂的位置,发现有个\(n^2\)的DP.随手搞个斜率优化到\(O(n)\). #include<bits/stdc++.h> using namespace std; ty ...

  7. Python入门 ---基础知识

    Python入门不知道这些你还是承早放弃吧!真的 Python 简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言 ...

  8. MariaDB 单表查询与聚合(5)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  9. linux 如何开通新的端口

    第一种方式:(以nginx为列,端口是) 1.   开放端口命令: /sbin/iptables -I INPUT -p tcp --dport -j ACCEPT   2.   保存:/etc/rc ...

  10. js中的stopImmediatePropagation方法和stopPropagation方法的区别

    看到e.stopImmediatePropagation()这个方法时,记忆有点模糊了.特地回顾一下. 基本概念 stopImmediatePropagation方法:该方法作用在当前节点及事件链的所 ...