阿里go语言代码规范,阿里巴巴 go语言
为什么阿里工程师代码写的好?看看他的代码规范就知道了
曾经与一位从阿里出来的Java工程师一起工作过一段时间,他的技术说不上非常厉害, 但是,他的代码写的的非常好,凡是他做的功能很少出现Bug 。我就很好奇,于是经常向他请教一些代码设计的原则,然后他告诉了我阿里Java手册。并且,他将这个手册进行了修改,也成为了我司Java程序员的开发手册。 这篇文章就让我们看一看这个手册中比较重要的原则。
成都创新互联公司是一家专业提供东安企业网站建设,专注与成都网站建设、成都网站设计、H5开发、小程序制作等业务。10年已为东安众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例:_name / __name / $name / name_ / name$ / name__
【强制】 类型与中括号紧挨相连来表示数组。
正例:定义整形数组 int[] arrayDemo; 反例:在 main 参数中,使用 String args[]来定义。
【强制】 POJO 类中布尔类型变量都不要加 is 前缀,否则部分框架解析会引起序列化错误。
说明:表达是与否的值采用 is_xxx 的命名方式,所以,需要在 设置从 is_xxx 到 xxx 的映射关系。
反例:定义为基本数据类型 Boolean isDeleted 的属性,它的方法也是 isDeleted(), RPC 框架在反向解 析的时候,“误以为”对应的属性名称是 deleted,导致属性获取不到,进而抛出异常。
【推荐】 在常量与变量的命名时,表示类型的名词放在词尾,以提升辨识度。
【推荐】 接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁 性,并加上有效的 Javadoc 注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定 是与接口方法相关,并且是整个应用的基础常量。
正例:接口方法签名 void commit();
接口基础常量 String COMPANY = "alibaba";
反例:接口方法定义 public abstract void f();
说明:JDK8 中接口允许有默认实现,那么这个 default 方法,是对所有实现类都有价值的默认实现。
【参考】 枚举类名带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。
说明:枚举其实就是特殊的类,域成员均为常量,且构造方法被默认强制是私有。
正例:枚举名字为 ProcessStatusEnum 的成员名称:SUCCESS / UNKNOWN_REASON。
【参考】 各层命名规约:
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如:listObjects。 3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save/insert 做前缀。
5) 删除的方法用 remove/delete 做前缀。
6) 修改的方法用 update 做前缀。
1) 数据对象:xxxDO,xxx 即为数据表名。
2) 数据传输对象:xxxDTO,xxx 为业务领域相关的名称。
3) 展示对象:xxxVO,xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
【强制】 不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
【强制】 避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析 成本,直接用类名来访问即可。
【强制】 相同参数类型,相同业务含义,才可以使用Java的可变参数,避免使用Object。
说明:可变参数必须放置在参数列表的最后。(提倡同学们尽量不用可变参数编程)
【强制】 所有整型包装类对象之间值的比较,全部使用equals方法比较。
说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在 IntegerCache.cache 产 生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数 据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断。
关于基本数据类型与包装数据类型的使用标准如下:
说明: POJO 类属性没有初值是提醒使用者在需要使用时,必须自己显式地进行赋值 ,任何 NPE 问题,或 者入库检查,都由使用者来保证。
正例:数据库的查询结果可能是 null,因为自动拆箱,用基本数据类型接收有 NPE 风险。
反例: 比如显示成交总额涨跌情况,即正负 x%,x 为基本数据类型,调用的 RPC 服务,调用不成功时, 返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线 。所以包装数据类型的 null 值,能 够表示额外的信息,如:远程调用失败,异常退出。
【强制】 POJO 类必须写 toString 方法。
使用 IDE 中的工具:source generate toString 时,如果继承了另一个 POJO 类,注意在前面加一下 super.toString。
说明: 在方法执行抛出异常时,可以直接调用 POJO 的 toString()方法打印其属性值,便于排查问题。
【强制】 关于hashCode和equals的处理,遵循如下规则:
说明:String 已覆写 hashCode 和 equals 方法,所以我们可以愉快地使用 String 对象作为 key 来使用。
【强制】 线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。
说明:线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源的开销,解决资源不足的问 题。 如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者“过度切换”的问题。
【强制】 线程池不允许使用Executors去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
以上规范在设计代码中,是比较重要的原则。如果编写代码的过程中,可以依照以上原则,那代码的可读性和可维护性将大大提升
go语言现在很重要么??
Go作为Google2009年推出的语言,其被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于 游戏 服务端的开发而言是再好不过了。
到现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
=================================
哪些大公司在使用Go语言:
1、Google
这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如: ,大家也可以在Github上 查看更多Google的Go开源项目。
2、Facebook
Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过 访问查看facebook开源的项目,比如著名的是平滑升级的grace。
3、腾讯
腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考
4、百度
目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个
5、阿里
阿里巴巴具体的项目不太清楚,不过听说其系统部门、CDN等正在招Go方面的人。
6、京东
京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。
7、小米
小米对Golang的支持,莫过于运维监控系统的开源,也就是
此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。
8、360
360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,
==================================
Go适合做什么?为何这么多人偏爱Go语言?
Go强大的开发团队
1、自由高效:组合的思想、无侵入式的接口
Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。
2、强大的标准库
这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。
3、部署方便:二进制文件、Copy部署
我相信这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。
4、简单的并发
它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。
5、稳定性
Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。
================================
我们为什么选择GO语言
选择GO语言,主要是基于两方面的考虑
1. 执行性能 缩短API的响应时长,解决批量请求访问超时的问题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能。而GO语言不一样,通过协程可以方便的实现API的并行处理,达到处理效率的最大化。 依赖Golang的高性能HTTP Server,提升系统吞吐能力,由PHP的数百级别提升到数千里甚至过万级别。
2. 开发效率 GO语言使用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建API业务逻辑。 能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。
Go语言近两年的发展速度还是非常快的,一方面Go语言有强大的行业背书,另一方面Go语言在设计时充分考虑了当前的编程环境,加强了大数据量、高并发等应用场景的处理能力,强调编程语言自身对于处理性能的追求,相信Go语言在未来大数据和人工智能相关技术逐渐落地应用的背景下,会有一个较为广阔的发展空间。
Go语言编程入门时需要注意什么
刚入门Go语言小白需要注意以下五点:
1、注意书写代码的一些规范吧,特别是注意大小写、英文标点符号区别等,在特别的位置写上注释。
2、主要是理解伪代码所描述的算法,伪代码要注意是不能直接运行的。
3、注意编译器版本与书籍上所介绍版本是否一致,也注意特殊符号,印刷版本可能与实际不一致。
4、书上的版本和当前所用的版本是否一致,有些情况下书上版本在现在来用已经过时了。
5、逻辑走通;给自己信心,其实起步阶段不难的。
名称栏目:阿里go语言代码规范,阿里巴巴 go语言
网站路径:http://scjbc.cn/article/phccoi.html