美文网首页
Go语言基础1 - 代码风格和代码格式化

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

作者: 张云飞Vir | 来源:发表于2020-03-10 15:26 被阅读0次

    概述

    我们将用几节来学习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

    相关文章

      网友评论

          本文标题:Go语言基础1 - 代码风格和代码格式化

          本文链接:https://www.haomeiwen.com/subject/ayzidhtx.html