解锁即可观看《Go开发工程师》完整课程视频

Go开发工程师

未来3-5年企业高性能项目不可替代的语言,从基础到项目实战再到重构,真正从入门到精通

【第1周】Go基础知识入门
【第2周】容器,go编程思想
【第3周】Go并发编程和工程管理
【第4周】从0开始理解rpc和grpc
【第5周】grpc和protobuf进阶
【第6周】 yapi文档管理、gorm详解
【第7周】gin快速入门
【第8周】用户服务的grpc服务
【第9周】用户服务的web服务
【第10周】服务注册/发现、配置中心、负载均衡
【第11周】商品微服务的grpc服务
【第12周】 商品微服务的gin层和oss图片服务
【第13周】库存服务和分布式锁
【第14周】订单和购物车微服务
【第15周】 支付宝支付、用户操作微服务、前后端联调
【第16周】elasticsearch实现搜索微服务
【第17周】 分布式理论基础、分布式事务解决方案
【第18周】 学习rocketmq实现幂等性机制等
【第19周】链路追踪、限流、熔断、降级
【第20周】api网关、部署
【第21周】开发规范和go基础扩展
【第22周】设计模式和单元测试
【第23周】protoc插件开发、cobra命令行
【第24周】log日志包设计
【第25周】ast代码生成工具开发
【第26周】三层代码结构
【第27周】grpc服务封装更方便的rpc服务
【第28周】深入grpc的服务注册、负载均衡原理
【第29周】基于gin封装api服务
【第30周】可观测的终极解决方案
【第31周】系统监控核心
【第32周】用户、商品服务重构
【第33周】订单、库存等服务重构
【第33+周】订单服务重构、wire进行ioc控制
【第34周】通过k8s部署服务
【第34+周】devops和k8s
章节
问答
课签
笔记
评论
占位
占位

Go语言-if语句

    Go语言的流程控制主要包括条件分支、循环和并发。在本章,我们先来谈谈基本的流程控制语句。具体到本小节,我们将提及if语句。

    if语句一般会由关键字if、条件表达式和由花括号包裹的代码块组成。所谓代码块,即是包含了若干表达式和语句的序列。在Go语言中,代码块必须由花括号包裹。另外,这里的条件表达式是指其结果类型是bool的表达式。一条最简单的if语句可以是:

if 100 > number { 
    number += 3
}

    这里的标识符number可以代表一个int类型的值。这条if语句的意思是:如果number的值小于100,那么就把其值增加3。我还可以在此之上添加else分支,就像这样:

if 100 > number {
    number += 3
} else {
    number -= 2
}

    else分支的含义是,提供在条件不成立(具体到这里是number的值不小于100)的情况下需要执行的操作。除此之外,if语句还支持串联。请看下面的例子:  

if 100 > number {
    number += 3
} else if 100 < number {
    number -= 2
} else {
    fmt.Println("OK!")
}   

    可以看到,上述代码很像是把多条if语句串接在一起了一样。这样的if语句用于对多个条件的综合判断。上述语句的意思是,若number的值小于100则将其加3,若number的值大于100则将其减2,若number的值等于100则打印OK!
  
    注意,我们至此还未对number变量进行声明。上面的示例也因此不能通过编译。我们当然可以用单独的语句来声明该变量并为它赋值。但是我们也可以把这样的变量赋值直接加入到if子句中。示例如下:

if number := 4; 100 > number {
    number += 3
} else if 100 < number {
    number -= 2
} else {
    fmt.Println("OK!")
}   

    这里的number := 4被叫做if语句的初始化子句。它应被放置在if关键字和条件表达式之间,并与前者由空格分隔、与后者由英文分号;分隔。注意,我们在这里使用了短变量声明语句,即:在声明变量number的同时为它赋值。这意味着这里的number被视为一个新的变量。它的作用域仅在这条i语句所代表的代码块中。也可以说,变量number对于该if语句之外的代码来说是不可见的。我们若要在该if语句以外使用number变量就会造成编译错误。
   
    另外还要注意,即使我们已经在这条if语句所代表的代码块之外声明了number变量,这里的语句number := 4也是合法的。请看这个例子:

var number int
if number := 4; 100 > number {
    number += 3
} else if 100 < number {
    number -= 2
} else {
    fmt.Println("OK!")
}

    这种写法有一个专有名词,叫做:标识符的重声明。实际上,只要对同一个标识符的两次声明各自所在的代码块之间存在包含的关系,就会形成对该标识符的重声明。具体到这里,第一次声明的number变量所在的是该if语句的外层代码块,而number := 4所声明的number变量所在的是该if语句的代表代码块。它们之间存在包含关系。因此对number的重声明就形成了。
  
    这种情况造成的结果就是,if语句内部对number的访问和赋值都只会涉及到第二次声明的那个number变量。这种现象也被叫做标识符的遮蔽。上述代码被执行完毕之后,第二次声明的number变量的值会是7,而第一次声明的number变量的值仍会是0

任务

请在命令源码文件index.go的第 行处添加一条语句,使该文件被执行之后在标准输出上会打印出39

?不会了怎么办

这条语句可以是var number int。这使得在if语句的第一个条件分支中存在了对number变量的重声明。因而语句number += 3的执行改变的只是第二次声明的number变量的值。其值会由0变为3。另一方面,在if语句开始处的那条初始化子句并没有对外层的number变量进行重声明,而只是把它的值变成了9

||

提问题

写笔记

公开笔记
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最热 最新
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?