【Go系列】初识Go语言

2019-03-26  本文已影响0人  ksoho

    写在面前,虽然Golang已经诞生10年,网络上也遍布着相关的学习文章,但鉴于学习从 听->看->写->深入理解->举一反三 这么一个的过程,所以还是督促自己把初步的认知整理成文字来加固自己的一个记忆和理解。

言归正题。

为什么会选择Go

    在上一年里,python一直是我喜欢的语言也是数据处理中首选的,包括复杂的web爬取甚至到数据可视化以及机器学习,几乎它可以做任何事情。但随着Go的成熟,越来越多的公司开始逐步改善自身架构转向Go,这驱使我学习Go的前提也思考如何将学习到的新技能如何应用到做工作中。

Go的优势

●并发与协程goroutine

    总所周知,Go有超强的并发处理能力其重要原因在于支持协程并发(协程又称微线程,比线程更轻量、开销更小,性能更高),操作起来非常简单,语言级别提供关键字(go)用于启动协程,并且在同一台机器上可以启动成千上万个协程。这里对比C#的线程开发和Go的协程实现,明显更直接、简单。这就是Go的魅力所在,以简单、高效的方式解决问题,关键字go,或许就是Go语言最重要的标志。

(其他无协程概念的语言要想完成并发编程要同时了解线程、锁、Semaphore、CPU缓存方式等等)

                 C#线程开发                                                                        Go协程开发                  

●消息通信channel

    在Go语言中,使用基于消息传递的通信方式(而不是大多数语言所使用的基于共享内存的通信方式)进行协程间通信,并且将消息管道(channel)作为基本的数据类型,使用类型关键字(chan)进行定义,其本质是一个先进先出的队列,使用goroutine+channel进行数据通讯简单高效,同时也线程安全,多个goroutine可同时修改一个channel,不需要加锁。

通过用channel实现并发等待任务

●高性能HTTPServer

    作为服务端语言,Go在语言级别自带HTTP/TCP/UDP高性能服务器,基于协程并发,为业务开发提供最直接有效的能力支持。

●格式化代码Gofmt

    作为很多有强迫症的人看到别人的代码都并未排版甚至太多的换行左 { 不一致的问题出现一定非常捉狂,但是Go 编译器始终尽力保持代码的清洁,将未使用的变量视为编译错误。而且,Go 采用了独特的方法让计算机能处理大多数格式问题。在保存或编译时 Go 会运行 Gofmt 的程序,它会处理大多数的格式问题。

(如果不关心其中的一个变量,只需使用 _(下划线)并将其分配给空标识符即可)

总结语

    Go主要是基于两方面的考虑

    1、执行性能 

    缩短API的响应时长,解决批量请求访问超时的问题。在业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能。而Go语言不一样,通过协程可以方便的实现API的并行处理,达到处理效率的最大化。 依赖Go的高性能HTTP Server,提升系统吞吐能力,由数百级别提升到数千里甚至过万级别。

    2、开发效率 

    Go语言使用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建API业务逻辑。 能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。

    Go何止只有上面的优点,还有很多诸如编译快,垃圾回收机制,强大标准库和稳定性;只是缺点也会存在的,但是如果要写一个 API或者完成某个需要大量磁盘 / 网络调用的任务,Go依然是现在的首选。

“世界上只有两种语言:人们抱怨的语言和没人使用的语言。”  

                                                                                        ——  Bjarne Stroustrup

上一篇下一篇

猜你喜欢

热点阅读