【Golang】Golang语言编程规范

golang 编程规范 - Effective Go 中文 Go 是一门全新的语言。尽管它从现有的语言中借鉴了许多思想,但其与众不同的特性,使得用 Go 编程在本质上就不同于其它语言。将现有的 C++ 或 Java 程序直译为 Go 程序并不能令人满意 —— 毕竟 Java 程序是用 Java 编写的,而不是 Go。另一方面,若从 Go 的角度去分析问题,你就能编写出同样可行但大不相同的程序。换句话说,要想将 Go 程序写得好,就必须理解其特性和风格。了解命名格式化程序结构等既定规则也同样重要,这样你编写的程序才能更容易被其他程序员所理解。 阅读详情

一.说明

  1. 编程规范好,可避免语言陷阱,可有利团队协作,有利项目维护。

  2. 正常的Go编程规范有两种:编译器强制的(必须的),gofmt格式化非强制的(非必须)。

  3. Go宣告支持驼峰命名法,排斥下划线法。

  4. 自定义原则:

    • 统一工作区间,避免目录及文件名随意
    • 规范变量/结构体/方法及接口名
    • 规范注释
    • 单元测试/程序效率等建议

两个等级: (S)建议,(M)必须。以下是细节。

二.代码组织结构

  1. (M)一个目录只包含一个包,模块复杂拆分子模块/子目录

  2. (S)内部项目GOPATH如果指向多个工作目录。公开项目为第一个工作区间(即go get默认下载到第一个目录)

  3. (M)非测试文件(*_test.go)禁止使用,简化包

  4. (M)禁止相对路径导入包

  5. (S)建议goimports或者IDE管理import

  6. (S)项目rep需要包含所有的代码,依赖库放在vendor下

  7. (S)建议使用Golide,Godep管理第三方包

总而言之:组织结构需要简化,一目了然,允许多个工作区间,但是环境变量的第一个工作区间必须是公开的项目,最好使用一个工作区间,不要建立相对路径的包,最好用godep等依赖库控制工具来管理依赖库,每个项目所有的依赖库最好放在本目录vendor下。

