前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句,defer栈等,每个语法都对比java中的语法进行了讲解,每个都提供了概念+示例的结合,示例都可直接运行。

本想着将go语言的语法与数据类型写在一章,写完语法之后发现如果在写数据类型的话就文章篇幅就太长了,所以数据类型就放到下一章去写了。

按照系列文章去学习,所有示例都敲一遍的话,系列文章学完,你的go语句也就入门了


语法

for 循环

go语言中只有一种循环结构就是:for 循环,与java中的for循环相似,不同是for 关键词后没有小括号(),大括号{}必须添加。

// 基本结构:
for 初始化语句;判定条件;后置语句{
方法体
}

如:

func main() {
for i := 0; i < 10; i++ {
fmt.Println("当前值", i)
}
}

for循环中最重要的就是判定条件,一旦条件表达式值为false,则循环迭代终止;

使用for关键词修饰,有判定条件,就可以形成是一个for循环,所以上面的for循环还可以写成这样(也可以后置语句提到判定条件后自己试试效果):

 func main() {
i := 0
for i < 10 {
i = i + 1
fmt.Println("当前值", i)
}
}

if 语句

Go 的 if 语句与 for 循环类似, 表达式后没有小括号(),大括号{}必须添加。

如:

func main() {
testIf(2)
}
func testIf(x int) {
if x > 10 {
fmt.Println("say hello")
} else {
fmt.Println("say no")
}
}

for循环语句可以有变体,当然if语句也有了:

func main() {
testSimpleIf(2)
}
func testSimpleIf(x int) {
if y := 9 + x; y > 10 {
fmt.Println("say hello")
} else {
fmt.Println("say no")
}
}

if语句中,可以将初始化语句放到判定条件前,只不过变量的作用域只能在if条件中,for循环也是一样,如果初始化语句在for循环中,作用域同样在for循环内。

switch 语句

go 中swich语句就是一系列的 if - else 语句的简写。匹配上条件表达式的值就执行case 语句,否则默认执行default。

与java中的swich语句基本一致,不同点在于每个case 语句中不用在显示的去写break了,Go 自动提供了在每个 case 后添加了 break。

func main() {
testSwich(3)
} func testSwich(x int) {
switch x {
case 1:
fmt.Println("1")
case 2:
fmt.Println("2")
default:
fmt.Println("default")
} }

还有一点不同就是:switch 的 case 不用一定是常量,也可以是表达式,所以一连串的 if - else 可以写成这样了。

如:

func testTrueSwich() {
switch {
case 1 > 1:
fmt.Println("1")
case 2 < 3:
fmt.Println("2")
default:
fmt.Println("default")
}
}

defer 语句

使用defer修饰的函数会推迟到外层函数返回之后执行;
推迟调用的函数其参数会立即求值,但直到外层函数返回后该函数才会被调用。
func main() {
defer fmt.Println("可以你先")
fmt.Println("我先说")
}

执行后输出: 我先说 可以你先

defer 栈

defer 栈 顾名思义:就是推迟执行的一系列的函数,将函数按顺序入栈。
栈的数据就是先进后出,所以就是以为这先入栈的函数会最后在执行,执行下面的示例看下输出结果,有不明白的也明白了。
func testDefer() {
fmt.Println("开始")
for i := 0; i < 10; i++ {
defer fmt.Println("当前值", i)
}
fmt.Println("结束")
}

##结束
**初识 go 语言系列**
- [x] 初识 go 语言
- [x] 初识 go 语言:语法
- [ ] 初识 go 语言:数据类型
- [ ] 初识 go 语言:方法,接口及并发

关注公众号

初识 go 语言:语法的更多相关文章

  1. 初识 go 语言:方法,接口及并发

    目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接 ...

  2. 初识 go 语言:数据类型

    目录 数据类型 指针 结构体 数组 切片 切片的方法 映射 函数闭包 结束语 前言: go语言的第三篇文章,主要讲述go语言中的数据类型,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示 ...

  3. 初识 go 语言

    目录 go简介 安装 hello world 函数 变量 常量 可见性规则 结束 前言: 最近组内要试水区块链,初步方案定为使用fabirc来弄,而fabric的智能合约就是用go写的,借此机会正好学 ...

  4. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  5. 01_初识C语言

    第一章 - 初识C语言 基本了解C语言的基础知识,对C语言有一个大概的认识. 每个知识点就是简单认识,不做详细讲解. 1. 什么是C语言? C语言是一门通用计算机编程语言,广泛应用于底层开发.C语言的 ...

  6. Go语言语法汇总(转)

    Go语言语法汇总 分类: 技术2013-09-16 14:21 3007人阅读 评论(0) 收藏 举报 go语言golang并发语法   目录(?)[+]   最近看了看GoLang,把Go语言的语法 ...

  7. C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com

    原文:C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | IT宅.com C语言语法笔记 – 高级用法 指针数组 指针的指针 二维数组指针 结构体指针 链表 | I ...

  8. 初识Go语言

    一.Go语言的主要特性: ①    开放源代码的通用计算机编程语言.开放源代码的软件(以下简称开源软件)更容易被修正和改进. ②    虽为静态类型.编译型的语言,但go语言的语法却趋于脚本化,非常简 ...

  9. R语言语法基础二

    R语言语法基础二 重塑数据 增加行和列 # 创建向量 city = c("Tampa","Seattle","Hartford"," ...

随机推荐

  1. 对国内IoT的展望

    这个世界上让任何人最安心的,莫过于自己能够完全控制,反之什么都无法控制的,万念俱灰之下,最后只有自我了结.芸芸众生都是在这个之间徘徊,尽可能的去掌控,尽可能的去拥有,觉得能够安心,其实只是自由的内心被 ...

  2. android.database.sqlite.SQLiteException: no such column: aaa (code 1): , while compiling: DELETE FROM users WHERE user_name=aaa解决办法

    在写安卓登录注册时注销按钮闪退发现: 这是因为此处错误: 因为用户名为字符串,不是整型,数据库查询要引号,少了引号查询不了,导致闪退 解决后成功运行 正确用法: 下次谨记,细节决定成败呀!

  3. (二)版本控制管理器之CVS(上)

    在前一篇<(一)版本控制管理器之发展史>的介绍中,有提到古典时期的CVS,那什么是CVS?CVS特点是什么?怎么个用法?等一系列的问题,虽然这个版本控制管理器早已过时,但大家了解下也不妨, ...

  4. Microsoft Excel行列限制简明列表

    Excel行列限制简明列表:数据出处+-----------------+-----------+--------------+---------------------+ | | Max. Rows ...

  5. 爬虫系列二(数据清洗--->正则表达式)

    一 正则常识 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [0-9 ...

  6. 第一节 anaconda+jupyter+numpy简单使用

    数据分析:是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律 数据分析三剑客:Numpy,Pandas,Matplotlib 一 Anaconda 1 下载 官网:http ...

  7. 解析Object.defineProperty的作用

    对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值. 定义对象可以使用构造函数或字面量的形式: 除了以上添加属性的方式,还可以使用Object.defineProperty定义新属性 ...

  8. Koa 中 ejs 模板的使用

    ejs的基本使用 安装 koa-views 和 ejs npm install --save koa-views/cnpm install --save koa-views npm install e ...

  9. firewall centos

    firewall-cmd --add-port=8056/tcp    --临时增加端口 firewall-cmd --permanent --zone=public --add-port=6069/ ...

  10. mac 版 Pycharm 激活

    mac 版 Pycharm 激活   获取注册码地址: http://idea.lanyus.com 输入注册码之后可能会报 this license XXXXXXXX has been cancel ...