Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!

news2025/3/31 16:06:16

目录

  • 一、Go的关键字列表和分类
    • 介绍
    • 关键字在Go中的定位
        • 语言的基石
        • 简洁与高效
        • 可扩展性和灵活性
    • 关键字分类
      • 声明各种代码元素
      • 组合类型的字面表示
      • 基本流程控制语法
      • 协程和延迟函数调用
  • 二、Go的关键字全代码示例
    • 关键字全代码示例
  • 三、Go的标识符定义
    • 基础定义
    • 特殊规定
      • 关键字与标识符
      • 空标识符
    • 作用域和可见性
    • 合法标识符示例
      • 导出标识符
      • 非导出标识符
    • 非法标识符
  • 四、Go的标识符举例
    • 表格:Go标识符类型、示例与解释
  • 五、Go关键词和标识符代码实战
    • 综合案例:简单计算器
      • 关键词和标识符解析

关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

file

一、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 语句
caseswitch 语句中的一个分支
continue跳过当前循环迭代的剩余语句,进入下一次迭代
defaultswitch 语句中的默认分支
elseif 语句的否定分支
fallthrough用于 switch 语句中,使控制流继续执行下一个 case
for用于循环
goto跳转到标签(不推荐使用)
if条件语句
range用于 for 循环,遍历数组、切片、映射或通道
return用于从函数返回值
select用于多路通道选择
switch用于多分支选择语句

协程和延迟函数调用

关键字描述
defer用于延迟执行函数,通常用于清理资源
go用于启动一个新的 goroutine,实现并发

二、Go的关键字全代码示例

关键字全代码示例

关键字代码示例代码作用
constconst PI = 3.14159定义常量 PI
funcfunc add(x, y int) int { return x + y }定义名为 add 的函数
importimport "fmt"导入 fmt
packagepackage main定义包名为 main
typetype Point struct {x, y int}定义一个名为 Point 的结构体
varvar name string = "John"定义一个名为 name 的变量
chanch := make(chan int)创建一个新的整数类型的通道
interfacetype Writer interface { Write([]byte) error }定义一个名为 Writer 的接口
mapm := map[string]int{"one": 1}创建一个键为字符串、值为整数的映射
structtype Circle struct { Radius float64 }定义一个名为 Circle 的结构体
breakif x > 0 { break }如果 x > 0,则跳出循环
casecase "apple": fmt.Println("It's an apple")switch 语句中,定义一个 case
continueif x < 0 { continue }如果 x < 0,则跳过当前循环迭代
defaultdefault: fmt.Println("It's default")switch 语句中,定义一个默认 case
elseif x > 0 { /*...*/ } else { /*...*/ }if 语句的否定分支
fallthroughcase 1: fallthroughswitch 语句中,强制执行下一个 case
forfor i := 0; i < 10; i++ { /*...*/ }循环10次
gotogoto myLabel跳转到 myLabel 标签(不推荐)
ifif x > 0 { /*...*/ }条件为 x > 0 时,执行某个操作
rangefor k, v := range m { /*...*/ }遍历映射 m
returnreturn x + y从函数中返回 x + y
selectselect { case <-ch: /*...*/}多路通道选择
switchswitch x { case 1: /*...*/ }多分支选择
deferdefer fmt.Println("bye")延迟执行 fmt.Println("bye") 直到函数退出
gogo 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动态数组,可以在运行时更改大小。
MapcolorMap键值对的集合。
ChannelmsgChannel用于在Goroutine之间发送和接收数据。
fmt用于组织和复用代码,通常包含函数、变量、常量等。
别名type MyInt int用于给现有类型创建一个新名字。
枚举enum Status一组命名的整数常量。
Goroutinego doSomething()并发执行的函数。
标签LOOP:用于控制流语句,如breakcontinue
空标识符_用于忽略不需要的值。
导出标识符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:用于循环,这里是一个无限循环。
  • ifelse:用于条件判断。
  • switchcasedefault:用于多条件判断。
  • break:用于跳出循环。
  • continue:用于跳过当前循环迭代。

file

关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1059896.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Aseprite像素画】如何取巧做到各种画面效果(小工具的各种技巧)

文章目录 参考链接&#xff1a;具体如下1、水中倒影2、参考图片3多个帧添加动画物品4多个帧删除动画物品5六毛钱受击效果6添加标签7导出特定标志的gif图8忽略标志帧&#xff0c;然后播放9轮廓线10多个图层轮廓线11洋葱皮12替换多个不同帧的色块簇13连接细胞14快速连续删除15冻结…

战火使命兑换码最新,战火使命礼包码

战火使命手游是一款二次元卡牌游戏&#xff0c;玩家可以通过使用兑换码来获取礼包奖励。如果你还不知道如何获取兑换码&#xff0c;下面为你提供最新的礼包码合集。 关注【娱乐天梯】&#xff0c;获取内部福利号 战火使命兑换码最新&#xff1a; 1、兑换码&#xff1a;ZHSM0421…

安装matplotlib_

安装pip 安装matplotlib 安装完毕 导入出现bug......

C++算法 —— 动态规划(10)二维费用背包

文章目录 1、动规思路简介2、一和零3、盈利计划 背包问题需要读者先明白动态规划是什么&#xff0c;理解动规的思路&#xff0c;并不能给刚接触动规的人学习。所以最好是看了之前的动规博客&#xff0c;以及两个背包博客&#xff0c;或者你本人就已经懂得动规了。 1、动规思路简…

弧度、圆弧上的点、圆的半径(r)、弧长(s)之间的关系

