Go语句与表达式深度解析:全案例手册
关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

语句
语句是Go编程语言中完成特定操作的单个逻辑指令。语句是组成程序的基本单元,它们可以控制程序流程、进行赋值、声明变量等。
1. 声明语句
1.1 变量声明
用于定义一个或多个变量,但不一定要赋值。
举例
var age int
var name, address string
1.2 常量声明
定义一个或多个常量值。
举例
const PI = 3.14
const greeting = "Hello, Go!"
2. 赋值语句
用于给已声明的变量分配新的值。
举例
x := 10
y = x + 5
a, b := 20, 30
3. 控制流语句
3.1 条件语句
if语句
基于某个条件来执行代码块。
举例
if x > y {
fmt.Println("x is greater than y")
} else if x < y {
fmt.Println("x is less than y")
} else {
fmt.Println("x is equal to y")
}
switch语句
基于一个表达式或值来执行多个代码块中的一个。
举例
switch grade {
case "A":
fmt.Println("Excellent!")
case "B":
fmt.Println("Good")
default:
fmt.Println("Passed")
}
3.2 循环语句
for语句
用于重复执行某段代码。
举例
for i := 0; i < 10; i++ {
fmt.Println(i)
}
for _, value := range array {
fmt.Println(value)
}
3.3 跳转语句
break语句
用于中断当前循环。
举例
for i := 0; i < 10; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
continue语句
跳过当前迭代,并继续下一个迭代。
举例
for i := 0; i < 10; i++ {
if i%2 == 0 {
continue
}
fmt.Println(i)
}
return语句
从函数中返回特定值。
举例
func add(a int, b int) int {
return a + b
}
goto语句
跳转到指定的标签。
举例
for i := 0; i < 10; i++ {
if i == 5 {
goto end
}
fmt.Println(i)
end:
}
4. 其他语句
4.1 defer语句
确保在函数结束前执行某个语句。
举例
func printFile() {
file, err := os.Open("file.txt")
if err != nil {
panic(err)
}
defer file.Close()
// Do file operations...
}
4.2 go语句
在新的goroutine中执行函数调用。
举例
go func() {
fmt.Println("Executing in a new goroutine")
}()
实战案例
| 语句 | 语句样例 |
|---|---|
| 变量声明 | var age int、var name, address string、var x, y int = 3, 4、var active bool、var salary = 50000 |
| 常量声明 | const PI = 3.14、const greeting = "Hello, Go!"、const active = false、const daysInWeek = 7、const lightSpeed = 299792458 |
| 赋值语句 | x := 10、y = x + 5、a, b := 20, 30、name = "Alice"、isActive := true |
| if语句 | if x > 10 { ... }、if x > 10 && y < 5 { ... }、if active { ... }、if name := getName(); name != "" { ... }、if age > 18 { ... } else { ... } |
| switch语句 | switch x { ... }、switch { case x > 10: ... }、switch day { case "Monday": ... }、switch n := 4; n { ... }、switch y.(type) { ... } |
| for语句 | for i := 0; i < 5; i++ { ... }、for i, v := range arr { ... }、for x > 5 { ... }、for key, val := range mapData { ... }、for _, char := range str { ... } |
| break语句 | for { if condition { break } }、switch { case x: if y { break } }、for x > 10 { ...; break; ... }、label: for { ...; break label; ... }、for i := 0; i < 10; i++ { if i == 5 { break } } |
| continue语句 | for i := 0; i < 10; i++ { if i%2 == 0 { continue } }、for _, v := range data { if v == nil { continue } }、for x > 0 { ...; if condition { continue } ... }、for { if !isValid(data) { continue } ... }、for idx, value := range items { if value == "" { continue } } |
| return语句 | func add(a, b int) int { return a + b }、func name() string { return "Alice" }、func getDetails() (string, int) { return "Alice", 30 }、func isActive() bool { ...; return false }、func calculate() float64 { ...; return result } |
| goto语句 | label1: for { ...; if x > 5 { goto label1 } }、label2: fmt.Println("Start"); ...; goto label2、if condition { goto errorHandling } ... errorHandling: ...、if !isValid { goto cleanup } ... cleanup: ... |
| defer语句 | file, _ := os.Open("file.txt"); defer file.Close()、mutex.Lock(); defer mutex.Unlock()、defer fmt.Println("Finished!")、conn.Connect(); defer conn.Disconnect()、reader := openReader(); defer reader.Close() |
| go语句 | go fmt.Println("Running in goroutine")、go process(data)、go func(val int) { ... }(x)、go startServer()、go handleRequest(request) |
表达式介绍、详解、举例
在编程中,表达式是一个结构,通过某种方式组合了变量、常量和操作符,并且可以被评估为某个值。在Go中,表达式根据所包含的内容和结果的不同,可以有多种形式。
1. 基础表达式
1.1 字面量
字面量是一个表示固定值的表达式。
举例
42 // 整型字面量
3.14 // 浮点字面量
true // 布尔字面量
"Hello" // 字符串字面量
1.2 变量和常量
变量和常量是预先定义的,具有特定名称和值的实体。
举例
const PI = 3.14
var name = "Go"
2. 复合表达式
2.1 算术表达式
这些表达式使用算术运算符,如+、-、*、/和%。
举例
a := 5
b := 2
sum := a + b // 结果:7
difference := a - b // 结果:3
product := a * b // 结果:10
quotient := a / b // 结果:2
remainder := a % b // 结果:1
2.2 关系表达式
关系表达式评估为布尔值,常用的关系运算符有==、!=、<、<=、>和>=。
举例
x := 5
y := 3
result1 := x == y // 结果:false
result2 := x > y // 结果:true
2.3 逻辑表达式
逻辑表达式用于组合多个布尔表达式,常用的逻辑运算符有&&、||和!。
举例
a := true
b := false
result1 := a && b // 结果:false
result2 := a || b // 结果:true
result3 := !a // 结果:false
2.4 赋值表达式
赋值表达式给变量赋值,并返回该值。
举例
x := 10 // 使用 := 进行赋值
y = x + 5 // 使用 = 进行赋值
3. 函数调用表达式
函数调用返回函数的返回值。
举例
func add(a int, b int) int {
return a + b
}
result := add(5, 3) // 结果:8
4. 类型转换表达式
这些表达式将值从一个类型转换为另一个类型。
举例
x := 5.8
y := int(x) // 结果:5
实战案例
| 语句 | 语句样例 |
|---|---|
| 变量声明 | var age int、var name, address string、var x, y int = 3, 4、var active bool、var salary = 50000 |
| 常量声明 | const PI = 3.14、const greeting = "Hello, Go!"、const active = false、const daysInWeek = 7、const lightSpeed = 299792458 |
| 赋值语句 | x := 10、y = x + 5、a, b := 20, 30、name = "Alice"、isActive := true |
| if语句 | if x > 10 { ... }、if x > 10 && y < 5 { ... }、if active { ... }、if name := getName(); name != "" { ... }、if age > 18 { ... } else { ... } |
| switch语句 | switch x { ... }、switch { case x > 10: ... }、switch day { case "Monday": ... }、switch n := 4; n { ... }、switch y.(type) { ... } |
| for语句 | for i := 0; i < 5; i++ { ... }、for i, v := range arr { ... }、for x > 5 { ... }、for key, val := range mapData { ... }、for _, char := range str { ... } |
| break语句 | for { if condition { break } }、switch { case x: if y { break } }、for x > 10 { ...; break; ... }、label: for { ...; break label; ... }、for i := 0; i < 10; i++ { if i == 5 { break } } |
| continue语句 | for i := 0; i < 10; i++ { if i%2 == 0 { continue } }、for _, v := range data { if v == nil { continue } }、for x > 0 { ...; if condition { continue } ... }、for { if !isValid(data) { continue } ... }、for idx, value := range items { if value == "" { continue } } |
| return语句 | func add(a, b int) int { return a + b }、func name() string { return "Alice" }、func getDetails() (string, int) { return "Alice", 30 }、func isActive() bool { ...; return false }、func calculate() float64 { ...; return result } |
| goto语句 | label1: for { ...; if x > 5 { goto label1 } }、label2: fmt.Println("Start"); ...; goto label2、if condition { goto errorHandling } ... errorHandling: ...、if !isValid { goto cleanup } ... cleanup: ... |
| defer语句 | file, _ := os.Open("file.txt"); defer file.Close()、mutex.Lock(); defer mutex.Unlock()、defer fmt.Println("Finished!")、conn.Connect(); defer conn.Disconnect()、reader := openReader(); defer reader.Close() |
| go语句 | go fmt.Println("Running in goroutine")、go process(data)、go func(val int) { ... }(x)、go startServer()、go handleRequest(request) |
关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

