# Effective Go - 1
Date: 2021-03-07


#### **格式化**

为了减少格式化问题带来的争议， 可以使用 gofmt程序对源码进行格式化。

```
gofmt -w .\src\ch1\main\hello_world.go
```

 

#### **注释**

每个包都应有一个_**P**_**_ackage comment_ 包注释**， 对于多文件程序包，程序包注释仅需要出现在一个文件中，任何一个都可以。 注释中应介绍介绍并包整体功能及有关的信息。

**_Doc comment_文档注释**最好作为完整的句子使用，它可以进行各种各样的自动演示。 第一句应为单句摘要，以声明的名称开头。

_**`go doc`**_ 工具会从 Go 程序和包文件中提取注释以并生成相关文档。

_**godoc**_ 可以启动本地web服务

```
godoc -http=:12345 -goroot f:\\go\\gotest
```

浏览器输入http://127.0.0.1:12345， 即可查看本地f:\\go\\gotest由注释生成的文档。

 

#### **命名**

_**包名；**_当一个包被导入后，包名就会成了内容的访问器。按照惯例， 包应当以**小写单词**来命名，且不应使用下划线或驼峰记法。如　_import "bytes"，_　如果包名发生冲突可以使用别名方式来解决

另外就是包名应为其_**源码目录**_的名称。如：_src/pkg/encoding/base64_ 中的包应作为 _"encoding/base64"_

包的导入者可_**通过包名来引用其内容**_，避免冲突，bufio.Reader 不会与 io.Reader 发生冲突

_**Getters**_　go不自动支持getter和setter， 有个名为 owner 的字段，其getter应当名为 Owner（大写，可导出）而非 GetOwner， sett而没有这方面约定

```
owner := obj.Owner()
if owner != user {
    obj.SetOwner(user)
}
```

_**接口，**_ 包含一个方法的接口应当以该方法的名称加上 **_\-er_** 后缀来命名，如 Reader、Writer、 Formatter、CloseNotifier 等。不要用Read、Write、Close、Flush、 String 等请不要用这些名称为自己的方法命名。

_**书写格式，** **MixedCaps or mixedCaps**_ 首字母大写或小写的驼峰记法，而不是用下划线链接。

 

#### **参考及引用**

图片来自 twitter Ines B @moraimauy

https://golang.org/doc/effective\_go

