盺昕 發表於 2020-3-11 22:45:00

Go语言命名规范

<h4><span style="font-size: 16px">一、变量命名规范</span></h4>
<p><span style="font-size: 16px">&nbsp; &nbsp;&nbsp;</span>变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有全部大写或小写。例子:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">var apiClient
var URLString</pre>
</div>
<p><strong><span style="font-size: 16px">二、常量命名规范</span></strong></p>
<p><span style="font-size: 16px">&nbsp; &nbsp; 同变量规则,力求语义表达完整清楚,不要嫌名字长。<br>&nbsp; &nbsp; 如果模块复杂,为避免混淆,可按功能统一定义在package下的一个文件中。</span></p>
<pre class="brush:python;gutter:true;">const todayNews = "Hello"

// 如果超过了一个常量应该用括号的方法来组织

const (
systemName = "What"
sysVal = "dasdsada"
)</pre>
<p><strong><span style="font-size: 16px">三、接口命名规范</span></strong></p>
<p><span style="font-size: 14px">&nbsp; &nbsp; 单个函数的接口名以 er 为后缀</span></p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">type Reader interface {
    Read(p []byte) (n int, err error)
}
两个函数的接口名综合两个函数名,如:

type WriteFlusher interface {
    Write([]byte) (int, error)
    Flush() error
}
三个以上函数的接口名类似于结构体名,如:

type Car interface {
    Start()
    Stop()
    Drive()
}</pre>
</div>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">四、结构体命名规范</span></strong></p>
<p><span style="font-size: 14px">&nbsp; &nbsp; 结构体名应该是名词或名词短语,如Account,Book,避免使用Manager这样的。</span>如果该数据结构需要序列化,如json, 则首字母大写, 包括里面的字段。</p>
<p><strong><span style="font-size: 16px">五、receiver命名规范</span></strong></p>
<p><span style="font-size: 14px">&nbsp; &nbsp; golang 中存在receiver 的概念</span>&nbsp;Receiver 的名称应该缩写,应该尽量保持一致, 避免this, super,等其他语言的一些语义关键字如下</p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">type A struct{}

func (a *A) methodA() {
}
func (a *A) methodB() {
a.methodA()
}</pre>
</div>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">六、函数/方法命名规范</span></strong></p>
<p>&nbsp;</p>
<p>由于Golang的特殊性(用大小写来控制函数的可见性),除特殊的性能测试与单元测试函数之外, 都应该遵循如下原则</p>
<p>&nbsp;</p>
<ol>
<li>采用驼峰式。将功能及必要的参数体现在名字中, 不要嫌长, 如updateById,getUserInfo.</li>
<li>如果包外不需要访问请用小写开头的函数</li>
<li>如果需要暴露出去给包外访问需要使用大写开头的函数名称</li>
</ol>
<p>&nbsp;</p>
<p>一个典型的函数命名方法如下:</p>
<p>&nbsp;</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">// 注释一律使用双斜线, 对象暴露的方法
func (*fileDao) AddFile(file *model.File) bool {
result := db.NewRecord(*file)
if result {
   db.Create(file)
}
return result
}

// 不需要给包外访问的函数如下
func removeCommaAndQuote(content string) string {
re, _ := regexp.Compile("[\\`\\,]+")
return strings.TrimSpace(re.ReplaceAllString(content, ""))
}</pre>
</div>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">七、注释命名规范</span></strong></p>
<p>&nbsp;</p>
<p>每个包都应该有一个包注释,位于 package 之前。如果同一个包有多个文件,只需要在一个文件中编写即可;如果你想在每个文件中的头部加上注释,需要在版权注释和 Package前面加一个空行,否则版权注释会作为Package的注释。如:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package net</pre>
</div>
<p>&nbsp;</p>
<p>每个以大写字母开头(即可以导出)的方法应该有注释,且以该函数名开头。如:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">// Get 会响应对应路由转发过来的 get 请求
func (c *Controller) Get() {
    ...
}</pre>
</div>
<p>&nbsp;</p>
<p>大写字母开头的方法以为着是可供调用的公共方法,如果你的方法想只在本包内掉用,请以小写字母开发。如:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:python;gutter:true;">func (c *Controller) curl() {
    ...
}</pre>
</div>
<p>&nbsp;</p>
<p>注释应该用一个完整的句子,注释的第一个单词应该是要注释的指示符,以便在 godoc 中容易查找。</p>
<p>&nbsp;</p>
<p>注释应该以一个句点 . 结束。</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: 16px">八、package命名规范</span></strong></p>
<p><span style="font-size: 14px">&nbsp; &nbsp; 包名用小写,使用短命名,尽量和标准库不要冲突。</span>包名统一使用单数形式。</p>
<h4><span style="font-size: 16px">九、文件命名规范&nbsp;</span></h4>
<p>&nbsp; &nbsp; 由于文件跟包无任何关系, 而又避免windows大小写的问题,所以推荐的文件规范如下:</p>
<p>&nbsp; &nbsp; 文件名应一律使用小写, 不同单词之间用下划线分割, 不用驼峰式,命名应尽可能地见名知意。尽量见名思义,看见文件名就可以知道这个文件下的大概内容.其中测试文件以_test.go结尾,除测试文件外,命名不出现_。</p>
<p>&nbsp;</p>

</div>
<div id="MySignature" role="contentinfo">
    <div style="border-bottom: #e0e0e0 1px dashed; border-left: #e0e0e0 1px dashed; padding: 10px; font-family: 微软雅黑; font-size: 11px; border-top: #e0e0e0 1px dashed; border-right: #e0e0e0 1px dashed;overflow: hidden;" id="PSignature">
<div style="float: left; width: 10%">
   <img src="https://www.cnblogs.com/images/cnblogs_com/zhangyafei/1378866/o_o_Warning.png" style="width: 70px; height: 70px">
</div>
<div style="float: left; width: 90%; padding-top: 10px">
作者:张亚飞 <br>
出处:https://www.cnblogs.com/zhangyafei <br>
gitee:https://gitee.com/zhangyafeii <br>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。<br>
</div>
</div><br><br>
来源:https://www.cnblogs.com/zhangyafei/p/12466162.html
頁: [1]
查看完整版本: Go语言命名规范