如有帮助,请多关注
个人微信公众号:【TechLeadCloud】分享AI与云服务研发的全维度知识,谈谈我作为TechLead对技术的独特洞察。
TeahLead KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。
Go语句与表达式深度解析:全案例手册的更多相关文章
- 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”
摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践出发帮助企业构建成熟高效的AI开发流程解决方案. 在数字化转型浪潮席卷全球的今天,AI技术已经成为行业公认的升级重点,正在越来越多的领域为 ...
- Feign Ribbon Hystrix 三者关系 | 史上最全, 深度解析
史上最全: Feign Ribbon Hystrix 三者关系 | 深度解析 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 前言 疯狂创客圈(笔者尼恩创建的 ...
- 以两种异步模型应用案例,深度解析Future接口
摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...
- 程序员收藏必看系列:深度解析MySQL优化(二)
程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而 ...
- Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN
http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...
- mybatis 3.x源码深度解析与最佳实践(最完整原创)
mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...
- 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1)
第三节最大似然推导mse损失函数(深度解析最小二乘来源) 在第二节中,我们介绍了高斯分布的 ...
- 杂项-分布式-EDAS:深度解析阿里云EDAS服务
ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...
- 《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》
<SEO深度解析——全面挖掘搜索引擎优化的核心秘密> 基本信息 作者: 痞子瑞 出版社:电子工业出版社 ISBN:9787121224041 上架时间:2014-2-28 出版日期:201 ...
- 深度解析CNN
[1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之:CNN卷积神经网络推导和实现 [4]Deep Learning模型之:CNN的反 ...
随机推荐
- shader编程经典:分形--科赫曲线
序言 科赫(雪花)曲线是一个经典分形图案,来一起领略下分形之美.本篇内容用到一些基础的内容,例如UV的理解和画线技巧,有需要的话可以参考合集的画圆和画线两篇文章. 示例 shadertoy 代码: # ...
- 自研API 网关 - 媲美美团这套Shepherd网关架构!
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 我说:"很多互联网大厂,很少基于 SpringMVC 模块对外提供 WEB 服务的 ...
- 基于.NetCore开发博客项目 StarBlog - (29) 开发RSS订阅功能
前言 最近忙中偷闲把博客的评论功能给做完了,我可以说这个评论功能已经达到「精致」的程度了 但在正式发布之前,先卖个关子,来介绍一下另一个新功能--RSS订阅 RSS是啥 来自hk gov新闻网的介绍~ ...
- 细节决定成败,聊聊JS的类型(上)
今天我们来讲讲 JavaScript 的内容,在这个部分,我首先想跟你聊一聊类型. JavaScript 类型对每个前端程序员来说,几乎都是最为熟悉的概念了.但是你真的很了解它们吗?我们不妨来看看下面 ...
- Unity的IPreprocessBuild:深入解析与实用案例
Unity IPreprocessBuild Unity IPreprocessBuild是Unity引擎中的一个非常有用的功能,它可以让开发者在构建项目时自动执行一些操作.这个功能可以帮助开发者提高 ...
- SQL Server 数据库字符串分割函数
SQL Server 数据库字符串分割函数,源代码如下: ALTER FUNCTION [dbo].[f_split] ( @SourceStr VARCHAR(MAX), -- 源字符串 @Spli ...
- 利用Spire.Pdf实现PDF添加印章的操作
在一些文档处理中,我们需要对PDF盖上公司的印章操作,本篇随笔介绍利用Spire.Pdf实现PDF添加印章的操作,如全章和骑缝章的处理. 1.实现效果和处理代码 有时候,需要在特定的位置盖章,以及各个 ...
- 【技术积累】Java中的常用类【一】
Math类 Math类是Java中的一个数学工具类,提供了一系列常用的数学方法.下面是Math类的常用方法及其案例: abs() 返回一个数的绝对值. int num = -10; int absNu ...
- 2023年icpc大学生程序设计竞赛-wmh
这次比赛名额比较少,程老师还是给了我们新生更多机会,非常感谢.第一次去这么远打比赛,也算是比较开心的,过去那天晚上就被队友拉着出去玩,玩的很嗨,打的很菜.vp去年题的时候是自信的,参加今年正式赛的时候 ...
- PostgreSQL 10 文档: PostgreSQL 客户端工具
PostgreSQL 客户端应用 这部份包含PostgreSQL客户端应用和工具的参考信息.不是所有这些命令都是通用工具,某些需要特殊权限.这些应用的共同特征是它们可以被运行在任何主机上,而不管数 ...