三.代码风格

  1. (M)提交代码时gofmt格式化代码,golint检查代码(使用IDE时默认这两个工具会自动用到)

  2. (S)json字符串建议使用反单引号(`)

  3. (M)文件名必须小写,允许下划线’_’,但头尾不能。避免与_test.go或者系统相关_386.go等冲突

  4. (S)文件名以功能为指引,不需要再出现模块名

  5. (M)目录名必须小写,允许中划线’-’,但头尾不能

  6. (S)不建议目录名出现下划线’_’

  7. (M)包名必须全部小写,无下划线,越短越好,尽量不要与标准库重名,禁止通过中划线连接多个单词

  8. (S)包名尽量与目录名一致

  9. (M) 函数名和结构体名必须为大小写驼峰模式,最好不带特殊字符如划线等

  10. (S)函数名建议动词或者动宾结构单词,结构体建议名词或者动名词

  11. (S)常量和枚举名,大小写驼峰法,不允许下划线,第三方包例外

  12. (M)函数参数首字母小写,不能有下划线,按大小驼峰法

  13. (S)函数参数按紧密程度安排位置,同类型参数应该相邻

  14. (S)参数不大于5个

  15. (M)变量名不允许下划线,大小写驼峰法,局部变量首字母小写,全局变量首字母大写

  16. (S)避免全局变量多使用,for循环可用单字母

  17. (M)接口名大小写驼峰法,首字母大写,不能下划线,名词

  18. (S)接口名’er’结尾

  19. (M)复杂功能请多写注释备注,注释表达需清晰,不要啰嗦。注释标准暂时不强制,最好参考godoc,如包注释使用/**/,首字母大写,注释后空一行,函数注释写在函数上方等。

总而言之,文件名和目录名,包名都必须小写。数据类型变量和参数等定义最好使用驼峰大小写法,不要使用下划线或者中划线

四. 单元测试/程序效率

  1. (S)建议少使用main方法测试,而是使用_test.go做测试

  2. (M)与其他语言类似,避免多级if或者for嵌用,代码层次需简单,绕脑层次少

  3. (M)避免傻逼命名,如IsTrue变量,if(!IsTrue)

  4. (M)请熟悉Go语言各特征,避免低效用法。请至少阅览一遍:

    # 拉镜像
    docker pull hunterhug/gotourzh
    
    # 前台运行
    docker run -it -p 9999:9999 hunterhug/gotourzh
    
    # 后台运行(类似nohup)
    docker run -d -p 9999:9999 hunterhug/gotourzh
    

    打开http://127.0.0.1:9999 学习即可!

参考

Golang语言编程规范

Uber Go 语言编程规范 Uber Go 语言编程规范 相信很多人前两天都看到 Uber 在 github 上面开源的 Go 语言编程规范了,原文在这里:https://github.com/uber-go/guide/blob/master/style.md 。我们今天就来简单了解一下国外大厂都是如何来写代码的。行文仓促,错误之处,多多指正。另外如果觉得还不错,也欢迎分享给更多的人。 文章目录Uber Go 语言编程规范... 阅读详情

相关推荐

GoLang 代码编程规范

两周之前—— 爬虫的原理就不细说了,无非是通过种子URL来顺藤摸瓜,爬取出网站关联的所有的子网页,存入自己的网页库当中。 但是,这其中涉及到一个小小的问题…… URL去重方案第一版:HashSet 创建一个HashSet集合,把每一个URL字符串作为HashSet的key插入到...

JineD的博客 610

golang 代码编写规范

这些是更多的Go代码编写规范的例子,它们有助于编写一致、易读和高质量的Go代码。请记住,良好的编码规范能够提高代码的可维护性和可读性,促进团队协作和代码质量的提高。方法接收器命名:当为方法定义接收器时,接收器的名称应该是接收器类型名称的第一个字母小写的驼峰形式。函数和方法:函数和方法的定义应具有清晰的命名和一致的参数顺序。包名:Go语言中的包名应具有简洁、有意义的命名,避免使用过于通用的名称。代码重构:定期进行代码重构,删除不必要的代码、提取可复用的函数和方法、优化性能等,以保持代码的可维护性和可读性。

彩色代码的博客 846

4. 编程规范和编程安全指南--go语言

目录 1 通用类 I. 代码实现 1.1 内存管理 1.2 文件操作 1.3 系统接口 1.4 通信安全 1.5 敏感数据保护 1.6 加密解密 1.7 正则表达式 2 后台类 I. 代码实现 1.1 输入校验 1.2 SQL操作 1.3 网络请求 1.4 服务器端渲染 1.5 Web跨域 1.6 响应输出 1.7 会话管理 1.8 访问控制 1.9 并发保护 通用类 1. 代码实现类 1.1 内存管理 1.1.1【必须】切片长度校验 在对slice进行操作...

踟蹰横渡口,彳亍上滩舟。 5705

Golang 开发规范

分享一个全网最全的Go语言项目开发规范。

分享 Go、云原生、AI Infra 相关技术 2654

逆向分析美团外卖mtgsig3.0签名算法:从抓包到算法还原实战

在移动应用开发与安全领域,API接口签名是保障数据传输完整性与身份验证的核心机制。其基本原理是通过特定的算法,将请求参数、时间戳等数据与密钥结合,生成唯一的签名串,服务器通过验证签名来识别请求的合法性。这项技术的核心价值在于防止数据篡改、重放攻击和未授权访问,是构建安全客户端-服务器通信的基石。在实际应用中,签名算法广泛应用于电商、社交、金融等各类App的接口保护场景。本文以美团外卖App的mtgsig3.0签名为具体案例,详细拆解了其生成逻辑。通过结合Frida动态调试与Jadx静态分析,文章深入探讨了如

weixin_29325515的博客 1243

SAP农产品增值税进项税解决方案

(三)购进农产品用于生产经营且不构成货物实体的(包括包装物、辅助材料、燃料、低值易耗品等),用于生产适用13%税率货物的扣除率为10%,用于生产适用9%税率货物的扣除率为9%。具体计算公式为: 当期允许抵扣农产品增值税进项税额=当期耗用农产品数量×农产品平均购买单价×扣除率/(1+9%)

weixin_44228539的博客 1196

golang编程规范

当在一个较窄的范围内声明了一个与外部变量同名的变量,就会发生变量的影子化,此举可能导致意外的行为。魔术值是散布在代码中各处的硬编码的数字或字符串,缺乏上下文,让人难以理解其目的。实现此目标的一种方法是尽量减少函数参数的数量,这样代码的可维护性和可读性会更高。更好的方法是将你的初始化逻辑移动到通常从主函数调用的常规函数中。通过保持函数简洁并专注于单一任务,我们维持了较低的函数复杂度,提高了代码可读性和可维护性。在 Go 中,关键是要在包和可执行文件之间保持明确的分离,以确保代码的简洁性和可维护性。

只为龙舞的博客 1643

WPS制作甘特图实操(带图超详细)

一、数据准备 图1 二、添加公式 在表格的E3处添加公式:=IF(C3>=G3,0,IF(C3+D3>=G3,G3-C3,D3)),点击该单元格的右下角。使鼠标箭头变“+”后下拉拖拽,复制该公式。F3处的公式为:=D3-E3,使用相同的拖拽方式复制公式应用,操作完毕如下图3. 图2 图3 三、插入图表 1、选中方框1内容,按住ctrl按键,继续选择2、3列的内容,点击插入全部图表中的条形图,选择2对应的图标样式,生成图6的样式。 点击图6中的3标尺,右击选择数据弹出图8,点击+号选择表格中

m0_49047167的博客 3万+

Golang语言编程规范

golang 开发规范,本文内容基本来至go-zero。也产考了其他优秀go项目的源码格式基本上和go-zero的规范一致。

weixin_43081090的博客 690

统计信号处理基础 习题解答1-1

1-1:在雷达习题中,双程延时时间的估计量具有PDF τ0~Nτ0,στ02,其中τ0是真值。假如要估计距离请提出一种估计量R,并求它的PDF。然后,确定标准偏差στ0,使得距离估计值的99%在真值的100m以内,对电磁波传播速度取c=3×108m/s。 解答: 问题1: 由于电磁波传播速度c,信号可观察的双程传播延时τ0和双程传播距离τ0满足关系: R=cτ02 因此可采用如下估计量: R=cτ02 问题2: 由于τ0满足正态分布,且: Eτ0=τ0 varτ0=στ02 那么: E

weixin_43270276的博客 2806

从 SAP BTP trial 到第一个 CPI iFlow 的实操路线图

本文介绍了如何从零开始学习SAP CPI(现称SAP Integration Suite中的Cloud Integration能力)。主要内容包括:1)明确学习边界,建议使用SAP BTP trial账号进行个人练习,注意90天有效期限制;2)理解SAP BTP账号模型层级结构(Global Account→Subaccount→Space);3)详细说明申请trial账号流程,推荐选择Singapore区域以避免兼容问题;4)指导如何检查Entitlements和Quotas,强调应专注于SAP Inte

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 166

Go 编程语言规范

Go 编程语言规范 2013年05月08日版本 简介 记号 源代码表示 字符 字母和数字 词法元素 注释 符号 分号 标识符 关键字 操作符/运算符和分隔符 整型值 浮点值 虚数值 分符值 字符串值 常量 类型 方法集 布尔类型 数值类型 字符串类型 数组类型 分片类型 结构体类型 指针类型 函数类型 接口类型 映射类型 管道类型 类型和值的性质 类型一致 转换 块 声明和作用域 标...

stephen830 4306

华为OD机试真题2025双机位A卷 C++ 实现【采购订单】

在一个采购系统中,采购申请(PR)需要经过审批后才能生成采购订单(PO)。每个PR包含商品的单价(假设相同商品的单价一定是一样的)及数量信息。系统要求对商品进行分类处理:单价高于100元的商品需要单独处理,单价低于或等于100元的相同商品可以合并到同一采购订单PO中。针对单价低于100的小额订单,如果量大可以打折购买。

MISAYAONE的博客 674

Go语言编程规范

Go语言编程规范

ZKQDZKQD的博客 1611

11、硬件工程师笔试面试——IGBT(2025版本)

IGBT的应用展望与创新趋势表明,随着电子技术的不断发展,IGBT在各个领域都有广泛的应用,如高压电力系统、交通工具、电锅炉、太阳能和风能发电系统等。FS型IGBT(场终止型绝缘栅双极晶体管)在电力传输领域的应用中,通过其独特的设计和特性,有助于确保系统的稳定性和安全性。每种器件都有其独特的优势,能够满足电力传输系统中不同的技术要求。FS型IGBT通常具有正温度系数,这意味着随着温度的升高,导通压降的主要影响因素是载流子迁移率的降低以及集电极和发射极的接触电阻的增加,有助于在高温下维持稳定的性能。

XU157303764的博客 2672

【PINN高级教程】 第1讲:函数空间与逼近理论

结论:在解决偏微分方程(PDE)时,解往往属于某个 Sobolev 空间 HsHs,其正则性受限于 PDE 的系数与边界条件;而 PINN 在训练过程中实际上是在逼近 Barron 空间中的函数。由于 Barron 空间允许高频信息的压缩,PINN 可以在参数规模较小的情况下捕捉到 PDE 解所需的细节,但其正则性保证仍然比 Sobolev 更弱。因此,在设计 PINN 时,需要通过正则化或网络结构(如残差连接、归一化层)来“逼近”Sobolev 正则性。

u012133341的博客 237

Go编程语言规范

黑人的命也是命。支持平等司法倡议。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VK6HljUQ-1615529370360)(https://golang.org/lib/godoc/images/go-logo-blue.svg)]文件资料配套该项目帮助博客玩 Go编程语言规范 版本2021年2月10日 介绍符号源代码表示人物字母和数字词汇要素评论代币分号身份标识关键字词运算符和标点符号整数文字浮点文字虚构文字符文文字字符串文字常数变数种类方法集布尔类型数值类型

Reseted的博客 1170

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Go 语言简介、编程规范与零散知识点

规范的语法:不需要符号表来解析。垃圾回收:独有垃圾回收机制。无头文件。明确的依赖。无循环依赖。常量只能是数字。int 和 int32 是两种类型。字母大小写设置可见性。任何类型都有方法。没有子类型继承。包级别初始化以及明确的初始化顺序。文件被编译到一个包里。没有数值类型转换。接口隐式实现。嵌入:不会提升到超类。方法按照函数声明。方法即函数。接口只有方法。方法通过名字匹配。没有构造函数和析构函数。postincrement(如 ++i)是状态。

woshihlf的博客 1071

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【golang】go语言编程常用规范/工具

【代码】GoLang编程常用规范/工具。

雪的期许 1207

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

华为C语言编程规范_c语言编程规范 华为,2024年最新1307页阿里Golang面试全套真题解析在互联网火了

标识符的命名规则历来是一个敏感话题,典型的命名风格如unix风格、windows风格等,从来无法达成共识。实际上,各种风格都有其优势也有其劣势,而且往往和个人的审美观有关。我们对标识符定义主要是为了让团队的代码看起来尽可能统一,有利于代码的后续阅读和修改,产品可以根据自己的实际需要指定命名风格,规范中不再做统一的规定。1、标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解尽可能给出描述性名称,不要节约空间,让别人很快理解你的代码更重要。

2401_84264692的博客 807

Go 语言编程规范建议(下)

文章目录1. 指导性原则1.1 指向 interface 的指针1.2 interface 合理性验证1.3 接收器(receiver)与接口1.4 零值 Mutex 是有效的1.5 在边界处拷贝 Slices 和 MapsSlices 和 Maps 做为入参1.6 使用 defer 释放资源1.7 Channel 的 size 要么是 1,要么是无缓冲的1.8 枚举从 1 开始1.9 使用 time 处理时间1.9.1 使用 time.Time 表达瞬时时间1.9.2 使用 time.Duration.

phantom_111的博客 1167

go语言编程规范梳理总结

go不支持循环依赖,所以我们要在package设计上多下功夫,避免多人协作开发时出现循环依赖。可以统一限定单行代码阈值,uber_go_guide中建议将行长限制为99个字符,但不做硬性限制,可以超过此限制。Go语言支持将相似的声明放在一个组内。 ❌ 👍 这同样适用于常量、变量和类型声明: ❌ 👍 仅将相关的声明放在一组。不要将不相关的声明放在一组。 ❌ 👍 分组使用的位置没有限制,例如:你可以在函数内部使用它们: ❌ 👍 4.import分组 import应该分为两组:❌ 👍 5.包名 当命名包.....

dnice的博客 1343
上一篇: 【Golang】我的第一个Golang Web程序
下一篇: 【Exception】Parameter 1 of constructor in org.springframework.boot.autoconfigure.web.servlet.error.Er
tanpenggood
博客等级 码龄9年 129粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值