Golang 常见规范

Golang 常见规范

一、代码规范

1.1 包引入(import package)

// 建议使用标准库包、 项目内部包、第三方包的顺序引入包
import (
	// 标准库包
	"io"
	"net"
	"net/http"
	
	// 项目内部包
	conf "xxxxxx/Conf"
	udp  "xxxxxx/Udp"
	
	// github 第三方包
	"github.com/gin-gonic/gin"
)

1.2 变量、函数

// 全局变量, 变量名以驼峰命名法定义。如有其他包调用,首字母大写。包内调用,首字母避免大写
// 常量,驼峰命名法,首字母大写
var (
	boolValue []bool
	intValue []int

	uint32Value []uint32
	float32Value []float32
 	float64Value []float64
)

const(
	Length = 1
	Name = "a"
)

// 函数,函数名以驼峰命名法定义。如有其他包调用,首字母大写。包内调用,首字母避免大写
// 函数形参,相同类型使的形参 用同一个类型声明
// 函数输出,避免给类型赋名
func TestInit(a, b bool) error {
	// 如无全局变量纠缠(局部变量),使用 := 方式定义变量。首字母小写、驼峰
	boolValue := true
	BoolValue = make([]bool, 0, 10)
	BoolValue = append(BoolValue, []bool{a, b, boolValue, testBool()}...)
	return nil
}

func testBool() bool {
	return true
}

1.3 结构体定义 struct

// 结构体的申明和初始化采用多行
// 建议按照数据类型的大小,从小到大排序
// 结构体,驼峰命名,如有其他包调用,结构体名称首字母大写。包内调用,首字母避免大写
// 结构体成员, 驼峰命名,如有其他包调用,成员名称首字母大写,包内调用,避免首字母大写
type ClientTest struct {
	mu             	sync.Mutex		// 互斥锁
	ConnRemotePort 	int         	// 远端(服务端)端口号
	ConnType 		string      	// 链接类型 VCI PMM OHP
	HeartbeatCtr 	int64       	// 心跳计数
	Interval       	uint32      	// 数据间隔时长
	Conn    		*net.UDPConn 	// UDP链接
	Timer 			*time.Timer  	// 定时计数器
	WsMessageChan  	chan []byte 	// websocket 消息管道
	RegisterMessageChan  map[uint]*RegisterMessageChan  // 注册消息管道
}

1.4 文件名

// 文件名称可以用下划线区分,尽量避免
// 如果采用下划线命名,注意避免和下面特定用法冲突
1. 测试单元命名 _test.go
client_test.go
2. 系统相关文件
_386.go、_amd64.go、_arm.go、_arm64.go、_android.go、_darwin.go、
_dragonfly.go、_freebsd.go、_linux.go、_nacl.go、_netbsd.go、
_openbsd.go、_plan9.go、_solaris.go、_windows.go、_android_386.go、
_android_amd64.go、_android_arm.go、_android_arm64.go、_darwin_386.go、
_darwin_amd64.go、_darwin_arm.go、_darwin_arm64.go、_dragonfly_amd64.go、
_freebsd_386.go、_freebsd_amd64.go、_freebsd_arm.go、_linux_386.go、
_linux_amd64.go、_linux_arm.go、_linux_arm64.go、_linux_mips64.go、
_linux_mips64le.go、_linux_ppc64.go、_linux_ppc64le.go、_linux_s390x.go、
_nacl_386.go、_nacl_amd64p32.go、_nacl_arm.go、_netbsd_386.go、
_netbsd_amd64.go、_netbsd_arm.go、_openbsd_386.go、_openbsd_amd64.go、
_openbsd_arm.go、_plan9_386.go、_plan9_amd64.go、_plan9_arm.go、
_solaris_amd64.go、_windows_386.go、_windows_amd64.go

二、注释规范

2.1 包注释

// @Title  io.go
// @Description  定义io接口
// @Author  Go Team (2006/01/02 15:04:05)
// @Update  Gongsr-cn (2021/09/26 19:00:00)
package io

2.2 结构体注释(同 接口注释)

// ClientTest
// @Name 客户端测试
// @Description 把 udp 链接以及该链接的配置封装成一个ClientTest结构体对象
type ClientTest struct {
	Mu             	sync.Mutex		// 互斥锁
	ConnRemotePort 	int         	// 远端(服务端)端口号
	ConnType 		string      	// 链接类型 VCI PMM OHP
	HeartbeatCtr 	int64       	// 心跳计数
	Interval       	uint32      	// 数据间隔时长
	Conn    		*net.UDPConn 	// UDP链接
	Timer 			*time.Timer  	// 定时计数器
	WsMessageChan  	chan []byte 	// websocket 消息管道
	RegisterMessageChan  map[uint]*RegisterMessageChan  // 注册消息管道
}

2.3 函数注释

// DeCodeByProto
// @Description 字节流数据按照proto解码成proto.Message
// @Parameter port int 端口号
// @Parameter bytes []byte 字节流数据
// @Return proto.Message protoc.Message 数据 
// @Return error 错误信息
func DeCodeByProto(port int, bytes []byte) (proto.Message, error) {
	/*函数内部以功能分块*/

	// 数据帧头四字节信息
	header := bytes[:4]
	length := bytesToUint16(header[1:3])
	msgTypeCode := bytesToUint8(header[3:4])

	// 通过端口号区分数据解码流向
	msgBody := bytes[4:length+4]
	switch(port) {
	case 9000, 9010, 9020:
		return byteToProtoMsgWithVCI(conf.VCIMessage[msgTypeCode], msgBody)
	case 9030, 9040:
		return byteToProtoMsgWithPMM(conf.VCIMessage[msgTypeCode], msgBody)
	case 9030, 9050:
		return byteToProtoMsgWithOHP(conf.VCIMessage[msgTypeCode], msgBody)
	}
	
	return nil, errors.New("don't use bed prot")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
golang开发规范pdf是指一份关于使用Go语言进行开发的规范的电子文档。这份规范的目的是为了提高团队开发效率、代码质量和维护性,确保项目的一致性和可扩展性。 在golang开发规范pdf中,通常会包含以下几个方面的内容: 1. 项目结构:定义项目的目录结构,包括如何组织代码文件、测试文件和配置文件等。这样可以使整个项目更加清晰、易于理解和维护。 2. 命名约定:定义变量、函数、类型和包等的命名规范。良好的命名规范可以增加代码的可读性,并且有助于其他开发人员更好地理解代码。 3. 代码风格: 指定代码缩进、换行、注释、命名等细节。统一的代码风格可以减少开发人员之间的沟通障碍,提高代码的可读性和可维护性。 4. 错误处理:明确规定如何处理错误,使用错误码还是异常处理,以及如何记录错误信息。规范的错误处理可以增加代码的健壮性,降低系统的崩溃风险。 5. 并发处理:定义并发编程的规范,包括使用goroutine、channel和锁等的最佳实践。良好的并发处理规范可以避免死锁和竞态条件等问题,提高系统的性能和稳定性。 6. 单元测试:指导如何编写单元测试,包括测试用例的组织方式、覆盖率要求以及测试结果的处理等。规范的单元测试有助于发现代码的潜在问题,并且可以提供一种自动化验证代码正确性的手段。 7. 文档编写:规范文档的编写方式,包括文档结构、格式规范和文档的更新机制等。清晰、详尽的文档可以减少沟通成本,提高项目的文档管理效率。 通过遵循golang开发规范pdf,开发人员可以更加高效、一致地进行开发,减少出错和重复的工作。此外,规范的开发还有助于多人协作和后期维护,提高整个项目的质量和可持续性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值