当前位置: 首页 > news >正文

小白学go基础04-命名惯例对标识符进行命名

计算机科学中只有两件难事:缓存失效和命名。

命名是编程语言的要求,但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢?Go语言的贡献者和布道师Dave Cheney给出了一个说法:“一个好笑话,如果你必须解释它,那就不好笑了。好的命名也类似。”无论哪门编程语言,良好的命名都应该遵循一些通用的原则,但就像之前提到的“语言影响思维”的假说那样,不同的编程语言会有一些个性化的命名惯例。

在gofmt的帮助下,Go语言统一了代码风格标准,Gopher再也无须为括号摆放位置、使用制表符还是空格、是否对齐赋值操作等而争论了。在这种情况下,命名成了广大Gopher为数不多可以“自由发挥”的空间。不过关于命名,Go语言也有自己期望大家共同遵循的原则。

下面将详细阐述这两个原则以及在这两个原则下的一些命名惯例。

简单且一致

对于简单,我们最直观的理解就是“短小”,但这里的简单还包含着清晰明确这一前提。

下面是Go语言中一些常见类别标识符的命名惯例。

1. 包

对于Go中的包(package),一般建议以小写形式的单个单词命名。Go标准库在这方面给我们做出了很好的示范

在这里插入图片描述

我们在给包命名时不要有是否与其他包重名的顾虑,因为在Go中,包名可以不唯一。

比如:foo项目有名为log的包,bar项目也可以有自己的名为log的包。

示例如下。

import "github.com/bigwhite/foo/log" // log.XX中的log指代github.com/ bigwhite/foo/log下的包
import barlog "github.com/bigwhite/bar/log" // barlog这个显式包名指代git

Go语言建议,包名应尽量与包导入路径(import path)的最后一个路径分段保持一致。

比如:包导入路径golang.org/x/text/encoding的最后路径分段是encoding,该路径下包名就应该为encoding。

但在实际情况中,包名与导入路径最后分段不同的也有很多。
比如:实时分布式消息队列NSQ的官方客户端包的导入路径为github.com/nsqio/go-nsq,但是该路径下面的包名却是nsq。笔者分析这主要是为了用仓库名称强调该实现是针对Go语言的,比如go-nsq的意义是这是一份Go语言实现的NSQ客户端API库,为的是与nsq-java、pynsq、rust-nsq等其他语言的客户端API进行显式区分。

此外,我们在给包命名的时候,不仅要考虑包自身的名字,还要兼顾该包导出的标识符(如变量、常量、类型、函数等)的命名。

2. 变量、类型、函数和方法

一个Go工程中包的数量是有限的,变量、类型、函数和方法的命名占据了命名工作的较大比重。

Go语言官方要求标识符命名采用驼峰命名法(CamelCase),以变量名为例,如果变量名由一个以上的词组合构成,那么这些词之间紧密相连,不使用任何连接符(如下划线)。

驼峰命名法有两种形式:

1)一种是第一个词的首字母小写,后面每个词的首字母大写,叫作“小骆峰拼写法”(lowerCamelCase),这也是在Go中最常见的标识符命名法;

2)而 第 一 个 词 的 首 字 母 以 及 后 面 每 个 词 的 首 字 母 都 大 写, 叫 作“大 驼 峰 拼 写法”(UpperCamelCase),又称“帕斯卡拼写法”(PascalCase)。

3)由于首字母大写的标识符在Go语言中被视作包导出标识符,因此只有在涉及包导出的情况下才会用到大驼峰拼写法。不过如果缩略词的首字母是大写的,那么其他字母也要保持全部大写,比如HTTP(Hypertext Transfer Protocol)、CBC(Cipher Block Chaining)等

为变量、类型、函数和方法命名时依然要以简单、短小为首要原则。

感受一下Go命名惯例带来的效果:

