Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
目录
- 一、Go的关键字列表和分类
- 介绍
- 关键字在Go中的定位
- 语言的基石
- 简洁与高效
- 可扩展性和灵活性
- 关键字分类
- 声明各种代码元素
- 组合类型的字面表示
- 基本流程控制语法
- 协程和延迟函数调用
- 二、Go的关键字全代码示例
- 关键字全代码示例
- 三、Go的标识符定义
- 基础定义
- 特殊规定
- 关键字与标识符
- 空标识符
- 作用域和可见性
- 合法标识符示例
- 导出标识符
- 非导出标识符
- 非法标识符
- 四、Go的标识符举例
- 表格: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_9
DoSomething
VERSION
Ĝo
Π
非导出标识符
_
_status
memStat
book
π
一个类型
변수
エラー
非法标识符
- 由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 intfor { // 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产品研发负责人。
相关文章:

Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
目录 一、Go的关键字列表和分类介绍关键字在Go中的定位语言的基石简洁与高效可扩展性和灵活性 关键字分类声明各种代码元素组合类型的字面表示基本流程控制语法协程和延迟函数调用 二、Go的关键字全代码示例关键字全代码示例 三、Go的标识符定义基础定义特殊规定关键字与标识符…...

【网络】网络扫盲篇 ——用简单语言和图解带你入门网络
网络的一些名词和基础知识讲解 前言正式开始一些基础知识发展背景运营商和生产商 协议协议的分层TCP/IP五层(或四层)模型(可以不看,对新手来说太痛苦了,我这里只是为了让屏幕前的你过一遍就好,里面很多概念新手是不太懂的…...

【项目开发 | C语言项目 | C语言薪资管理系统】
本项目是一个简单的薪资管理系统,旨在为用户提供方便的员工薪资管理功能,如添加、查询、修改、删除员工薪资信息等。系统通过命令行交互界面与用户进行交互,并使用 txt 文件存储员工数据。 一,开发环境需求 操作系统:w…...

Android---GC回收机制与分代回收策略
目录 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾回收算法 JVM 分代回收策略 1. 新生代 2. 老年代 GC Log 分析 引用 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾就是内存中已经没有用的对象,JVM 中的垃圾回收器(Garbage Collector)会自…...

前缀、中缀、后缀表达式相互转换工具
目录 1. 界面一览 2. 使用说明 3. 实例演示 3.1 输入中缀 3.2 输入前缀 3.3 输入后缀 3.4 选择错误的类型 4. 代码 5. 资源地址 关于什么是前缀、中缀、后缀表达式,相信你不知道这个东西,那你也不会点进来这篇博客,当然,…...

Vue之ElementUI之动态树+数据表格+分页(项目功能)
目录 前言 一、实现动态树形菜单 1. 配置相应路径 2. 创建组件 3. 配置组件与路由的关系 index.js 4. 编写动态树形菜单 5. 页面效果演示 二、实现数据表格绑定及分页功能 1. 配置相应路径 2. 编写数据表格显示及分页功能代码 BookList.vue 3. 演示效果 总结 前言…...

【CAD二次开发】给CAD添加TRUSTEDPATHS避免dll插件信任弹窗
找到配置文件目录,遍历下面的每个配置文件; 找到 Variables 下的TRUSTEDPATHS项目;在后面添加新的目录即可,多个目录使用分号分隔; public static void AddPath(string trusedPath){// 指定注册表键的路径...

编译和链接
编译和链接 一:???二:翻译环境1:编译1:预处理2:编译 2:链接 三:运行环境: 本文章所使用的图片均来在yyds鹏哥一:?…...

常识判断 --- 科技常识
目录 力与热 光和声 航空成就 垃圾分类 百科知识 血型 二十四节气歌 春雨惊春清谷天 夏满忙夏暑相连 秋处露秋寒霜降 冬雪雪冬小大寒 力与热 光和声 航空成就 垃圾分类 百科知识 血型...

修改npm全局安装的插件(下载目录指向)
我们先打开终端 然后执行 npm config get prefix查看npm 的下载地址 一般都会在C盘 但是 我们都知道 C盘下东西多了是很不好的 所以 我们可以执行 npm config set prefix “E:\npmfile”将 npm 的下载地址 改变成 E盘下的 npmfile目录 这样 以后 默认全局安装的插件就会都到…...

<C++> 异常
C语言传统的处理错误的方式 传统的错误处理机制: 终止程序,如assert,缺陷:用户难以接受。如发生内存错误,除0错误时就会终止程序。返回错误码,缺陷:需要程序员自己去查找对应的错误。如系统的…...
聊聊HttpClientBuilder
序 本文主要研究一下HttpClientBuilder HttpClientBuilder httpclient-4.5.10-sources.jar!/org/apache/http/impl/client/HttpClientBuilder.java public class HttpClientBuilder {public static HttpClientBuilder create() {return new HttpClientBuilder();}protected…...

MacOS - Sonoma更新了啥
1 系统介绍 苹果公司于2023年9月26日发布了macOS Sonoma 14.0正式版。名称由来不知道,可能是地名:Sonoma是一个地名,指加利福尼亚州北部索诺玛县(Sonoma County)。 2 系统重要更新 2.1 将小组件添加到桌面 速览提醒事项和临近日程等。按住Control键点…...

C++17中头文件filesystem的使用
C17引入了std::filesystem库(文件系统库, filesystem library),相关类及函数的声明在头文件filesystem中,命名空间为std::filesystem。 1.path类:文件路径相关操作,如指定的路径是否存在等,其介绍参见:http…...

「专题速递」数字人直播带货、传统行业数字化升级、远程协作中的低延时视频、地产物业中的通讯终端...
音视频技术作为企业数字化转型的核心要素之一,已在各行各业展现出广泛的应用和卓越的价值。实时通信、社交互动、高清视频等技术不仅令传统行业焕发新生,还为其在生产、管理、服务提供与维护等各个领域带来了巨大的助力,实现了生产效率和服务…...

PE格式之PE头部
1. PE头部总体组成 2. DOS MZ头 3. PE头 PE头由3部分组成: 下面分别: OptionalHeader比较大: 然后是节表, 节表有多个: PE文件头部就结束了, 最后就是节区了, 来看几段代码: ; main.asm .586 .model flat, stdcall option casemap:noneinclude windows.inc include ke…...

SLAM从入门到精通(用python实现机器人运动控制)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在ROS下面,开发的方法很多,可以是c,可以是python。大部分接口操作类的应用,其实都可以用python来开…...
接口和抽象类有什么区别?
接口和抽象类都是用于实现抽象类型的机制: 抽象类:抽象类可以包含抽象方法(未实现的方法)和具体方法(已实现的方法)。抽象类可以有字段(成员变量),这些字段可以是具体的,也可以是抽象的。一个类只能继承一个抽象类,Java不支持多继承。抽象类可以拥有构造方法,用于初…...

基于springboot+vue的人事系统
目录 前言 一、技术栈 二、系统功能介绍 员工信息管理 考勤信息管理 考勤信息管理 下班记录管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用,作为学校以及一些培训机构,都在用信息…...

记住这份软件测试八股文还怕不能拿offer?你值得拥有
前言 2023秋招即将来临,很多同学会问软件测试面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。 国内的互联网面试,恐怕是现存的、最接近科举考试…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...