原文链接: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. confidence intervals and precision|The One-Mean z-Interval Procedure|When to Use the One-Mean z-Interval Procedure

    Confidence Intervals for One Population Mean When σ Is Known Obtaining Confidence Intervals for a Po ...

  2. Java反射的应用 --- 内省

    一.基础概念 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.Java JDK中提供了一套 API 用来访问某个属性的 getter/sette ...

  3. GitHub之初始化

    1.github上新建repository. 2.本地 mkdir git-init-demo. 3.cd git-init-demo. 4.git clone https://github.com/ ...

  4. MOOC(4)- setup和teardown函数

    import unittest class TestRequest(unittest.TestCase): @classmethod def setUpClass(cls): print(" ...

  5. spring学习笔记三:Component注解(把POJO类实例化到spring的IOC容器中)

    Component注解:把普通的POJO 类实例化到spring的IOC容器中,就是定义成<bean id="" class=""> 项目目录树: ...

  6. 三年无限流量免费随身WiFi充电宝是真的还是套路?

    一般来说大家现在看到"无限流量"."免费"等字眼,总会有一种"这是陷阱"."这是大坑"."就要黑你钱" ...

  7. The Process class relies on proc_open, which is not available on your PHP installation报错解决

    同事laravel框架开发的代码有如下错误日志 production.ERROR: The Process class relies on proc_open, which is not availa ...

  8. 关于CLOSE BY CLIENT STACK TRACE

    关于CLOSE BY CLIENT STACK TRACE 程序正常运行,数据库连接可以获取,一些列操作都可以实现,可在debug信息中总会一段时间就报如下错误: java.lang.Exceptio ...

  9. MyBatis连接MySQL8配置

    <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</a ...

  10. 腾讯入股Snap,能救“阅后即焚”的命吗?

    ​ ​   互联网社交的强大包容性,让各种社交形式都能有着较多的受众群体.普适性极广的QQ.微信."脸谱":专攻陌生人社交的陌陌:让人们发布意见的微博--当然也少不了"阅 ...