指针

  • 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. panda

    这个项目很有意思,麻雀虽小五脏俱全. 页面使用rem和media query来设置字体和元素宽高image居中需要用到position 后端mysql使用阿里云的rds:nodejs的mysql模块的 ...

  2. django创建分页

    前台html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  3. Git和SourceTree配合使用

    Git介绍 git是当今最强大的本地的分布式代码版本管理工具. git的核心概念与操作:开发环境,本地仓库,远程仓库.他们的关系如下图: 与CVS及SVN的比较: CVS及SVN都是集中式的版本控制系 ...

  4. 定时任务 Wpf.Quartz.Demo.1

    Quartz 是个开源的作业调度框架. 安装:Install-Package Quartz 官网文档地址:https://www.quartz-scheduler.net/documentation/ ...

  5. TextBox Ctrl+A不能全选的问题

    问题: 当TextBox控件在设置了MultiLine=True之后,Ctrl+A 无法全选,十分影响使用体验. 对于这个问题不明所以,不知道是Bug,还是故意而为之... 解决1: 添加KeyDow ...

  6. EF使用MySql DBFirst产品的问题总结

    一.实体数据模型向导->新建连接->更改数据源  找不到MySql Batabase选项. 解决:需求安装以下两个插件(mysql官网都可以找到)(注意版本,后面会讲到) 1.MySql ...

  7. ovs QOS

    实验拓扑 拓扑实现脚本 ip netns add ns1 ip netns add ns2 ip netns add ns3 ip netns add ns4 ovs-vsctl add-br br0 ...

  8. UCore-Lab0

    日期:2019/3/31 内容:UCore-Lab0 一.UCore实验 实验 说明 关键词 Lab1 bootloader的实现 中断 Lab2 物理内存管理 x86分段/分页模式 Lab3 虚拟内 ...

  9. python--Websocket实现, 加密 sha1,base64

    需要用到gevent-websocket包,这里我们用下图这个 一.websocket简单实现 ep1.py from geventwebsocket.handler import WebSocket ...

  10. 36_并发编程-multiprocess模块

    仔细说来,multiprocess不是一个模块而是python中一个操作.管理进程的包. 之所以叫multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块.由于提供的 ...