【GO】GO语言学习笔记四
流程控制
1、条件语句
举个栗子:
if x>5 {
return 1;
}else{
return 0;
}
注意:
条件语句不需要使用括号将条件包含起来();
无论语句体内有几条语句,花括号{}都是必须存在的;
左花括号{必须与if或者else处于同一行;
在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔;
在有返回值的函数中,不允许将“最终的”return语句包含在if...else...结构中,
否则会编译失败:
function ends without a return statement。
失败的原因在于,Go编译器无法找到终止该函数的return语句。
2、选择语句
举个栗子
switch i {
case 0:
fmt.Printf("0")
case 1:
fmt.Printf("1")
case 2:
fallthrough
case 3:
fmt.Printf("3")
case 4, 5, 6:
fmt.Printf("4, 5, 6")
default:
fmt.Printf("Default")
}
switch后面的表达式甚至不是必需的,比如下面的例子:
switch {
case 0 <= Num && Num <= 3:
fmt.Printf("0-3")
case 4 <= Num && Num <= 6:
fmt.Printf("4-6")
case 7 <= Num && Num <= 9:
fmt.Printf("7-9")
}
注意:
左花括号{必须与switch处于同一行;
条件表达式不限制为常量或者整数;
单个case中,可以出现多个结果选项;
与C语言等规则相反,Go语言不需要用break来明确退出一个case;
只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case;
可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同。
3、循环语句
Go语言中的循环语句只支持for关键字,而不支持while和do-while 结构。关键字for的基本使用方法与C和C++中非常接近:
举个栗子:
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
Go语言 还进一步考虑到无限循环的场景,让开发者不用写无聊的for (;;) {} 和 do {} while(1);, 而直接简化为如下的写法:
sum := 0
for {
sum := 0
if(sum > 100){
break
}
}
在条件表达式中也支持多重赋值,如下所示:
a := []int{1, 2, 3, 4, 5, 6}
for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 {
a[i], a[j] = a[j], a[i]
}
注意:
左花括号{必须与for处于同一行。
Go语言中的for循环与C语言一样,都允许在循环条件中定义和初始化变量,唯一的区别是,Go语言不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量。
Go语言的for循环同样支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环,如下例:
for j := 0; j < 5; j++ {
for i := 0; i < 10; i++ {
if i > 5 {
break JLoop
}
mt.Println(i)
}
}
JLoop:
// ...
本例中,break语句终止的是JLoop标签处的外层循环。
4、跳转语句
goto语句的语义非常简单,就是跳转到本函数内的某个标签,如:
func myfunc() {
i := 0
HERE:
fmt.Println(i)
i++
if i < 10 {
goto HERE
}
}
【GO】GO语言学习笔记四的更多相关文章
- Go语言学习笔记四: 运算符
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
- Go语言学习笔记(四) [array、slice、map]
日期:2014年7月22日 一.array[数组] 1.定义:array 由 [n]<type> 定义,n 标示 array 的长度,而 <type> 标示希望存储的内 ...
- [C语言学习笔记四]变量与系统的交互
使用 const 创建常量和使用 volatie 优化变量 C语言中使用 const 定义常量. 例如: const INT a = 10; 此处如果添加a = 20;,编辑器则会报错,因为此处 a ...
- HTML语言学习笔记(会更新)
# HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- 2017-04-21周C语言学习笔记
C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...
- 2017-05-4-C语言学习笔记
C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...
随机推荐
- .net web 小基累
获取当前网站的根目录:HttpContext.Current.Request.PhysicalApplicationPath+“Content”
- Linux常用命令[转]
在博客的草稿箱里一直有一份"Linux命令"的草稿,记录了一些常用的Linux命令,用于需要的时候查询.由于是出于个人使用的目的,所以这个清单并不完整.今天整理了一下这个清单,调整 ...
- iscoll制作顶部可以左右滑动的tab
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 99%的人都理解错了HTTP中GET与POST的区别
GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...
- 适应laytpl 渲染模板数据
前言 当我们异步读取数据过来的时候,还要通过手动赋值,显示在页面上吗,那样你就太OUT了,哥告诉你个新方式. 那就是 laytpl 插件 用法一:渲染单条数据 <table id="B ...
- Swift:属性观察器
1.简单介绍 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外. 可以为除了延迟存储属性之外的其他存储属性添加属性观察器,也可以通过重 ...
- iOS:使用模板引擎渲染HTML界面
在实际开发中,UIWebView控件接受一个HTML内容,用于相应的界面,下面是该API的接口: - (void)loadHTMLString:(NSString *)string baseURL:( ...
- 数据迁移工具sqoop
有问题........数据迁移工具sqoop sqoop安装 [root@sqoop data]# wget wget http://apache.fayea.com/sqoop/1.4.6/sqo ...
- Python学习笔记(基本功能的使用)
整理了以前使用的几个笔记:上传到了github; python_notes 以后在慢慢更新吧:
- dubbo源码分析6-telnet方式的管理实现
dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...