Go编码规范

Go官方编码规范

命名

  • 对于文件名,应一律小写,不同单词之间用下划线分隔
  • 对于变量,采用驼峰命名法。专有名词大小写要一致,例:可以 URLurl ,而不要 Url 。变量名应该尽可能短,尤其是局部变量。对于一些特殊的变量以及全局变量,可能需要对它有更多的描述,可以使用长命名
  • 对于interface,名字应以er结尾,优先使用标准库中已经存在的接口
  • 对于结构体,注意字段的导出性,首字母大写的字段可导出
    Getter: obj.Xxx()
    Setter: obj.SetXxx(xxx type)
  • 对于接收者,不应该采用 me、this、self等通用的名字,而应该采用简短的(1或2个字符)并且能反映出结构体名字的命名,而且同一结构体的接收者名字要保持一致
  • 对于url,应仅包含小写字母,例:/name/get,而不要 /getName
  • 对于post请求中的表单的key,采用下划线命名法
  • 对于json数据,key采用下划线命名法,值的类型根据实际情况选择,而不要一律字符串

变量声明

  • 对于结构体,在声明时即初始化各个字段的值
//推荐
stu := Student{
		Name: "AcTarjan"
	}
	
//不推荐
stu := Student{}
stu.Name = "AcTarjan"
  • 声明空数组切片
//推荐,不会为arr分配内存,arr = nil
var arr []string

//不推荐,这样会为arr分配内存
arr := []string{}

接收者类型

  • 接收者:方法的调用者
  • 万能的建议:如果你不知道要使用哪种传递时,请选择指针传递吧!
  • 建议使用指针传递的情况:
    当函数内部需要修改接受者,必须使用指针传递。
    当接受者是一个结构体,并且包含了sync.Mutex或者类似的用于同步的成员。避免成员拷贝。
    当接受者类型是一个庞大的结构体或者是一个大数组,以此提高性能。
    当接受者是结构体,数组或slice,并且其中的元素是指针,并且函数内部可能修改这些元素,这能使得函数的语义更加明确。
  • 建议使用值传递的情况:
    当接受者是map, chan, func,因为它们本身就是引用类型。
    当接受者是slice,而函数内部不会对slice进行切片或者重新分配空间。
    当接受者是小型结构体,小数组,并且不需要修改里面的元素,里面的元素又是一些基础类型

参数传递

  • 一般情况下,传递值而不是指针
    不要为了节省一点空间就传递指针而不是传递值。除非要传递的是一个庞大的结构体或者可预知在将来会变得非常庞大的结构体,指针是一个不错的选择。
  • 需要对参数进行修改并且调用者需要使用这些修改时,传递指针

指针相关

//正常,虽然 arr = nil,但这个切片存在,即 &arr != nil
var arr []string
err := json.Unmarshal(bs,&arr)

//出错,arr是指针,arr = nil,即这个切片不存在
var arr *[]string
err := json.Unmarshal(bs,arr)

错误信息

  • 错误信息应全部为小写字母

日志打印

  • 只打印关键结点的INFO级日志
  • 只在调用者处理error的时候的打印日志
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值