Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

一、Go的关键字列表和分类
介绍
关键字(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语言以其简洁性和高效性而受到广泛欢迎,这在很大程度上得益于其有限但高度优化的一组关键字。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,实现并发 |
二、Go的关键字全代码示例
关键字全代码示例
| 关键字 | 代码示例 | 代码作用 |
|---|---|---|
| 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的标识符定义
标识符是编程语言中用于识别各种编程元素(如变量、函数、类型等)的名字。在Go语言中,标识符有一组特定的规则和约定。下面将详细解析这些规则和特性。
基础定义
一个标识符是一个以Unicode字母或者下划线(_)开头,并且完全由Unicode字母和Unicode数字组成的单词。
- Unicode字母:这些是定义在Unicode标准8.0中的Lu、Ll、Lt、Lm和Lo分类中的字符。
- Unicode数字:这些是定义在Unicode标准8.0中的Nd数字字符分类中的字符。
特殊规定
关键字与标识符
Go的关键字不能被用作标识符。这是一个重要的限制,以避免命名冲突和语法混淆。
空标识符
标识符 _ 是一个特殊字符,它被称为空标识符。它用于忽略函数的某个返回值或强制性声明一个变量,但不使用。
作用域和可见性
- 导出标识符:一个由Unicode大写字母开头的标识符称为导出标识符,也可以被理解为公开(public)。
- 非导出标识符:其它(即非Unicode大写字母开头的)标识符称为非导出标识符,也可以被理解为私有(private)。
注意:截至目前(Go 1.20),东方字符都被视为非导出字符。
合法标识符示例
导出标识符
Player_9DoSomethingVERSIONĜoΠ
非导出标识符
__statusmemStatbookπ一个类型변수エラー
非法标识符
- 由Unicode数字开头:
123,3apples - 含有不符合要求的Unicode字符:
a.b,*ptr,$name,a@b.c - 使用关键字:
type,range
四、Go的标识符举例
在Go语言中,标识符用于命名各种类型的编程元素,如变量、常量、函数等。本文将通过表格的形式,提供不同类型标识符的代码示例和相关解释。
表格: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关键词和标识符代码实战
在本部分中,我们将通过一个综合性的代码实战案例来探讨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产品业务负责人。
Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!的更多相关文章
- c#操作Excel模板,替换命名单元格或关键字形成报表
c#操作Excel模板,替换命名单元格或关键字形成报表 http://blog.sina.com.cn/s/blog_45eaa01a0102vqma.html一 建立Excel 模板文件 templ ...
- java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系
本文关键词: java continue break 关键字 详解 区别 用法 标记 标签 使用 示例 联系 跳出循环 带标签的continue和break 嵌套循环 深入continue ...
- C语言--关键字、标识(zhi)符、注释
一.关键字 1. 关键字 是C语言中提供的有特殊含义的符号,同时也叫做保留字,在C语言中关键字一共有32个,它们分别被赋予了特殊的含义.如:main.int.struct等等. 2. 关键字的特征 1 ...
- MySQL关键字(保留字)列表
在使用MySQL的时候,一般尽量避免用关键字作为表名,如使用关键字做表名,需要按标准写法给SQL语句加[](或是“)区分字段名和表名. 下面列出MySQL所有关键字,希望给使用MySQL的朋友提供一些 ...
- .NET 命名规范 代码示例
class Person { /// <summary> /// 公有字段.属性 首字母大写 /// </summary> public string FirstName; p ...
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...
- 构造方法、封装、关键字(this、static)和代码块的介绍
1.构造方法 1.1 构造方法与成员方法的区别 构造方法分为无参构造和有参构造,其中有参构造方法和无参构造方法为方法的重载关系. 构造方法在初始化一个类的对象时进行调用,它没有返回值,方法名与类名相同 ...
- 关键字检索高亮标出-javasript/jQuery代码实现
原文:http://www.open-open.com/code/view/1454504432089 此方法传入2个参数,一个是被检索内容所在的表单或者HTML元素的ID,另一为关键字,多个关键字的 ...
- 你还用拼音为变量命名?新人OIer别傻了,教你写出优质代码
本篇文章适用语言:python,c++,Java.(其实我就是随便bb) 我们在编辑代码的时候,不免拿其他人的代码进行学习,或者将自己的代码拿给别人修改.这个时候,如何让别人快速读懂你的代码,是提升效 ...
- 五:key关键字 string字符串 list列表 set集合 Zset有序集合
key 1.keys 命令用于查找所有符合给定模式 pattern 的 key . keys * 查找所有的key返回一个列表 2.EXISTS xxx 检查是否有指定名字为xxx的key 有就返回 ...
随机推荐
- Spring boot+vue打包、上传宝塔面板并配置https
终于把网站搞完了,也终于能够通过域名访问了,这次就简单回顾一下这么多时间的经历,总结一下. 项目地址穆音博客,本文发布原地址在Spring boot+vue打包.上传宝塔面板并配置https 我的开发 ...
- Linux 上的 .NET 崩溃了怎么抓 Dump
一:背景 1. 讲故事 训练营中有朋友问在 Linux 上如何抓 crash dump,在我的系列文章中演示的大多是在 Windows 平台上,这也没办法要跟着市场走,谁让 .NET 的主战场在工控 ...
- R 语言柱状图示例笔记
由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文章中链接. 一.基础柱状图 1. barplot 命令 基于barplot基础柱状图颜色.方向及分组的绘 ...
- 手把手教你实战TDD
1. 前言 领域驱动设计,测试驱动开发. 我们在<手把手教你落地DDD>一文中介绍了领域驱动设计(DDD)的落地实战,本文将对测试驱动开发(TDD)进行探讨,主要内容有:TDD基本理解.T ...
- 手牵手带你实现mini-vue
1 前言 随着 Vue.React.Angularjs 等框架的诞生,数据驱动视图的理念也深入人心,就 Vue 来说,它拥有着双向数据绑定.虚拟dom.组件化.视图与数据相分离等等造福程序员的优点,那 ...
- json数据的解析
php声明没有键的数组,用json_encode输出: $array=array("1","2","3"); echo json_encod ...
- Java 输入字符串,统计大写字母,小写字母,数字字符的个数
代码如下: public static void main(String[] args) { String str = "AaFsECvcS12483fs+-*/"; int bi ...
- yolov5实战之模型剪枝
续yolov5实战之二维码检测 目录 前沿 为什么要做轻量化 什么是剪枝 稀疏化训练 剪枝 微调 结语 模型下载 前沿 在上一篇yolov5的博客中,我们用yolov5训练了一个二维码检测器,可以 ...
- 一文了解Go语言的I/O接口设计
1. 引言 I/O 操作在编程中扮演着至关重要的角色.它涉及程序与外部世界之间的数据交换,允许程序从外部,如键盘.文件.网络等地方读取数据,也能够将外界输入的数据重新写入到目标位置中.使得程序能够与外 ...
- Spring Boot 日志文件
Spring Boot 日志文件 日志文件是用于记录系统操作事件的记录文件或文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统的活动等重要作用. 事件日志记录系统的执行中 ...