原文链接:https://golang.org/doc/effective_go.html

Introduction

  Go是一种新兴的编程语言。虽然它借鉴了现有语言的思想,但它具有不同寻常的特性,使得高效的Go程序与其他语言编写的程序大不相同。将C ++或Java程序直接转换为Go不太可能产生令人满意的结果 - Java程序是用Java编写的,而不是Go。另一方面,从Go语言的角度思考问题可能会产生一个成功但完全不同的程序。换句话说,要写好Go,了解它的特性和语法是很重要的。了解Go中编程的既定约定也很重要,例如命名,格式化,程序构造等,这样你编写的程序将很容易让其他Go程序员理解。

  该文档提供了编写清晰,常用的Go代码的技巧。 Language specificationTour of GoHow to Write Go Code,这些都应该先阅读。

Formatting(格式化)

  格式化问题是最具争议性但最不重要的问题。人们可以适应不同的格式化风格,但如果不是勉强去适应代码风格,那就更好了,如果每个人都遵循相同的风格,那么关注在格式化上的时间就会减少。问题在于如何能够长期在没有规定风格的情况下达到这个理想的情况。

  使用Go,我们采取了一种不寻常的方法,让机器处理大多数格式问题。gofmt程序(也可作为go fmt,在包级别而不是源文件级别运行)读取Go程序并以标准样式的缩进和垂直对齐方式格式化源代码,并在必要时重新格式化注释。如果你想知道如何处理一些新的布局情况,请运行gofmt;如果结果似乎不正确,重新整理你的程序(或提交有关gofmt的错误),不必纠结于此。

  例如,没有必要花时间排列结构体中字段的注释。Gofmt会去做的。给出结构体的声明:

type T struct {
name string // name of the object
value int // its value
}

  gofmt会格式化为:

type T struct {
name string // name of the object
value int // its value
}

  标准包中的所有Go代码都已经使用gofmt格式化过了。一些格式细节仍然存在,非常简短:

  1. 缩进:我们使用tab进行缩进,gofmt默认使用的就是tab。仅在必要时使用空格。
  2. 每行的长度:Go中对每行的长度没有限制,别担心打孔卡不够长。如果一行实在太长,可以换行然后使用tab进行缩进。
  3. 括号:Go中的括号要比C和Java少,控制结构(if,for,switch)的语法中没有括号。此外,运算符优先级层次更短更清晰,因此在x<<8 + y<<16中间距说明了优先级,这与其他语言是不同的。

Commentary(注释)

  Go中支持C语言风格的/* */分段注释和C++风格的//行注释。通常使用的是行注释;段注释主要用在package的注释,但在表达式中或禁用大量代码时很有用。

  程序和Web服务器-godoc处理Go源文件以提取有关package内容的文档。出现在声明之前的注释(注释与声明之间没有插入新的行)将与声明一起提取,作为项目的解释性文本。这些注释的风格决定了godoc产生文档的质量。

  每个package在最开始都应该有一个段注释。对于多文件package,package注释只需要写在一个文件中,任何一个都可以。package的注释应该介绍package,并提供与整个package相关的信息。它将首先出现在godoc页面上,应该建立如下所示的详细文档。

/*
Package regexp implements a simple library for regular expressions. The syntax of the regular expressions accepted is: regexp:
concatenation { '|' concatenation }
concatenation:
{ closure }
closure:
term [ '*' | '+' | '?' ]
term:
'^'
'$'
'.'
character
'[' [ '^' ] character-ranges ']'
'(' regexp ')'
*/
package regexp

  如果package很简单,那么package的注释可以很简短。

// Package path implements utility routines for
// manipulating slash-separated filename paths.

  

Names(命名)

Semicolons(分号)

