关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
关键字(Keywords)是编程语言中预定义的一组特殊词汇,每个关键字都有一个明确的功能和用途。在Go编程语言中,关键字起着构建程序逻辑框架的作用,是程序语义和结构的基础。本篇文章旨在深入探究关键字在Go中的定位与应用,以理解其在程序设计中的重要性。Go语言有25个预定义的关键字,这些关键字用于各种特定目的,从声明变量和函数,到流程控制和并发编程。
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
关键字在任何编程语言中都是基础构成元素,Go语言也不例外。它们是用于描述程序逻辑、定义数据结构、和处理错误等多方面任务的工具。
Go语言以其简洁性和高效性而受到广泛欢迎,这在很大程度上得益于其有限但高度优化的一组关键字。Go仅有25个关键字,相较于其他编程语言,这个数字相对较小,但每一个关键字都有明确和重要的用途。
虽然关键字本身是固定的,但Go提供了一系列复合语句和操作符,以实现高度的可扩展性和灵活性。例如,你可以使用 if-else,for 和 switch 关键字创建复杂的逻辑结构。
关键字
描述
const
用于声明一个或多个常量
func
用于定义新的函数
import
用于导入外部包
package
用于声明包名,通常位于每个Go源文件的第一行
type
用于声明自定义类型,如结构体、接口、别名等
var
用于声明一个或多个变量
关键字
描述
chan
用于声明一个新的通道(channel)
interface
用于定义一个新的接口
map
用于声明一个新的映射(键-值存储)
struct
用于定义一个新的结构体
关键字
描述
break
用于中断当前循环或 switch
语句
case
switch
语句中的一个分支
continue
跳过当前循环迭代的剩余语句,进入下一次迭代
default
switch
语句中的默认分支
else
if
语句的否定分支
fallthrough
用于 switch
语句中,使控制流继续执行下一个 case
for
用于循环
goto
跳转到标签(不推荐使用)
if
条件语句
range
用于 for
循环,遍历数组、切片、映射或通道
return
用于从函数返回值
select
用于多路通道选择
switch
用于多分支选择语句
关键字
描述
defer
用于延迟执行函数,通常用于清理资源
go
用于启动一个新的 goroutine,实现并发
关键字
代码示例
代码作用
const
const PI = 3.14159
定义常量 PI
func
func add(x, y int) int { return x + y }
定义名为 add
的函数
import
import "fmt"
导入 fmt
包
package
package main
定义包名为 main
type
type Point struct {x, y int}
定义一个名为 Point
的结构体
var
var name string = "John"
定义一个名为 name
的变量
chan
ch := make(chan int)
创建一个新的整数类型的通道
interface
type Writer interface { Write([]byte) error }
定义一个名为 Writer
的接口
map
m := map[string]int{"one": 1}
创建一个键为字符串、值为整数的映射
struct
type Circle struct { Radius float64 }
定义一个名为 Circle
的结构体
break
if x > 0 { break }
如果 x > 0
,则跳出循环
case
case "apple": fmt.Println("It's an apple")
在 switch
语句中,定义一个 case
continue
if x < 0 { continue }
如果 x < 0
,则跳过当前循环迭代
default
default: fmt.Println("It's default")
在 switch
语句中,定义一个默认 case
else
if x > 0 { /*...*/ } else { /*...*/ }
if
语句的否定分支
fallthrough
case 1: fallthrough
在 switch
语句中,强制执行下一个 case
for
for i := 0; i < 10; i++ { /*...*/ }
循环10次
goto
goto myLabel
跳转到 myLabel
标签(不推荐)
if
if x > 0 { /*...*/ }
条件为 x > 0
时,执行某个操作
range
for k, v := range m { /*...*/ }
遍历映射 m
return
return x + y
从函数中返回 x + y
select
select { case <-ch: /*...*/}
多路通道选择
switch
switch x { case 1: /*...*/ }
多分支选择
defer
defer fmt.Println("bye")
延迟执行 fmt.Println("bye")
直到函数退出
go
go doSomething()
在新的 goroutine 中执行 doSomething()
函数
标识符是编程语言中用于识别各种编程元素(如变量、函数、类型等)的名字。在Go语言中,标识符有一组特定的规则和约定。下面将详细解析这些规则和特性。
一个标识符是一个以Unicode字母或者下划线(_
)开头,并且完全由Unicode字母和Unicode数字组成的单词。
Go的关键字不能被用作标识符。这是一个重要的限制,以避免命名冲突和语法混淆。
标识符 _
是一个特殊字符,它被称为空标识符。它用于忽略函数的某个返回值或强制性声明一个变量,但不使用。
注意:截至目前(Go 1.20),东方字符都被视为非导出字符。
Player_9
DoSomething
VERSION
Ĝo
Π
_
_status
memStat
book
π
一个类型
변수
エラー
由Unicode数字开头:123
, 3apples
含有不符合要求的Unicode字符:a.b
, *ptr
, $name
, a@b.c
使用关键字:type
, range
在Go语言中,标识符用于命名各种类型的编程元素,如变量、常量、函数等。本文将通过表格的形式,提供不同类型标识符的代码示例和相关解释。
标识符类型
标识符示例
解释
变量
myVariable
用于存储数据值。
常量
MAX_COUNT
用于存储不会改变的数据值。
函数
CalculateSum
包含执行特定任务的代码块。
结构体
Person
用于定义包含多个字段(变量)的复合数据类型。
接口
Writer
定义了方法集,任何实现了这些方法的类型都被认为实现了该接口。
切片
mySlice
动态数组,可以在运行时更改大小。
Map
colorMap
键值对的集合。
Channel
msgChannel
用于在Goroutine之间发送和接收数据。
包
fmt
用于组织和复用代码,通常包含函数、变量、常量等。
别名
type MyInt int
用于给现有类型创建一个新名字。
枚举
enum Status
一组命名的整数常量。
Goroutine
go doSomething()
并发执行的函数。
标签
LOOP:
用于控制流语句,如break
和continue
。
空标识符
_
用于忽略不需要的值。
导出标识符
PublicVar
在其他包中可见和可用的标识符。
非导出标识符
privateVar
仅在定义它的包内可见和可用的标识符。
在本部分中,我们将通过一个综合性的代码实战案例来探讨Go中所有关键词和标识符的实际应用。我们将创建一个简单的计算器程序,该程序将实现加、减、乘、除四种操作。
package main // package关键词用于定义包名
import "fmt" // import关键词用于引入外部包
// 全局变量声明
var result int // var关键词用于声明变量
const maxInput = 100 // const关键词用于声明常量
// 自定义类型声明
type Calculator func(int, int) int // type关键词用于声明自定义类型
// 主函数
func main() { // func关键词用于声明函数
var operator string // 局部变量声明
var num1, num2 int
for { // for关键词用于循环
fmt.Println("请输入操作符 (+, -, *, /, exit):")
fmt.Scanln(&operator)
if operator == "exit" { // if关键词用于条件判断
fmt.Println("程序退出。")
break // break关键词用于跳出循环
}
fmt.Println("请输入两个整数:")
fmt.Scanln(&num1, &num2)
switch operator { // switch关键词用于多条件判断
case "+":
result = calculate(add, num1, num2)
case "-":
result = calculate(subtract, num1, num2)
case "*":
result = calculate(multiply, num1, num2)
case "/":
if num2 == 0 { // else关键词用于条件判断
fmt.Println("除数不能为0")
continue // continue关键词用于跳过本次循环
}
result = calculate(divide, num1, num2)
default: // default关键词用于多条件默认选项
fmt.Println("无效的操作符")
continue
}
fmt.Printf("结果为: %d\n", result)
}
}
// 函数声明与定义
func calculate(calc Calculator, num1, num2 int) int {
return calc(num1, num2)
}
// 加法
func add(a, b int) int {
return a + b
}
// 减法
func subtract(a, b int) int {
return a - b
}
// 乘法
func multiply(a, b int) int {
return a * b
}
// 除法
func divide(a, b int) int {
return a / b
}
package
:定义了当前代码所属的包,这里是main
。import
:用于引入外部库,这里我们引入了fmt
库。var
:全局和局部变量声明。const
:用于定义常量,这里定义了一个名为maxInput
的常量。type
:用于声明自定义类型,这里定义了一个Calculator
函数类型。func
:用于声明函数,这里声明了多个函数。for
:用于循环,这里是一个无限循环。if
、else
:用于条件判断。switch
、case
、default
:用于多条件判断。break
:用于跳出循环。continue
:用于跳过当前循环迭代。关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
如有帮助,请多关注
个人微信公众号:【TechLeadCloud】分享AI与云服务研发的全维度知识,谈谈我作为TechLead对技术的独特洞察。
TeahLead KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章