文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go中变量命名规则及实例分析

2023-06-26 07:15

关注

这篇文章主要为大家分析了Go中变量命名规则及实例分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“Go中变量命名规则及实例分析”的知识吧。

命名习惯很重要

良好命名喜欢的特质

Good Name 将具有如下的特质:

经验法则

变量申明与变量使用之间越远,那么变量名字应当越长。

这也解释了,为什么 for 循环次数变量使用 i 作为遍历用的临时变量,而不是语义上更具体的 index 作为变量名。

大小写混用的变量名

我们不应该使用 names_with_underscores 作为变量名,而是 namesWithUnderscores 作为变量名。

另一方面,首字母缩略词,应当是大写,例如 ServeHTTP 以及 IDProcessor。

这被称为 MixedCase,类似于驼峰原则命名,但是专业词汇的首字母缩写均应当写成大写形式。

变量名避免冗余

变量名不是越长越好,常变量名会模糊代码功能。

常见的常量、类型组合可能使用非常简短的名字:

根据上下文,避免使用冗余的名称:

v, ok := m[k]

常变量名也许在长函数、有很多变量的函数中有帮助,但是这通常也意味着你应该重构代码。

Bad codes vs good codes

// Badfunc RuneCount(buffer []byte) int {      // runeCount -> count    runeCount := 0      // index -> i , buffer -> b    for index := 0; index < len(buffer); {        if buffer[index] < RuneSelf {            index++        } else {              // size -> n            _, size := DecodeRune(buffer[index:])            index += size        }        runeCount++    }    return runeCount}
// Goodfunc 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}

函数参数的命名

函数参数与变量名一样,都起到了文档的作用。

当函数参数的类型具有描述性时,那么函数参数名就可以简短一些:

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

当函数参数的类型语义不清,那么参数名应当更具体详细一些:

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

返回值的命名

导出函数(exported function)返回值应当仅仅出于编写文档目的进行命名。

下面是返回值命名的好例子:

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

方法 Receiver 的命名

Go 中结构体可以拥有方法,在为结构体声明方法时,结构体被称为 receiver。

按照惯例,方法接收者的命名通常为 1 个字符或者 2 个字符,因为结构体的每一个方法都将使用同一个 receiver 名称。

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

Receiver 的名称一定要确保一致性,如果结构体的 method1 使用 r 作为 receiver 名称,那么 method2 就不应当使用 rdr 作为名称。

导出 package 级别变量命名

package 级别的变量已经被 package name 限定了,因此需要注意导出变量、常量、函数、类型名的冗余问题。

例如:

导出变量名不要与 package 之间存在冗余。

接口类型

只有一个方法的接口,接口名通常简单在方法后面加上 er 来进行命令,例如:

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

有时候,上述策略会导致接口名语法不正确,但是我们仍然可以选择这么做,例如:

type Execer interface {    Exec(query string, args []Value) (Result, error)}

也有时候,我们会修改接口名,使得其符合英语语法:

type ByteReader interface {    ReadByte() (c byte, err error)}

当一个接口包含多个方法时,应当选择一个准确描述其用途的名称,例如 net.Conn,http.ResponseWriter,io.ReadWriter。

error 命名

错误类型与错误变量应当有不同的命名格式:

// 错误类型 Error typestype ExitError struct {    ...}
// 错误变量 Error valuesvar ErrFormat = errors.New("image: unknown format")

Packages 名

选择对导出的名称具有意义的包名称。

避免使用 util、common 等包名。

结论

使用短变量名

变量取名考虑上下文,避免冗余,例如函数内的局部变量考虑函数名,包导出变量考虑包名

什么是go

go是golang的简称,golang 是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言,其语法与 C语言相近,但并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能。

关于“Go中变量命名规则及实例分析”就介绍到这了,更多相关内容可以搜索编程网以前的文章,希望能够帮助大家答疑解惑,请多多支持编程网网站!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