Effective Go中文版(更新中)的更多相关文章

  1. Effective C#中文版

    我看的书是<Effective C#中文版——改善C#程序的50种方法>,Bill Wagner著,李建忠译.书比较老了,04年写的,主要针对C#1.0,但我相信其中的观点现在仍有价值.( ...

  2. 容器使用的12条军规——《Effective+STL中文版》试读

    容器使用的12条军规——<Effective+STL中文版>试读     还 记的自己早年在学校学习c++的时候,老师根本就没有讲STL,导致了自己后来跟人说 起会C++的时候总是被鄙视, ...

  3. Effective STL中文版 译序

    <Effective STL中文版>译序 就像本书的前两本姊妹作(Effective C++.More Effective C++)一样,本书的侧重点仍然在于提升读者的经验,只不过这次将焦 ...

  4. 《Effective STL中文版》前言

    <Effective STL中文版>前言     我第一次写关于STL(Standard Template Library,标准模板库)的介绍是在1995 年,当时我在More Effec ...

  5. Effective STL 中文版(大全)

    Effective STL 中文版(大全) 作者:winter 候捷说,对于STL,程序员有三个境界,开始是使用STL,然后是理解STL,最后是补充STL.Effective STL是一本非常好的书, ...

  6. 《Effective Java中文版第二版》读书笔记

    说明 这里是阅读<Effective Java中文版第二版>的读书笔记,这里会记录一些个人感觉稍微有些重要的内容,方便以后查阅,可能会因为个人实力原因导致理解有误,若有发现欢迎指出.一些个 ...

  7. GitHub 上优秀的开源SLAM repo (更新中)

    GitHub 上优秀的开源SLAM repo (更新中) 欢迎 watch/star/fork 我们的 GitHub 仓库: Awesome-SLAM, 或者follow 项目的主页:Awesome- ...

  8. 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY

    正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade   随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...

  9. git常用命令(持续更新中)

    git常用命令(持续更新中) 本地仓库操作git int                                 初始化本地仓库git add .                       ...

  10. Atom使用记录(持续更新中)

    部分内容取自:http://www.jianshu.com/p/dd97cbb3c22d,我自己也在使用,持续更新中 Atom安装插件在窗口中File---Setting---install 在里面进 ...

随机推荐

  1. 用go写爬虫服务并发请求,限制并发数

    java写爬虫服务,思路是线程池,任务队列,限制并行线程数即可. go要用另一种设计思路,不能在线程层面限制,协程的异步请求,如果不作处理,并行发出所有网络请求,因网络请求数过多,会抛出异常 低版本的 ...

  2. HttpClient系统日志配置

    详细介绍在:http://hc.apache.org/httpclient-3.x/logging.html 一般使用context logging基本够用,context logging解释原文如下 ...

  3. JVM组成与作用

    class loader 类加载器:加载类文件到内存.Class loader只管加载,只要符合文件结构就加载,至于能否运行,它不负责,那是有Exectution Engine 负责的.exectio ...

  4. android greendao的外部封装不太友好。

    https://github.com/greenrobot/greenDAO 下载下官网的示例,有完整的封装版本,但自已封装是碰到很多问题. 因greenDao的Master和Session中很多方法 ...

  5. 转-web自动化测试,定位不到元素的原因及解决方案

    1.动态id定位不到元素 分析原因:每次打开页面,ID都会变化.用ID去找元素,每次刷新页面ID都会发生变化. 解决方案:推荐使用xpath的相对路径方法或者cssSelector查找到该元素. 2. ...

  6. [Redis] Redis哨兵模式部署 - zz胖的博客

    1. 部署Redis集群 redis的安装及配置参考[redis部署] 本文以创建一主二从的集群为例. 1.1 部署与配置 先创建sentinel目录,在该目录下创建8000,8001,8002三个以 ...

  7. 20180105关于课题所用的labview的改进随笔

    在原有的工程上1.写入60个不同的数字~顶层,看测量次数是1.2.3.4.5.6.7.8.9的时候文件记到几次的数,一次的话,从接受命令到全部写到文件最短需要等多久.写入固定的数,通过startfla ...

  8. 关于使用gitlab协同开发提交代码步骤

    记录使用gitlab协同开发时从自己的分支向master分支提交代码的步骤: 环境:安装了git和TortoiseGit(git的可视化工具) 1.首先切换到自己的分支(如果不在自己的分支) 2.gi ...

  9. HBase完全分布式集群搭建

    HBase完全分布式集群搭建 hbase和hadoop一样也分为单机版,伪分布式版和完全分布式集群版,此文介绍如何搭建完全分布式集群环境搭建.hbase依赖于hadoop环境,搭建habase之前首先 ...

  10. 转:ZABBIX监控H3C设备的CPU和内存使用率

      由于最近监控的H3C路由器经常出现死机现象,SNMP获取不到数据,后面检查发现是CPU使用率过高,直接导致无法处理SNMP请求,所以需求来了,怎样通过SNMP监控H3C路由器的CPU和内存使用率? ...