前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 编码规范建议——风格篇

Go 编码规范建议——风格篇

作者头像
恋喵大鲤鱼
发布2021-12-06 11:10:55
1.3K0
发布2021-12-06 11:10:55
举报
文章被收录于专栏:C/C++基础

文章目录

1.格式化

代码必须用 gofmt 格式化。

2.代码行

行长度

一行代码不要超过120列,超过的情况,使用合理的换行方法换行。

例外场景:

  • import 模块语句
  • struct tag
  • 工具生成代码

换行方式

采用惰性换行,换行前应尽可能的占满不留空位。

代码语言:javascript
复制
// Bad
fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n",
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,89, 144, 233)

// Good
fmt.Printf("%v %v %v %v %v %v %v %v %v %v %v %v %v %v\n", 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
89, 144, 233)

不必要的空行

  • 函数体第一行不要换行。
代码语言:javascript
复制
// Bad
func foo() {

	// func body
}

// Good
func foo() {
	// func body
}
  • 函数调用和对调用结果的处理,是紧密相连的,不能加空行
代码语言:javascript
复制
// Bad
res, err := foo()

if err != nil || res.Ret != 0 {
	return
}

// Good
res, err := foo()
if err != nil || res.Ret != 0 {
	return
}
  • return 语句前不要换行
代码语言:javascript
复制
// Bad
func foo() {
	// func body
	
	return
}

// Good
func foo() {
	// func body
	return
}

3.括号和空格

  • 遵循 gofmt 的逻辑。
  • 运算符和操作数之间要留空格。
  • 作为输入参数或者数组下标时,运算符和运算数之间不需要空格,紧凑展示。
代码语言:javascript
复制
var f float64 = 0.2 + 0.8 // 运算符和操作数之间要留空格
fmt.Printf("%f\n", f+1)   // a+1 作为入参不要留空格
  • 不必要的括号
代码语言:javascript
复制
// Bad
if foo && (int(bar) > 0) {
	// ...
}

// Good
if foo && int(bar) > 0 {
	// ...
}

4.字符串

使用反引号表示原始字符串字面值,避免转义

代码语言:javascript
复制
// Bad
wantError := "unknown name:\"test\""

// Good
wantError := `unknown error:"test"`

5.import 规范

  • 使用 goimports 自动格式化引入的包名,import 规范原则上以 goimports 规则为准
  • goimports 会自动把依赖包按首字母排序,并对包进行分组管理,通过空行隔开,默认分为本地包(标准库、内部包)和外部包
  • 包采用四段式组织,从上到下分别是标准库,外部包,匿名包和内部包
  • 带域名的包名都属于外部包,如 github.com/xxx/xxx
  • 匿名包的引用建议使用一个新的分组引入,并在匿名包上写上注释说明
  • 内部包是指不能被外部 import 的包
代码语言:javascript
复制
import (
    // standard package
    "encoding/json"
    "strings"
    
    // third-party package
    "git.obc.im/obc/utils"
    "git.obc.im/dep/beego"
    "git.obc.im/dep/mysql"
    elastic "github.com/olivere/elastic/v7"

    // anonymous package
    // import filesystem storage driver
    _ "git.code.oa.com/org/repo/pkg/storage/filesystem

	// inner package
    "myproject/models"
    "myproject/controller"
)
  • 不要使用相对路径引入包,应该使用完整的路径引入包:
代码语言:javascript
复制
// 不要采用这种方式
import (
    "../net"
)

// 应该采用完整路径引入包
import (
    "xxxx.com/proj/net"
)
  • 包名和 git 路径名不一致时,或者多个相同包名冲突时,使用别名代替:
代码语言:javascript
复制
import (
	elastic "github.com/olivere/elastic/v7"
)

参考文献

github.com/uber-go/guide

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.格式化
  • 2.代码行
    • 行长度
      • 换行方式
        • 不必要的空行
        • 3.括号和空格
        • 4.字符串
        • 5.import 规范
        • 参考文献
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档