其中一个地方就是代码格式问题。在各大论坛、各大语言板块都充斥着括号位置、空格、缩进的

讨论,这些讨论在Go语言中都可以打住了。go fmt可以自动帮我们处理好这些问题,让我们的每

个源码文件的代码格式都是统一规范的。在实际应用中,这个特性可以大大提高团队的开发效率:

最简单的,写代码时,你再也不用在=两边,函数参数的后面等地方加上空格了,只要输入

go fmt myProject,一切问题都烟消云散。

6.只有一个的二进制可执行文件

使用过Go语言的同学,应该都知道程序编译后仅仅生成一个可执行的二进制文件,非常

方便,但是我仍然认为我们大大低估了这个语言特性的好处,特别是在项目的后续开发、维护过程

中。现在社会,网络带宽和存储设备都不再昂贵,但是部署、配置、管理、升级各种软件服务的

代价还是较为高昂的。如果大家自己管理过多个系统、集群,就会知道:升级或安装依赖库、JDK等

组件时,总会碰到特别痛苦的时候,几天的加班加点搞定一个问题都有可能!而纯Go写的程序则不

一样,不管项目处于在哪个阶段,我们需要的也仅仅是一个binary文件,对于提高生产力来说,这个

无疑是非常巨大的。

7.完善的标准测试框架

Go的测试框架是非常棒的,和其它语言不同的是:我们仅仅使用Go语言自带的标准化测试

框架,就可以很好实现各种测试功能:单元,黑盒,白盒,压力测试等等。除了标准测试外,还有很

多第三方的优秀测试框架,但是要记住的是:最好只使用一套测试框架,这样能保持项目的完整性和

一致性。就笔者的经验来看,目前的标准测试框架足够用了,如果需要单步断点可以看这里。

8.性能分析

Go语言自带标准的性能分析工具,包括CPU、内存、阻塞操作(http请求,数据库请求,

time.Sleep等)在内的都可以测量,influxdb就是利用这些工具实现了数据库的常量时间访问。

9.那么对于网上常常被喷的那些所谓的Go的‘问题’呢?

1)GC

Go语言从1.3开始,GC的改进就在持续进行中,1.5中,GC改成三色mark and

sweep后,性能得到了极大的提高,在1.6中,对于内存占用很高、对象很多的系统又进行了一

次大优化,可以说,现在的Go程序一般不存在GC问题,除非:分布式缓存、数据库、消息推送

这样海量对象的场景,这时候需要自己做好可复用对象管理、合并部分小对象、将一些小型的struct

结构定义为值类型而不是指针类型、还可以从业务层面和架构层面进行优化设计等等。

不过,虽然说不太需要担心GC问题,但是大家还是最好学习一下Go的GC原理和

内存管理,理解底层原理对于很多时候快速的定位解决问题是大有裨益的。

PS: 2016年7月7日补充,昨天看到一个使用GO作为核心语言的国外大型视频直播

网站分享了关于GC的演变史,直接说结果吧:1.2版本的时候,GC STW时间是2秒左右,到了1.6版本

再结合一些GC参数调优,达到了30-50ms的级别,目前的1.7版本由于将一些STW工作放到了并发去

执行,因此GC时间到了1m级别,整整上千倍的提升,基本上延时已经不是问题了。后续版本将进一步

改进STW问题,同时大大改善GC的吞吐率。

2)泛型

其实刚从其它语言过来时,我或多或少会在写Go代码时用到模版的思想,但是后

面发现,这样会让代码更难维护,因此,写Go代码就要用Go的哲学和思想。

写过C++代码的都知道:抽象是一把双刃剑,过度的抽象就可能存在潜在的问题。

在我看来,Go所具有的OO思想,是简洁的,是纯粹的,是组合的核心思想。

编程现在就是化繁为简,充分利用组合的思想(也是Unix程序设计提倡的思想),可

以让我们的开发模型和项目代码大大简化、返璞归真 。Go的OO思想充分体现了三位大神作者的

编程和设计功底,估计也只有Unix的作者才能写出这么完美的OO实现了!

3)GOPATH

对于新手来说,GOPATH很难理解清楚,我当时刚接触时,也是迷糊了一段时间。

现在则是混合了两种方式,第一种,在默认的GOPATH下的src中存放项目;第二种,自定义一个

临时的GOPATH,然后存放项目。后者的独立性更好,但是全局使用go build ,go test等命令时就

会有问题,比如手动导出

GOPATH才行:

mkdir sunface cd sunface-bench/ export GOPATH=$PWD go get -v github.com/otoolep/bleve-bench go install github.com/otoolep/bleve-bench/cmd/bench/. $GOPATH/bin/bench -h

10.Go语言的总结

Go从出身来看更像学院派语言,但是实际上它是彻头彻尾的工程语言,特别是它很适合

我们团队,很适合基础架构、中间件、云计算平台、PasS平台的开发,因为说它是云时代的未来第

一语言,丝毫不为过。

就我这边的项目而言,分布式日志平台、搜索系统、消息推送等项目中,避免了JVM或者

EVM的麻烦,实在是太美好了,所以,如果条件允许,我会完全选择纯Go来设计实现一个系统,也

许这种美妙只有真正深入用过的人才能体会 

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go) [外链图片转存中…(img-UgSWYfhd-1713003283562)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: