【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

CTP-API开发系列之三:柜台系统简介

综合交易平台(Comprehensive Transaction Platform,CTP)是专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。接下来分享的内容,对于期货公司的负责交易、运维同事会比较熟悉,针对CTP-API接口对接的朋友可以了解一下,在接口之上的系统是怎样的。

码上助君的专栏 6197

YOLOv8基础环境搭建cuda+anaconda+pytorch+pycharm

首先安装NVIDIA gpu的电脑安装显卡驱动,如果安装过了,或者想使用cpu的,可以跳过这一步。打开cmd,输入nvidia-smi查看GPU的CUDA版本,可以看到CUDA版本12.3,意味着只能安装小于12.3的CUDA版本。下载完成,进行安装,建议安装在非系统盘,以后会创建比较多的环境的话,剩下的默认安装即可。,需要注册一个NVIDIA账号,然后选择CUDA对应版本的cudnn即可。,以12.2.1版本举例,选好系统参数,点击下载,,以11.6版本举例,选好系统参数,点击下载,

qq_16602159的博客 2383

golang编程规范

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

只为龙舞的博客 1643

Spring Boot与Apache Ignite集成:构建高性能分布式缓存和计算平台

Apache Ignite是一个高性能的分布式内存计算平台,支持内存缓存、分布式计算、流处理和机器学习等功能。它提供了低延迟的数据访问和强大的计算能力,适用于需要高性能和可扩展性的应用。将Apache Ignite集成到Spring Boot应用中,可以显著提高应用的性能和可扩展性。Spring Boot的简单配置和Ignite的强大功能相结合,使得开发和部署更加高效。首先,创建一个新的Spring Boot项目。可以通过Spring Initializr(https://start.spring.io/)

九天的专栏 2142

Golang语言编程规范

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

weixin_43081090的博客 690

均值场博弈_平均场博弈(mean field game)

The New Big Fish Called Mean-Field Game Theory原文链接http://www.science4all.org/article/mean-field-games/​www.science4all.org主要内容在经典博弈论中,它对附近其他鱼类的行为做出反应。这是非常复杂的,因为不同的鱼类之间会有大量的相互作用。这意味着经典博弈论对应于一长串高度耦合的方程。...

weixin_34773479的博客 3682

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8264

Go 编程语言规范

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

stephen830 4306

Open3D 实现CSF布料模拟算法【2025最新版】

CSF布料模拟算法在open3d模块下的实现,博客长期更新,本文最近更新时间为:2025年1月16日。。

点云侠的博客 5746

Go语言编程规范

Go语言编程规范

ZKQDZKQD的博客 1611

AD9361功能介绍和使用

AD9361使用分数分频锁相环(PLL)来产生发射机和接收机本地振荡器(LO)频率和BB PLL。BB PLL 可用于数据转换、数字滤波器和 |/O 端口。PLL的参考时钟可以由外部振荡器或外部晶体(XO)和数字可编程片内可变电容提供,电容微调产生参考时钟频率,XO和微调电容的组合统称为DCXO。有多个天线输入的分集系统。接收链数据首先经过低噪声放大器(LNA),然后是同相(1)和正交(Q)放大器,混频器和频带整形滤波器,可将接收到的信号下变频为基带以进行数字化。时分双工(TDD)和频分双工(FDD)。。。

wangjie36的博客 1万+

【异常】OpenClaw 连接异常This site can‘t be reached 127.0.0.1 refused to connect Try: Checking the proxy

在访问OpenClaw相关服务时,浏览器提示如下异常信息,无法正常加载页面:Try:补充说明:该报错仅出现于本地访问场景(127.0.0.1为本地回环地址),涉及OpenClaw核心服务的本地连接交互,无外部网络及敏感信息泄露风险。

奶爸的编程之路,也就一周冷个三天 1484

Go编程语言规范

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

Reseted的博客 1170

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

woshihlf的博客 1071

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

雪的期许 1207

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

华为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、付费专栏及课程。

余额充值