教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 go 编程规范

go 编程规范

发布时间:2021-12-08   编辑:jiaochengji.com
教程集为您提供go 编程规范等资源,欢迎您收藏本站,我们将为您提供最新的go 编程规范资源

参考https://www.cnblogs.com/liang1101/p/7719762.html

Go 语言编程规范

<h3>1. gofmt 命令</h3>

  大部分的格式问题可以通过 gofmt 来解决,gofmt 自动格式化代码,保证所有的 go 代码与官方推荐的格式保持一致,所有格式有关问题,都以gofmt的结果为准。所以,建议在提交代码库之前先运行一下这个命令。

<h3>2. 行长</h3>

  一行最长不超过80个字符,超过的使用换行展示,尽量保持格式优雅。

<h3>3. 注释</h3>

  在编码阶段应该同步写好 变量、函数、包 的注释,最后可以利用 godoc 命令导出文档。注释必须是完整的句子,句子的结尾应该用句号作为结尾(英文句号)。注释推荐用英文,可以在写代码过程中锻炼英文的阅读和书写能力。而且用英文不会出现各种编码的问题。

  每个包都应该有一个包注释,一个位于 package 子句之前的块注释或行注释。包如果有多个 go 文件,只需要出现在一个 go 文件中即可。

<pre><span style="color:#008000;">  //</span><span style="color:#008000;"> ping包实现了常用的ping相关的函数</span>   package ping </pre>
<h3>4. 命名</h3> <ul><li>需要注释来补充的命名就不算是好命名。</li><li>使用可搜索的名称:单字母名称和数字常量很难从一大堆文字中搜索出来。单字母名称仅适用于短方法中的本地变量,名称长短应与其作用域相对应。若变量或常量可能在代码中多处使用,则应赋其以便于搜索的名称。</li><li>做有意义的区分:Product 和 ProductInfo 和 ProductData 没有区别,NameString 和 Name 没有区别,要区分名称,就要以读者能鉴别不同之处的方式来区分 。</li><li>函数命名规则:驼峰式命名,名字可以长但是得把功能,必要的参数描述清楚,函数名应当是<span style="color:#993300;">动词</span>或<span style="color:#993300;">动词短语</span>,如 postPayment、deletePage、save。并依 Javabean 标准加上 get、set、is前缀。例如:xxx With 需要的参数名 And 需要的参数名 …..</li><li>结构体命名规则:结构体名应该是名词或名词短语,如 Custome、WikiPage、Account、AddressParser,避免使用 Manager、Processor、Data、Info、这样的类名,类名不应当是动词。</li><li>包名命名规则:包名应该为小写单词,不要使用下划线或者混合大小写。</li><li>接口命名规则:单个函数的接口名以”er”作为后缀,如 Reader,Writer。接口的实现则去掉“er”。</li></ul>
<span class="cnblogs_code_copy"></span>
<pre>  type Reader <span style="color:#0000ff;">interface</span><span style="color:#000000;"> { Read(p []</span><span style="color:#0000ff;">byte</span>) (n <span style="color:#0000ff;">int</span><span style="color:#000000;">, err error)   }   </span><span style="color:#008000;">//</span><span style="color:#008000;"> 多个函数接口</span>   type WriteFlusher <span style="color:#0000ff;">interface</span><span style="color:#000000;"> {   Write([]</span><span style="color:#0000ff;">byte</span>) (<span style="color:#0000ff;">int</span><span style="color:#000000;">, error)   Flush() error   }</span></pre>
<span class="cnblogs_code_copy"></span>
<h3>5. 常量</h3>

  常量均需使用全部大写字母组成,并使用下划线分词:

<pre><span style="color:#0000ff;">  const</span> APP_VER = <span style="color:#800000;">"</span><span style="color:#800000;">1.0</span><span style="color:#800000;">"</span></pre>

  如果是枚举类型的常量,需要先创建相应类型:

<pre>  type Scheme <span style="color:#0000ff;">string</span>   <span style="color:#0000ff;">const</span><span style="color:#000000;"> (    HTTP Scheme </span>= <span style="color:#800000;">"</span><span style="color:#800000;">http</span><span style="color:#800000;">"</span><span style="color:#000000;">   HTTPS Scheme </span>= <span style="color:#800000;">"</span><span style="color:#800000;">https</span><span style="color:#800000;">"   )</span></pre>
<h3>6. 变量</h3>

  变量命名基本上遵循相应的英文表达或简写,在相对简单的环境(对象数量少、针对性强)中,可以将一些名称由完整单词简写为单个字母,例如:

<ul><li><ul><li>user 可以简写为 u</li><li>userID 可以简写 uid</li><li>若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头:</li></ul></li></ul>
<pre><span style="color:#0000ff;">  var</span> isExist <span style="color:#0000ff;">bool</span>   <span style="color:#0000ff;">var</span> hasConflict <span style="color:#0000ff;">bool</span>   <span style="color:#0000ff;">var</span> canManage <span style="color:#0000ff;">bool</span>   <span style="color:#0000ff;">var</span> allowGitHook <span style="color:#0000ff;">bool</span></pre>
<h3>7. 变量命名惯例</h3>

  变量名称一般遵循驼峰法,但遇到特有名词时,需要遵循以下规则:

<ul><li>如果变量为私有,且特有名词为首个单词,则使用小写,如:apiClient</li><li>其它情况都应当使用该名词原有的写法,如 APIClient、repoID、UserID</li><li>错误示例:UrlArray,应该写成 urlArray 或者 URLArray</li></ul>

  下面列举了一些常见的特有名词:

<pre><span style="color:#800000;">  "</span><span style="color:#800000;">API</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">ASCII</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">CPU</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">CSS</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">DNS</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">EOF</span><span style="color:#800000;">"</span>,GUID<span style="color:#800000;">"</span><span style="color:#800000;">,</span><span style="color:#800000;">"</span>HTML<span style="color:#800000;">"</span><span style="color:#800000;">,</span><span style="color:#800000;">"</span>HTTP<span style="color:#800000;">"</span><span style="color:#800000;">,</span><span style="color:#800000;">"</span>HTTPS<span style="color:#800000;">"</span><span style="color:#800000;">,</span><span style="color:#800000;">"</span>ID<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">IP<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">JSON<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">LHS<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">QPS<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">RAM<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">RHS<span style="color:#800000;">"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>   <span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;"><span style="color:#800000;">"<span style="color:#800000;">RPC<span style="color:#800000;">"</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>, </span><span style="color:#800000;">"</span><span style="color:#800000;">SLA</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">SMTP</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">SSH</span><span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">TLS<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">TTL<span style="color:#800000;">",</span></span></span></span></span></span></span><span style="color:#800000;">"</span><span style="color:#800000;">UI</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">UID</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">UUID</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">URI</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">URL</span><span style="color:#800000;">"</span>, <span style="color:#800000;">"</span><span style="color:#800000;">UTF8</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">VM</span><span style="color:#800000;">"</span>,<span style="color:#800000;">"</span><span style="color:#800000;">XML</span><span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">XSRF<span style="color:#800000;">",<span style="color:#800000;">"<span style="color:#800000;">XSS<span style="color:#800000;">"</span></span></span></span></span></span></span> </pre>
<h3>8. struct规范</h3>

  struct申明和初始化格式采用多行,定义如下:

<pre>  type User <span style="color:#0000ff;">struct</span><span style="color:#000000;">{   Username </span><span style="color:#0000ff;">string</span><span style="color:#000000;">   Email </span><span style="color:#0000ff;">string</span><span style="color:#000000;">   }</span></pre>

  初始化如下:

<pre>  u :=<span style="color:#000000;"> User{    Username: </span><span style="color:#800000;">"</span><span style="color:#800000;">test</span><span style="color:#800000;">"</span><span style="color:#000000;">,   Email: </span><span style="color:#800000;">"</span><span style="color:#800000;">test@gmail.com</span><span style="color:#800000;">"</span><span style="color:#000000;">,   }</span></pre>
<h3>9. panic</h3>

  尽量不要使用panic,除非你知道你在做什么

<h3>10. import</h3>

  对 import 的包进行分组管理,用换行符分割,而且标准库作为分组的第一组。如果你的包引入了三种类型的包,标准库包,程序内部包,第三方包,建议采用如下方式进行组织你的包

<span class="cnblogs_code_copy"></span>
<pre><span style="color:#000000;">package main import ( </span><span style="color:#800000;">"</span><span style="color:#800000;">fmt</span><span style="color:#800000;">"</span> <span style="color:#800000;">"</span><span style="color:#800000;">os</span><span style="color:#800000;">"</span> <span style="color:#800000;">"</span><span style="color:#800000;">kmg/a</span><span style="color:#800000;">"</span> <span style="color:#800000;">"</span><span style="color:#800000;">kmg/b</span><span style="color:#800000;">"</span> <span style="color:#800000;">"</span><span style="color:#800000;">code.google.com/a</span><span style="color:#800000;">"</span> <span style="color:#800000;">"</span><span style="color:#800000;">github.com/b</span><span style="color:#800000;">"</span><span style="color:#000000;"> )</span></pre>
<span class="cnblogs_code_copy"></span>

  goimports 会自动帮你格式化

<h3>11. 参数传递</h3> <ul><li>对于少量数据,不要传递指针</li><li>对于大量数据的 struct 可以考虑使用指针</li><li>传入的参数是 map,slice,chan 不要传递指针,因为 map,slice,chan 是引用类型,不需要传递指针的指针</li></ul><h3>12. 单元测试</h3>

  单元测试文件名命名规范:

     example_test.go

  测试用例的函数名称必须以 Test 开头,例如:

    func TestExample


到此这篇关于“go 编程规范”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Go 零基础编程入门教程
Go语言学习3----Go语言特色
go run main.go 参数_Go语言入门:Hello world
go比php好在哪里
Effective Go
一分钟系列: Go 编程之用时定义
Golang基础入门01 | 简介
Golang学习笔记(五):Go语言与C语言的区别
Go语言的主要特性和发展影响
GoImports安装使用(修正 go import包的规范)

[关闭]
~ ~