最近儿子在看《啦咘啦哆警长》这个动画片,主题曲一响就是gogogogo啦咘啦多,此时此刻我竟然第一时间想到了GO语言,GO语言对我来说印象深刻。为什么会印象深刻呢?下面我一一道来,都是比较直观的感受。
奔跑的啦咘啦哆警长,像GO语言一样运行和发展都飞快
一、内存篇
我第一份工作接触C语言,那时刚入职时,接手维护了一份C语言代码,指针满天飞,malloc一片内存后,最后都不知道把指针传到哪里去了,释放没释放不知道。有严重的内存泄漏,8G内存运行起来不到30分钟要得重启程序了。也不知道在我接手前他们怎么使用这套程序的。
最终费了九牛二虎之力,通过检测工具valgrind和c++map把申请和释放的内存地址映射起来,申请和释放都打上标记,最后找出来申请了没有释放的内存。内存泄漏就控制住了。后来与领导一商量就使用c++对这个代码重构了。这里也提倡一下,c/c++里面在写函数和方法时如果需要要申请内存传到外面,一定要写注释让使用者及时把内存释放。或者使用特殊手段借c++的构造和析构这一对函数来保证只要能执行到析构就保证释放内存。
扯得有点远了,想说啥呢?就是GO的内存是自带垃圾回收,开发者不需要关心内存申请和释放了,这就大大减小了入门的门槛。虽然GO中也有指针,但是是安全的,开发者只管使用就好了。
二、并发篇
2.1锁与channel
没有接触到GO时,凡是有并发必定是要加锁的。因为涉及到临界资源(竞争资源),所以不加锁就会造成访问错误得不到正确结果,严重时内存崩溃。
GO有一句至理名言:"Don’t