// 不好的命名
func RuneCount(buffer []byte) int {
runeCount := 0
for index := 0; index < len(buffer); {
if buffer[index] < RuneSelf {
index++
} else {
_, size := DecodeRune(buffer[index:])
index += size
}
runeCount++
}
return runeCount
}
// 好的命名
func RuneCount(b []byte) int {
count := 0
for i := 0; i < len(b); {
if b[i] < RuneSelf {i++
} else {
_, n := DecodeRune(b[i:])
i += n
}
count++
}
return count
}

Go语言命名惯例深受C语言的影响,这与Go语言之父有着深厚的C语言背景不无关系。

相关文章:

小白学go基础04-命名惯例对标识符进行命名

计算机科学中只有两件难事&#xff1a;缓存失效和命名。 命名是编程语言的要求&#xff0c;但是好的命名却是为了提高程序的可读性和可维护性。好的命名是什么样子的呢&#xff1f;Go语言的贡献者和布道师Dave Cheney给出了一个说法&#xff1a;“一个好笑话&#xff0c;如果你…...

使用iCloud和Shortcuts实现跨设备同步与自动化数据采集

在如今的数字时代&#xff0c;跨设备同步和自动化数据采集对于提高工作效率和便利性至关重要。苹果的iCloud和Shortcuts App为我们提供了强大的工具&#xff0c;可以实现跨设备同步和自动化数据采集的功能。本文将详细介绍如何利用iCloud和Shortcuts App实现这些功能&#xff0…...

Spring框架-基于STOMP使用Websocket

文章目录 前言一、范例演示1.注解方式2.XML方式二、可能出现错误错误: WebSocket代理中断错误: 缺少EventExecutor类错误: 缺少Publisher类错误: 缺少Scheduler类错误: WebSocket调用失败总结前言 Spring框架提供了多种WebSock消息机制,不仅包含了模拟SockJS,还提供了基…...

kafka-- 安装kafka manager及简单使用

一 、安装kafka manager 管控台&#xff1a; # 安装kafka manager 管控台&#xff1a; ## 上传 cd /usr/local/software ## 解压 unzip kafka-manager-2.0.0.2.zip -d /usr/local/ cd /usr/local/kafka-manager-2.0.0.2/conf vim /usr/local/kafka-manager-2.0.0.2/conf/appl…...

深圳-海岸城购物中心数据分析

做数据分析的时候&#xff0c;如果要对商场进行分析&#xff0c;可以从这些数据纬度进行分析&#xff0c;如下图所示&#xff1a; 截图来源于数位观察&#xff1a;https://www.swguancha.com/...

vue3 + elementplus Cannot read properties of null (reading ‘isCE‘)

使用命令行直接下载的element-plus&#xff0c;使用时会报错。 卸载掉&#xff0c;然后在项目根目录下&#xff0c;使用vue ui安装依赖&#xff0c; 即可使用...

易云维®医院后勤管理系统软件利用物联网智能网关帮助实现医院设备实现智能化、信息化管理

近年来&#xff0c;我国医院逐渐意识到医院设备信息化管理的重要性&#xff0c;逐步建立医院后勤管理系统软件&#xff0c;以提高信息化管理水平。该系统是利用数据库技术&#xff0c;为医院的中央空调、洁净空调、电梯、锅炉、医疗设备等建立电子档案&#xff0c;把设备监控、…...

c# 定期重启程序操作

1 先说说重启//这部分是转载的 一、Restart方法 System.Windows.Forms.Application.Restart();经测试发现有时候只会关闭程序&#xff0c;并不会重新启动 二、Process.Start()和Exit() System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly()…...

ps beta 2.5的妙用

1、https://pan.baidu.com/s/1CCw6RGlzEJ7TPWou8pPADQ?pwd2023 2、下载新便携版。 3、解压到c:\myapp文件夹下。 4、运行。 5、登录us账号。 6、使用智能移除。 效果如下&#xff1a; 使用滤镜。 先将C:\myApp\&#xff08;新便携版&#xff09;Adobe Photoshop (25.0.0 m22…...

IDEA无效发行版本17

IDEA无效发行版本17 idea开发工具依赖的 jdk版本 和 项目依赖的jdk版本一定要保持 一致&#xff0c;不然会报错。 setting-->build-->compiler-》javaCompiler project->structure 这个也要保持一样。 在porm.xml文件中&#xff0c;你配置jdk版本是1.8&#xff0c;这…...