要计算弧度和圆弧上的点&#xff0c;需要知道以下几个要素&#xff1a; 圆的半径&#xff08;r&#xff09;&#xff1a;即圆的中心到圆周上任意一点的距离。 弧长&#xff08;s&#xff09;&#xff1a;从圆周上的一个点到另一个点所经过的弧长。 弧度&#xff08;θ&#x…

为什么Spring不建议使用基于字段的依赖注入

在我们通过IDEA编写Spring的代码的时候&#xff0c;假如我们编写了如下代码&#xff1a; IDEA会给我们一个warning警告&#xff1a; 翻阅官方文档&#xff1b;我们会发现&#xff1a; 大意就是强制依赖使用构造器注入&#xff0c;可选依赖使用setter注入那么这是为什么呢&am…

App测试时常用的adb命令你都掌握了哪些呢?

adb 全称为 Android Debug Bridge&#xff08;Android 调试桥&#xff09;&#xff0c;是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具&#xff0c;可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

【服务器】在 Linux CLI 下安装 Anaconda

【服务器】在 Linux CLI 下安装 Anaconda 1 系统环境2 下载安装包3 安装 1 系统环境 查看系统信息 cat /etc/os-release2. 查看架构 uname -a # output # Linux localhost.localdomain 4.18.0-193.28.1.el8_2.x86_64 #1 SMP Thu Oct 22 00:20:22 UTC 2020 x86_64 x86_64 x86…

4.Tensors For Beginners-Vector Definition

在上一节&#xff0c;已经了解了前向和后向转换。 什么是向量&#xff1f; 定义1&#xff1a;向量是一个数字列表 这很简洁&#xff0c;也通俗易懂。 现有两个向量&#xff1a; 如果要把这两个向量给加起来&#xff0c;只需把对应位置的元素(组件)给加起来。 而要缩放向量&…

angularjs开发环境搭建

Angularjs是一个前端页面应用开发框架&#xff0c;其使用TypeScript作为开发语言&#xff0c;Angularjs的特性包括&#xff0c;使用组件、模板以及依赖注入的开发框架构建可扩展的web应用&#xff0c;使用易于集成的类库支持页面路由、页面表单、前后端接口交互等各种不同特性&…

MySQL5.7版本与8.0版本在CentOS系统安装

目录 前置要求 1. MySQL5.7版本在CentOS系统安装 1.1 安装 1.1.1 配置yum仓库 1.1.2 使用yum安装MySQL 1.1.3 安装完成后&#xff0c;启动MySQL并配置开机自启动 1.1.4 检查MySQL的运行状态 1.2 配置 1.2.1 获取MySQL的初始密码 1.2.2 登陆MySQL数据库系统 …

Python爬取诗词名句网中三国演义的乱码问题

一、乱码问题 为解决中文乱码问题&#xff0c;可使用chardet.detect()检测文本编码格式 详细&#xff1a; Python爬虫解决中文乱码_脑子不好真君的博客-CSDN博客 二、代码 #爬取三国演义 import requests import chardet from bs4 import BeautifulSoupurlhttps://www.shicim…

【Vue3】自定义指令

除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外&#xff0c;Vue 还允许你注册自定义的指令 (Custom Directives)。 1. 生命周期钩子函数 一个自定义指令由一个包含类似组件生命周期钩子的对象来定义。钩子函数会接收到指令所绑定元素作为其参数。 在 <script …

多通道反向字典模型

方法 将单词的definition embedding输入Bi-LSTM模型&#xff0c;经过处理得到5个分数并加权求和得到最终的置信分数 最后对分数向量进行降序排序&#xff0c;得到word rank 代码实现&#xff1a; _, indices torch.sort(score, descendingTrue) 辅助信息 这是AAAI 2020的论…

【多模态融合】TransFusion学习笔记(1)

工作上主要还是以纯lidar的算法开发,部署以及系统架构设计为主。对于多模态融合(这里主要是只指Lidar和Camer的融合)这方面研究甚少。最近借助和朋友们讨论论文的契机接触了一下这方面的知识&#xff0c;起步是晚了一点&#xff0c;但好歹是开了个头。下面就借助TransFusion论文…

Scapy样例三则

1. 演示ls()/lsc()用法: ##Exec1.pyfrom scapy.all import *## 列出scapy支持的命令 def ListScapyCmd():lsc()## 列出指定协议的各个字段, 用于构成packet def ListProtocolField(protoclName):ls(protoclName)if __name__ "__main__":print("\nexample of …

【项目开发 | C语言项目 | C语言薪资管理系统】

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

网站安全防护措施

网络安全的重要性在网站和app的发展下已经被带到了全新的高度&#xff0c;已然成为各大运维人员工作里不可或缺的环节&#xff0c;重视网络安全能给我们的网站带来更好的口碑&#xff0c;也能为企业生产创造更稳定的环境。下面我们一起来看看有哪些是我们运维人员能够做的。 1、…

图片批量处理:轻松实现图片批量处理:按需缩放图片像素

在日常生活和工作中&#xff0c;我们经常需要处理大量的图片。有时候&#xff0c;我们需要对图片进行一些调整&#xff0c;以满足特定的需求。其中&#xff0c;缩放图片像素是一项非常常见的操作。但是&#xff0c;一张一张地处理图片不仅费时&#xff0c;还容易出错。幸运的是…

前端笔试题总结,带答案和解析(二)

前端笔试题总结&#xff0c;带答案和解析&#xff08;二&#xff09; 上一期&#xff1a; 前端笔试题总结&#xff0c;带答案和解析&#xff08;1&#xff09; 11.以下代码的执行后&#xff0c;str 的值是&#xff1a; var str "Hellllo world"; str str.replac…