关注公众号【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 intvar name, address stringvar x, y int = 3, 4var active boolvar salary = 50000
常量声明 const PI = 3.14const greeting = "Hello, Go!"const active = falseconst daysInWeek = 7const lightSpeed = 299792458
赋值语句 x := 10y = x + 5a, b := 20, 30name = "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 label2if 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 intvar name, address stringvar x, y int = 3, 4var active boolvar salary = 50000
常量声明 const PI = 3.14const greeting = "Hello, Go!"const active = falseconst daysInWeek = 7const lightSpeed = 299792458
赋值语句 x := 10y = x + 5a, b := 20, 30name = "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 label2if 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语句与表达式深度解析:全案例手册的更多相关文章

  1. 华为全栈AI技术干货深度解析,解锁企业AI开发“秘籍”

    摘要:针对企业AI开发应用中面临的痛点和难点,为大家带来从实践出发帮助企业构建成熟高效的AI开发流程解决方案. 在数字化转型浪潮席卷全球的今天,AI技术已经成为行业公认的升级重点,正在越来越多的领域为 ...

  2. Feign Ribbon Hystrix 三者关系 | 史上最全, 深度解析

    史上最全: Feign Ribbon Hystrix 三者关系 | 深度解析 疯狂创客圈 Java 分布式聊天室[ 亿级流量]实战系列之 -25[ 博客园 总入口 ] 前言 疯狂创客圈(笔者尼恩创建的 ...

  3. 以两种异步模型应用案例,深度解析Future接口

    摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...

  4. 程序员收藏必看系列:深度解析MySQL优化(二)

    程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而 ...

  5. Deep Learning模型之:CNN卷积神经网络(一)深度解析CNN

    http://m.blog.csdn.net/blog/wu010555688/24487301 本文整理了网上几位大牛的博客,详细地讲解了CNN的基础结构与核心思想,欢迎交流. [1]Deep le ...

  6. mybatis 3.x源码深度解析与最佳实践(最完整原创)

    mybatis 3.x源码深度解析与最佳实践 1 环境准备 1.1 mybatis介绍以及框架源码的学习目标 1.2 本系列源码解析的方式 1.3 环境搭建 1.4 从Hello World开始 2 ...

  7. 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1)

                                                    第三节最大似然推导mse损失函数(深度解析最小二乘来源)        在第二节中,我们介绍了高斯分布的 ...

  8. 杂项-分布式-EDAS:深度解析阿里云EDAS服务

    ylbtech-杂项-分布式-EDAS:深度解析阿里云EDAS服务 1.返回顶部 1. 深度解析阿里云EDAS服务 弹性伸缩 摘要: 第一种只适用于业务较少的情况,而在新业务不断增加的情况下,增加新应 ...

  9. 《SEO深度解析——全面挖掘搜索引擎优化的核心秘密》

    <SEO深度解析——全面挖掘搜索引擎优化的核心秘密> 基本信息 作者: 痞子瑞 出版社:电子工业出版社 ISBN:9787121224041 上架时间:2014-2-28 出版日期:201 ...

  10. 深度解析CNN

    [1]Deep learning简介 [2]Deep Learning训练过程 [3]Deep Learning模型之:CNN卷积神经网络推导和实现 [4]Deep Learning模型之:CNN的反 ...

随机推荐

  1. 在树莓派上实现numpy的conv2d卷积神经网络做图像分类,加载pytorch的模型参数,推理mnist手写数字识别,并使用多进程加速

    这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是卷积识别mnist手写数字识别 训练代码在电脑上,cpu就能训练,很快的: import torch impor ...

  2. 图解Redis和Zookeeper分布式锁

    1.基于Redis实现分布式锁 Redis分布式锁原理如上图所示,当有多个Set命令发送到Redis时,Redis会串行处理,最终只有一个Set命令执行成功,从而只有一个线程加锁成功 2:SetNx命 ...

  3. JavaWeb入门必备JavaEE规范!

    前言 对于学习 Java 的同学,大都是 Web 方向的.我们学习 JavaWeb 开发肯定是一个循序渐进的过程,学习前有一些前置知识要掌握,比如 JavaSE 相关知识,HTML.CSS.JavaS ...

  4. 前端下拉框组件CCDropDownFilter下拉框 筛选框 仿美团下拉筛选框

    快速实现下拉框 筛选框 仿美团下拉筛选框, 请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12421 效果图如下:   # 下拉框使用方法 ...

  5. TCP/IP协议发明人G-Cerf

    如果你是一个IT人,你可以不知道Vinton G. Cerf博士,但你不可能不知道TCP/IP; 如果你不是一个IT人,你可以不知道TCP/IP,但你不可能不知道互联网; 如果从1973年起,Vint ...

  6. Prometheus-4:服务自动发现Service Discovery

    自动发现 Prometheus的服务发现的几种类型: 基于文件的服务发现: 基于DNS的服务发现: 基于API的服务发现:Kubernetes.Consul.Azure...... Prometheu ...

  7. C语言指针--一级指针

    文章目录 前言 一.什么是指针 二.一级指针的使用 1.一级指针的创建 2.指针的赋值 3.&是什么 4.一维指针的使用 4.1 `变量` 和 `*变量` 4.2 输出指针变量内容 4.3 改 ...

  8. 一:wince 开发环境

    1:下载相关文件,vs2008 可以自行搜索安装 链接:https://pan.baidu.com/s/1b2shwCqmc1o9x-zsy8CmeA 提取码:qing

  9. PerfView 洞察C#托管堆内存 "黑洞现象"

    一:背景 1. 讲故事 首先声明的是这个 黑洞 是我定义的术语,它是用来表示 内存吞噬 的一种现象,何为 内存吞噬,我们来看一张图. 从上面的 卦象图 来看,GCHeap 的 Allocated=85 ...

  10. 万字长文浅析配置对MySQL服务器的影响

    有很多的服务器选项会影响这MySQL服务器的性能,比如内存中临时表的大小.排序缓冲区等.有些针对特定存储引擎(如InnoDB)的选项,也会对查询优化很有用. 调整服务器的配置从某种程度来说是一个影响全 ...