Go语言基础1 - 代码风格和代码格式化

概述

我们将用几节来学习Go语言基础,本文结构如下:

格式化
  注释
  命名
  包名
  获取器
  接口名
  驼峰记法
  分号

格式化

格式化问题总是充满了争议,但却始终没有形成统一的定论。在Go中我们另辟蹊径,让机器来处理大部分的格式化问题。
gofmt 程序(也可用 go fmt,它以包为处理对象而非源文件)将Go程序按照标准风格缩进、 对齐,保留注释并在需要时重新格式化。
举例来说,你无需花时间将结构体中的字段注释对齐,gofmt 将为你代劳。 假如有以下声明:

type T struct {
      name string // 对象名
  value int // 对象值
}

gofmt 执行后,会将它按列对齐为:

type T struct {
  name    string // 对象名
  value   int    // 对象值
}

缩进

我们使用制表符(tab)缩进,gofmt 默认也使用它。在你认为确实有必要时再使用空格。

行的长度

Go对行的长度没有限制,也可进行折行并插入适当的tab缩进。

括号

Go所需的括号更少:控制结构(if、for 和 switch)在语法上并不需要圆括号。

注释

godoc 程序,既是一个程序,又是一个Web服务器,它对Go的源码进行处理,并提取包中的文档内容。

每个包都应包含一段包注释,即放置在包子句前的一个块注释。像下面这样

/*
这里是包的注释
*/
package yourpackage

在程序中,每个可导出(首字母大写)的名称都应该有文档注释。

文档注释最好是完整的句子,这样它才能适应各种自动化的展示。 第一句应当以被声明的东西开头,并且是单句的摘要。

// Compile 用于解析正则表达式并返回.....
func Compile(str string) (regexp *Regexp, err error) {

命名

请选择有语义的名字

包名

按照惯例, 包应当以小写的单个单词来命名,且不应使用下划线或驼峰记法。err 的命名就是出于简短考虑的,因为任何使用该包的人都会键入该名称。 不必担心引用次序的冲突。

另一个约定就是包名应为其源码目录的基本名称。在 src/pkg/encoding/base64 中的包应作为 "encoding/base64" 导入,其包名应为 base64, 而非 encoding_base64 或 encodingBase64。

清楚而简洁的名称。

  • 例如,bufio 包中的缓存读取器类型叫做 Reader 而非 BufReader,因为用户将它看做 bufio.Reader,这是个清楚而简洁的名称。
  • 用于创建 ring.Ring 的新实例的函数一般会称之为 NewRing,但由于 Ring 是该包所导出的唯一类型,简单就是 ring.New。
  • 另一个简短的例子是 once.Do,once.Do(setup) 表述足够清晰, 使用 once.DoOrWaitUntilDone(setup) 完全就是画蛇添足。
  • 长命名并不会使其更具可读性。一份有用的说明文档通常比额外的长名更有价值。

获取器 (get, set )的名字

Go并不对获取器(getter)和设置器(setter)提供自动支持。 你应当自己提供获取器和设置器。若你有个名为 owner (小写)字段,其获取器应当名为 Owner(大写)而非 GetOwner。设置器 SetOwner 是个不错的选择。

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

接口名

按照约定,只包含一个方法的接口应当以该方法的名称加上-er后缀或类似的修饰来构造一个施动着名词,如 Reader、Writer、 Formatter、CloseNotifier 等。

请将字符串转换方法命名为 String 而非 ToString。

驼峰记法

Go中约定使用驼峰记法 MixedCaps 或 mixedCaps。

分号

Go的正式语法使用分号来结束语句;但是这些分号并不在源码中出现。 词法分析器会使用一条简单的规则来自动插入分号,因此因此源码中基本就不用写分号了。

警告:if、for、switch 或 select 的左大括号放在同一行,而不是放在下一行。如果这样做,就会在大括号前面插入一个分号,你应该这样写

if i < f() {
      g()
  }

而不是这样

if i < f()  // 错!
{           // 错!
    g()
}

END

发布了256 篇原创文章 · 获赞 7 · 访问量 9万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览