优秀的命名

优秀的命名应当是一贯的、短小的、精确的。
所谓一贯,就是说同一个意义在不同的环境下的命名应当一致,譬如依赖关系,不要在一个方法中命名为depend,另一个方法中命名为rely。
所谓短小,不必多言,当命名过长的时候,读者可能更关注命名本身,而忽视真正的逻辑内容。
所谓精确,就是命名达意、易于理解

首条经验

声明位置与使用位置越远,则命名应当越长。

骆驼命名法

Go语言应该使用 MixedCase
(不要使用 names_with_underscores)
首字母缩写词都应该用大写,譬如ServeHTTPsceneIDCIDRProcessor

局部变量

局部变量应当尽可能短小,譬如使用buf指代buffer,使用i指代index
在很长的函数中可能会有很多的变量,这个时候可以适当使用一些长名字。
但是写出这么长的函数,通常意味着代码需要重构了!??‍

参数

函数的参数和局部变量类似,但是它们默认还具有文档的功能
当参数类型具有描述性的时候,参数名就应该尽可能短小:

func AfterFunc(d Duration, f func()) *Timer
func Escape(w io.Writer, s []byte)

当参数类型比较模糊的时候,参数名就应当具有文档的功能:

返回值

在Go语言中,返回值可以定义名称的,它可以当做一种特殊的参数。
尤其重要的是,在外部可见的函数中,返回值的名称应当可以作为文档参考。

方法接收者(Receiver)

方法接收者也是一种特殊的参数。Go语言中没有明显的面向对象的概念,可以对方法定义方法接收者来实现类似于对象的方法的概念。

按照惯例,由于方法接收者在函数内部经常出现,因此它经常采用一两个字母来标识方法接收者的类型。

func (b *Buffer) Read(p []byte) (n int, err error)
func (sh serverHandler) ServeHTTP(rw ResponseWriter, req *Request)
func (r Rectangle) Size() Point

需要注意的是,方法接收者的名字在同一类型的不同方法中应该保持统一,这也是前文所述的一贯性的需求。

导出包级别命名

导出名被使用的时候通常是放在包名后
所以,在导出变量、常数、函数和类型的时候,
不要把包名的意义再写一遍

比较好的名字
bytes.Buffer strings.Reader

比较蠢的名字
bytes.ByteBuffer strings.StringReader

接口类型

只含有一个方法的接口类型通常以函数名加上er后缀作为名字

type Reader interface {
Read(p []byte) (n int, err error)
}

有时候可能导致蹩脚的英文,但别管他,能看懂就好

type Execer interface {
Exec(p []byte) (n int, err error)
}

有时候可以适当调整一下英文单词的顺序,增加可读性:

type ByteReader interface {
ReadByte(p []byte) (n int, err error)
}

当接口含有多个方法的时候,还是要选取一个能够精准描述接口目的的名字,譬如net.Connhttp/ResponseWriter

Error的命名

Error类型应该写成FooError的形式

type ExitError struct {
....
}

Error变量协程ErrFoo的形式

包的命名

应当与它导出代码的内容相关,避免utilcommon这种宽泛的命名

引入路径

包路径的最后一个单词应该和包名一致

包路径应该尽可能简洁

记得把库的主要代码直接放在代码库的根目录

避免在包路径中使用任何大写字母(并非所有文件系统都区分大小写)

标准库

上述很多例子都是从标准库中来的

标准库的很多内容都可以作为参考
多看看标准库来寻求灵感吧

但是要记住:

当作者写标准库的时候,他们自己也在学习过程中。
多数情况下作者是对的,但是偶尔还是会犯一些错误

var ErrFormat = errors.New("unknown format")
func Copy(dst Writer, src Reader) (written int64, err error)
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte,
err error)
func Unix(sec, nsec int64) Time
func HasPrefix(s, prefix []byte) bool

转载于:https://www.cnblogs.com/zhangboyu/p/01fb1e0fc19c02e3f6460ebbb6dd61c8.html

Go-技篇第二 命名规范相关推荐

  1. 前端系统化学习【JS篇】:(三)Javascript中的命名规范

    前言 细阅此文章大概需要 4分钟\color{red}{4分钟}4分钟左右 本篇中讲述了: JS中的命名规范 如果有任何问题都可以留言给我,我看到了就会回复,如果我解决不了也可以一起探讨.学习.如果认 ...

  2. Java 命名规范(非常全)

    欢迎关注方志朋的博客,回复"666"获面试宝典 在本文中,将从大到小,从外到内,总结Java编程中的命名规范.文中将会涉及到日常工作中常见的命名示例,如包命名,类命名,接口命名,方 ...

  3. Java 命名规范(非常全面)

    来源:https://www.ramostear.com/blog/2020/03/20/2vxdaqjq.html 最近发现很多初级程序员写代码时很不规范,比如方法名 类名 等,如果遇到有代码洁癖的 ...

  4. Go 指针,标识符命名规范及关键字

    #### Go 指针,标识符命名规范,关键字,运算符回顾了一下之前写的文章,以及考虑到后期的内容较多, 从这篇开始逐渐增加文章内容; 这篇我们主要学习一Go 中的指针,标识符关键字以及运算符##### ...

  5. java标识符定义_Java标识符命名规范

    无论是哪一种计算机语言,都少不了标识符的存在.Java零基础的朋友们想要学好java语言,在基础阶段就要学习java标识符的内容,其中java标识符命名规范是不可缺少的重点知识,下面这篇文章带零基础的 ...

  6. FPGA知识汇集-值得收藏的FPGA代码命名规范?

    命名规范 随者FPGA设计的日益复杂,设计实践.方法和流程逐渐成为重要的成功因素.良好的设计能有效影响FPGA设计的性能和逻辑利用,使系统可靠性显著提高,产品可以更快投入到市场.相反,不良的设计可能会 ...

  7. java的标示符规则与名称命名规范

    1.在讲java标示符的规则之前我给大家介绍下什么是标示符 标示符: ->java对各种变量.方法和类等要素命名时使用的字符序列称为标示符. ->凡是自己可以起名字的地方都叫标示符. 定义 ...

  8. Java命名规范--阿呆

    最近发现很多初级程序员写代码时很不规范,比如方法名 类名 等,如果遇到有代码洁癖的领导肯定会被骂(什么垃圾代码),下面分享一篇不错的规范文章 在本文中,将从大到小,从外到内,总结Java编程中的命名规 ...

  9. 软件项目、产品版本号的命名规则、定义、命名规范(git代码分支版本、项目产品文档版本)

    文章目录 前言 一.关于对项目.产品版本的一些学习探索 问题:大家都是怎么样定义版本号的?(参考资料) 二.我在团队中是这是实践的 团队版本号实践 总结 前言 工作几年了,最近在总结项目.产品版本号命 ...

最新文章

  1. Jenkins使用遇到的问题总结
  2. Logstash在Linux上安装部署
  3. linux文件属性 -rwxr-xrw,Linux文件属性
  4. 深入Python(5):递归
  5. 2016.NET Core相关内容回顾
  6. 8月23号刚刚发布的 Flink 1.9 到底优化了哪些功能?
  7. Rocky4.2下安装达梦(DM)6数据库
  8. vb.net word 自定义工具栏_Word|用这20个技巧办公从此告别龟速工作
  9. iOS开发之抓包工具的Charles的初步安装使用:一步一步教你学会抓包工具Charles的使用(下载破解+代理设置+证书配置)
  10. EXP-00091: Exporting questionable statistics.问题解决!(转)
  11. 关于开发板不断eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 eth0: link down的问题
  12. 【金融财经】金融市场一周简报(2017-08-25)
  13. mysql slave_pending_jobs_size_max_3分钟解决MySQL 1864 主从错误
  14. 小象学院数据分析笔记:绘制常见的图形
  15. OpenCV的Rect矩形类简介和使用
  16. ei会议论文录用但不参加会议_同一个EI会议录用的文章一定全部都进EI吗?
  17. 海南信用社计算机试题,2018海南农村信用社考试 计算机 模拟试卷六答案
  18. 否打开人工智能的“黑箱”?
  19. 矩阵与矩阵的乘法运算
  20. 给你心爱的 npm 包上个『北京户口』

热门文章

  1. 系统学习 TypeScript(五)——联合类型
  2. c语言如果调用的函数没有return,C语言中,整型函数若在调用时未获得return值,此时其值是如何确定的?...
  3. IIS URL Rewriting 和 ASP.NET routing(下)
  4. window 服务(三)
  5. thinkphp5 return 返回空_杨丞琳演唱会意外踩空,从两层楼高的舞台掉落,李荣浩心疼发文...
  6. 关于GDAL计算图像坐标的几个问题
  7. 在C#中获取如PHP函数time()一样的时间戳
  8. C# WinForm绘图相关
  9. 企业微信应用设置可信域名_怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制?...
  10. 【java学习之路】(java SE篇)009.IO