Ubuntu22.04安装ROS

Ubuntu22.04安装ROS_笔记大全_设计学院 Excerpt 在安装ROS之前&#xff0c;需要先安装Ubuntu22.04操作系统。您可以从Ubuntu官网下载Ubuntu22.04的最新版本镜像文件&#xff0c;并创建一个可启动的USB。您可以参考以下步骤&#xff1a; 一、安装Ubuntu22.04操作系统 在安装ROS…...

Linux 学习笔记(2)—— 关于文件和目录

目录 1、切换目录 2、查看系统信息 3、文本的创建和编辑 3-1&#xff09;创建文件 3-2&#xff09;查看文件 3-3&#xff09;输出重定向和追加重定向 3-4&#xff09;使用 vi 编辑器编辑文件 4、文件和文件夹的处理 4-1&#xff09;对文件的处理 4-2&#xff09;查看…...

[重要] 如何在桌面上生成一个指定网址的快捷方式

方法一&#xff1a; 要在桌面上生成一个指定网址的快捷方式&#xff0c;可以按照以下步骤进行操作&#xff1a; 首先&#xff0c;打开你的浏览器&#xff0c;并确保已经访问了你想要创建快捷方式的网址。 在浏览器中&#xff0c;将鼠标悬停在地址栏上的网址上&#xff0c;然后…...

PyQt和Qt的其他绑定(如PySide)相比有什么优势和劣势?

作为一个新手&#xff0c;你可能会对PyQt和Qt的其他绑定&#xff08;如PySide&#xff09;之间的优势和劣势感到困惑。没问题&#xff0c;这很正常。我们先来谈谈优势吧。 首先&#xff0c;PyQt是由C编写的&#xff0c;因此它具有强大的跨平台支持。这意味着无论你使用的是Win…...

4K三路虚拟情景实训教学系统VR4300:实现“微课录制+课堂实训”双教学需求

如今&#xff0c;ChatGPT横空出世&#xff0c;产生了极大的破圈效应。各种AI、大模型概念风起云涌&#xff0c;给千行百业带来了极大的机遇与挑战。 4K三路虚拟情景实训教学系统VR4300基于计算机技术&#xff0c;虚拟现实技术&#xff0c;抠像合成技术&#xff0c;AI大模型等优…...

python逆向还原dnspy反编译的C#算法

dnspy反编译中的代码如下: private void method_1(byte[] byte_2, byte[] byte_3, byte[] byte_4) {...

数学建模--最短路径算法的Python实现

目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 #最短路径算法 #针对有向图的最短路径问题,我们有很多的算法能解决. """ 目前主流算法如下所示: Dijkstra算法:Dijkstra算法是一种单源最短路径算法,用于计算从起点到其它所有节点的最短…...

webpack学习(一)基本配置

webpack学习&#xff08;一&#xff09;基本配置 目录 webpack学习&#xff08;一&#xff09;基本配置 webpack简介 五大核心配置 1.入口&#xff08;entry) 2.输入&#xff08;output&#xff09; 3.加载器&#xff08;loader&#xff09; 4.插件&#xff08;plugins…...

Oracle 遍历变量游标

背景 由于我们的数据库系统中的游标特别多&#xff0c;DBA让我们优化&#xff0c;减少游标的使用。 电脑系统&#xff1a;windows数据库&#xff1a;Oracle数据库图形化界面工具&#xff1a;Toad&#xff0c;DBeaver(我測試的時候用的)记录日期&#xff1a;2023-09-04 具体实…...

C++11新特性① | C++11 常用关键字实战详解

目录 1、引言 2、C11 新增关键字详解 2.1、auto 2.2、override 2.3、final 2.4、nullptr 2.5、使用delete阻止拷贝类对象 2.6、decltype 2.7、noexcept 2.8、constexpr 2.9、static_assert VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xf…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

用docker来安装部署freeswitch记录

今天刚才测试一个callcenter的项目&#xff0c;所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...