Go语言学习技巧之命名规范

2019-11-10 11:18:49王旭

前言

本篇主要讲述Go语言的命名规范。优秀的代码必须具备良好的可读性,而可读性的关键即在于命名风格。

Go的函数、变量、常量、自定义类型、包(Package)的命名方式遵循以下规则:

      1)首字符可以是任意的Unicode字符或者下划线

      2)剩余字符可以是Unicode字符、下划线、数字

      3)字符长度不限

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

优秀的命名

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

首条经验

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

骆驼命名法

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

局部变量

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

参数

函数的参数和局部变量类似,但是它们默认还具有文档的功能

当参数类型具有描述性的时候,参数名就应该尽可能短小:

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

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

func Unix(sec, nsec int64) Time
func HasPrefix(s, prefix []byte) bool

返回值

在Go语言中,返回值可以定义名称的,它可以当做一种特殊的参数。

尤其重要的是,在外部可见的函数中,返回值的名称应当可以作为文档参考。

func Copy(dst Writer, src Reader) (written int64, err error)
func ScanBytes(data []byte, atEOF bool) (advance int, token []byte,
 err error)

方法接收者(Receiver)

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

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