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秋招即将来临,很多同学会问软件测试面试八股文有必要背吗? 我的回答是:很有必要。你可以讨厌这种模式,但你一定要去背,因为不背你就进不了大厂。 国内的互联网面试,恐怕是现存的、最接近科举考试…...
2023年,在CSDN拥有10000粉丝有多难?
该数据来源于粉丝数人数排行前5000名用户的关注用户列表中产生的,由于采集样本数有限,数据可能具有一定的误差,仅供参考,本次采样用户数大概在100万以上。 筛选条件人数粉丝人数大于50007519粉丝人数大于100003763粉丝人数大于500…...
C++ -- 学习系列 关联式容器 set 与 map
一 关联式容器是什么? c 中有两种容器类型:关联式容器与序列式容器(顺序容器) 关联式中的容器是按照关键字来存储与访问的,序列式容器(顺序容器)则是元素在容器中的相对位置来存储与访问的。…...
Day 04 python学习笔记
Python数据容器 元组 元组的声明 变量名称(元素1,元素2,元素3,元素4…….) (元素类型可以不同) eg: tuple_01 ("hello", 1, 2,-20,[11,22,33]) print(type(tuple_01))结果&#x…...
Moonbeam Ignite强势回归
参与Moonbeam上最新的流动性计划 还记得新一轮的流动性激励计划吗?Moonbeam Ignite社区活动带着超过300万枚GLMR奖励来啦!体验新项目,顺便薅一把GLMR羊毛。 本次Moonbeam Ignite活动的参与项目均为第二批Moonbeam生态系统Grant资助提案中获…...
【改造后序遍历算法】95. 不同的二叉搜索树 II
95. 不同的二叉搜索树 II 解题思路 遍历每一个节点查看以k为根节点的二叉搜索树储存所有左子树的根节点储存所有右子树的根节点将左子树和右子树组装起来 将根节点储存在向量中 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeN…...
栈的基本操作(数据结构)
顺序栈的基本操作 #include <stdlib.h> #include <iostream> #include <stdio.h> #define MaxSize 10typedef struct{int data[MaxSize];int top; }SqStack;//初始化栈 void InitStack(SqStack &S){S.top -1; } //判断栈空 bool StackEmpty(SqStack S)…...
D. Jellyfish and Mex Codeforces Round 901 (Div. 2)
Problem - D - Codeforces 题目大意:有一个n个数的数组a,数m初始为0,每次操作可以删除任意一个数,然后m加上那个数,求n次操作和m的最小值 1<n<5000;0<a[i]<1e9 思路:可以发现&am…...
操作系统内存管理相关
1. 虚拟内存 1.1 什么是虚拟内存 虚拟内存是计算机系统内存管理的一种技术,我们可以手动设置自己电脑的虚拟内存。不要单纯认为虚拟内存只是“使用硬盘空间来扩展内存“的技术。虚拟内存的重要意义是它定义了一个连续的虚拟地址空间,并且 把内存扩展到硬…...
Sui流动性质押黑客松获胜者公布,助力资产再流通
Sui流动质押黑客松于日前结束Demo Day演示,其中有五个团队获奖、六个团队荣誉提名,共有超过30个项目获得参赛资格。此外,有两个团队赢得了Sui上DeFi协议提供的赏金。 本次黑客松的目的是挖掘并奖励将流动质押功能集成到其apps和产品中的开发…...
为什么在使用PageHelper插件时,指定的每页记录数大小失效?显示所有的记录数
1.问题现象: 这里指定每页显示5条,却把所有的记录数都显示出来了 2.分析: 之前是可以的,然后发现:PageHelper.startPage(pageNum,pageSize) 和执行sql的语句 顺序颠倒了,然后就出错了。 3.验证…...
误给传销公司做网站算犯罪吗/营销策划培训
1.网络层使用的中间设备叫路由器,其传输单元是____。 (1) 分组;数据报;Packet;数据包 2.网络层向其上一层运输层可以提供的两种服务为____和虚电路。 (1) 数据报;数据报服务;无连接的数据报服务;无连接的数…...
网站建设 太原/网络营销策划书结构
(一)基础铺垫 逻辑回归(Logistic Regression) 针对因变量为分类变量而进行回归分析的一种统计方法,属于概率型非线性回归。优点:算法易于实现和部署,执行效率和准确度高;缺点&#x…...
郑州做的比较好网站公司吗/搜索引擎免费登录入口
【100个】计算机理论英文参考文献供您参考,希望能解决毕业生们的计算机理论论文参考文献哪里找相关问题,整理好参考文献那就开始写计算机理论论文吧!一、计算机理论论文参考文献范文[1]抑制OFDM信号峰均比的PTS算法分析与优化.胡茂凯.陈西宏.刘强,2011陕…...
医院的 建设网站的策划书/全网网络营销
我们都知道一个iOS应用的如果是在main函数中,它的实现是 int main(int argc, char * argv[]) {autoreleasepool {return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));} } 复制代码我们看到在main中有个autoreleasepool,那它到底是什么呢?让我…...
dreamweaver绿色版下载/seo搜索引擎优化推荐
本文刚刚发在51CTO.com网站,文章链接:[url]http://soft.51cto.com/art/200611/34788.htm[/url]11月中旬,CA EXPO 2006分别在上海和北京召开。作为一直与CA保持联系的记者,51CTO老杨受邀参与北京站的会议。我是2000年开始接触和了解…...
汉阳网站建设鄂icp/厦门百度代理公司
📚 本项目为从零开始学 Web 前端系列图文教程。从零基础开始,手把手教你进入前端开发的世界。从入门到进阶,我们一同前行。 项目背景 大家好,我是前端队长Daotin,想要获取更多前端精彩内容,关注我(全网同…...