今天没有更新,就继续吹一下Go语言(编程)

何时选择Go语言

当公司技术栈不是定性的情况下,想使用编译语言处理后端数据,避免PHP和Python速度过慢的同时也不想使用C或者Java这种古董又沉重的技术,就可以使用Go语言开发服务端程序。

或者想做一个接口程序处理业务的时候也可以使用Go语言。

今天没有更新,就继续吹一下Go语言(编程)
1_xbsHBQJReC5l_VO4XgNSIQ.png

Go不仅仅具备编译语言应有的性能,同时硬性规定了很多语法规则保持代码美感,同时融入了许多快速开发的特性。

因为存在运行时,具有GC特性所以Go语言无法和C/C++达到一样的运行速度,但从理论层面Go的性能一定会比Java更快,由于Go早期版本的各种不成熟导致的问题已经慢慢消失。同时Go由于存在GC和一些简写特性,和官方配备的一些自动化工具,如代码格式整理、包管理工具等,Go的开发效率也接近动态语言。

Go语言的高并发优势

Go从语法层面提供了并发机制,使用简单的关键字就可以起一个协程Goroutine。

Goroutine并不是一个线程,关于协程和线程之间的转换,Go语言会自动帮你处理。

以下是Goroutine的一些特性。

  • Goroutine具有可增长的分段堆栈。这意味着它们仅在需要时才使用更多的内存。

  • Goroutine具有比线程更快的启动时间。

  • Goroutine带有内置原语以在它们之间(通道)之间安全地通信。

  • 使用Goroutines可以避免共享数据结构时不得不使用互斥锁。

  • 此外,goroutine和OS线程没有1:1映射。一个goroutine可以在多个线程上运行。Goroutines被多路复用到少量的OS线程中。

除此之外,Google推荐使用语法层面的数据结构channel来进行多协程通讯而不是使用锁,channel自带的特性可以完美地实现并发控制而不用自己考虑如何上锁。

Go强大的官方生态

上文说过Go官方提供全套的并发机制,甚至是语法级别的,接下来我们来说几个好用的Go官方提供的工具。

第一个是go fmt工具,这里不是说fmt包,而是代码整理工具,包括业界出色的IDE——GoLand的代码整理功能也是调用了fmt工具。

第二个是go net/http包,这个包提供了优秀的http相关的功能,使用Go语言你甚至可以不用三方框架,通过官方库就构建出强大的Web系统。net/http的操作并不繁琐,使用起来非常简单易懂,可以快速实现http接口的响应程序。

第三个是go moudle包管理工具,类似于Java常用的包管理工具maven,虽然不像maven提供了一个包推荐平台,也可能我不知道。但对于本地项目的包管理已经足够出色,通过go mod配置自动管理三方包的下载和版本。这个工具同样是go开发包自带的功能。

不过Go至今都没有推出官方图形用户界面GUI,虽然可以使用三方的单毕竟有时候不如官方的舒服。不过Google好像没有这方面的打算,可能Go的定位就没有开发桌面程序的方向吧。