文档章节

Go语言学习笔记(语法篇) - 控制结构

恐怖幻觉
 恐怖幻觉
发布于 2013/05/04 21:53
字数 625
阅读 798
收藏 2

Go语言的控制结构比Java、C语言都要少,只有很简单的几个,语法与也略有不同。

Go语言的保留关键字

break     default     func     interface     select
case     defer     go     map     struct
chan     else     goto     package     switch
const     fallthrough     if     range     type
continue     for     import     return     var

运算符

* / % << >> & &^ + - | ^ && || !

if

if中的条件不需要用中括号()给包含起来。

a := 1
b := 2
c := 3
if a < b && b < c {
    fmt.Println(true)
} else {
    fmt.Println(false)
}

而且if接受初始化语句,初始化的变量为一个局部变量。

if f, err := os.Open("c:/hello.go"); err == nil {
    fmt.Println(f.Name())
} else {
    fmt.Println(err)
}

goto

在Java里这是一个保留关键字,但没有任何实际作用。goto用不好容易造成程序的逻辑混乱。下面用Lable标识一个标签,goto可以将执行跳转到这个标签位置,注意标签是大小写敏感的。

func myfunc() {
    i := 0
Lable:
    fmt.Println(i)
    i++
    if i < 10 {
        goto Lable
    }
}

for

Go中没有while,do while循环,只有一个for,不过却可以完成各种灵活循环操作,同样也不需要中括号包含。
依旧有break,continue关键字,用法和其它语言一样。

func main() {
    //跟Java相似的for循环
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    //与While一样
    for false {
	
    }
    /死循环
    for {
	
    }  
Here:
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
	    fmt.Println(j)
	    if j > 5 {
	        break Here
	    }
        }
    }
}

range

range可以用于对集合的循环,集合后面在继续学习,先看一下用range来遍历数组。

var ss []string = []string{"aaa", "bbb", "ccc", "ddd"}
    for i, v := range ss {
        fmt.Printf("索引是%d, 值是:%s\n", i, v)
    }


switch

Go的switch很灵活,不一定非要用常量,还支持表达式,下面一组代码片断是判断常量的。

func main() {
    i := 0
    switch i {
    case 0:
        //如果不加这个关键字,如果i等于0不会进到下面的case 1中
        fallthrough
    case 1:
        fmt.Println(111)
    }
}
func main() {
    ch := 'b'
    switch ch {
    //多个值用逗号分隔
    case 'a', 'b', 'c':
        fmt.Println(111)
    default:
        fmt.Println(222)
    }
}
下面这段代码是 case表达式的
func main() {
    i := 10
    switch {
    case i < 10:
        fmt.Println(111)
    case i < 20:
        fmt.Println(222)
    default:
        fmt.Println(333)
    }
}
非常灵活、强大的switch,但是也给我带来一个疑问,Go的编译器怎么对switch进行编译优化呢,假如说一个switch其中有几百甚至上千个case,起不是要按照顺序一个一个去匹配,时间复杂度就变成O(N)了,常量的switch好处就是可以让时间复杂度变成O(1)

© 著作权归作者所有

恐怖幻觉
粉丝 1
博文 8
码字总数 3313
作品 0
朝阳
架构师
私信 提问
加载中

评论(1)

hilojack
hilojack
不错
Swift 个人学习笔记 - 06: 控制流

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/02/22
0
0
《Python从小白到大牛》简介

本书是一部系统论述Python编程语言、OOP编程思想以及函数式编程思想的立体化教程(含纸质图书、电子书、教学课件、源代码与视频教程)。为便于读者高效学习,快速掌握Python编程方法。本书作...

tony关东升
2018/06/26
0
0
印象笔记终于支持Markdown了 !你还会再用其他笔记吗?

Markdown 是什么? Markdown 是一种轻量级的「标记语言」,创始人为约翰·格鲁伯,用简洁的语法代替排版,目前被越来越多的知识工作者、写作爱好者、程序员或研究员广泛使用。其常用的标记符...

技术小能手
2018/09/17
0
0
go语言文件汇总

归并排序及go语言实现 堆排序算法及go语言实现 Go语言基础学习(一)变量 【Leetcode】:Counting Bits问题 in Go语言 基于go语言的心跳响应 【Leetcode】:Single Number III问题 in Go语言 ...

d_watson
2016/04/15
137
2
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2
2018/05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

58. 静态工厂方法

参考:https://www.jianshu.com/p/ceb5ec8f1174 https://www.jianshu.com/p/fa15f63d399a 1.定义 用一个静态方法来对外提供自身实例的方法,即为我们所说的静态工厂方法(Static factory met...

20190513
6分钟前
4
0
Mybatis之StatementHandler

mybatis-3.4.6.release. 图1 StatementHandler是对CallableStatement、PreparedStatement、Statement的统一封装,在JDK中CallableStatement继承PreparedStatement,PreparedStatement继承Sta......

克虏伯
25分钟前
4
0
遇到API安全问题怎么办?F5 API加固解决方案怎么样?

  在各种APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优在以前都采用自已定义的接口和结构,对于公开访问的接口,专业点的都会做...

梅丽莎好
48分钟前
10
0
迁Aliyun Redis踩坑之路 - 实践总结

背景: 从自建 redis(CacheCloud)到迁移到 aliyun redis 1. 踩“坑”一 问题: 平常小伙伴们在项目中可能用到redis key expire nofity的场景(比如:处理延时任务等),但是发现迁移后 ke...

少年与海
今天
3
0
干货:Kibana 可视化ElasticSearch数据展示分析

当你把数据存入ES中后,怎么更方面的查看这些数据,还想用不同的维度去看这些数据,是不是纠结,不能再专门搞个后台显示把。这里有神器 Kibana 专门干这个事情的,可以帮你把ES中的数据,通过...

枕邊書
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部