Go初识
下载安装包:https://golang.org/dl/
什么是Go语言
- Go语言也称为 Golang,是由 Google 公司开发的一种静态强类型、编译型、并发型、并具有垃圾回收功能的编程语言;Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验就可以轻松搞定。
Go语言特点
- 语法简单:Go语言的语法规则严谨,没有歧义,更没什么黑魔法变异用法。任何人写出的代码都基本一致,这使得Go语言简单易学
- 并发模型:从根本上将一切都并发化,运行时用 Goroutine 运行所有的一切,包括 main.main 入口函数,Goroutine 是 Go 最显著的特征。它用类协程的方式来处理并发单元,却又在运行时层面做了更深度的优化处理。这使得语法上的并发编程变得极为容易,无须处理回调,无须关注线程切换,仅一个关键字,简单而自然。搭配 channel,实现 CSP 模型。将并发单元间的数据耦合拆解开来,各司其职,这对所有纠结于内存共享、锁粒度的开发人员都是一个可期盼的解脱。666
- 内存分配:它会竭力将对象分配在栈上,以降低垃圾回收压力,减少管理消耗,提升执行性能。可以说,除偶尔因性能问题而被迫采用对象池和自主内存管理外,我们基本无须参与内存管理操作。
- 垃圾回收:还在完善中
- 静态链接:将运行时、依赖库直接打包到可执行文件内部,简化了部署和发布操作,无须事先安装运行环境和下载诸多第三方库。这种简单方式对于编写系统软件有着极大好处,因为库依赖一直都是个麻烦。
- 标准库:丰富,优秀代表(net、http)
- 工具链:简单易容,内置完整测试框架,还可通过环境变量输出运行时监控信息,尤其是垃圾回收和并发调度跟踪,可进一步帮助我们改进算法,获得更佳的运行期表现。
Go适合做什么
- 其实Go语言主要用作服务器端开发,其作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web应用、API应用、下载应用等;除此之外,Go语言还可用于内存数据库和云平台领域。
Java与Go的对比
特点
Java
Golang
性能
Java执行性能比golang差一些
go的性能可以媲美c,c++
并发
Java并发性能比golang差一些
引入了协程,并发粒度相对java更小,性能更高。
生态
Java工具丰富,社区庞大。Spring全家桶十分强大
golang工具比Java少。Beego、****Gin等web框架,稍逊spring
跨平台
支持跨平台。编译部署比较简单。
编译go如同编译C++一样,不同操作系统需要交叉编译,由于依赖服务器的一些环境
统一异常处理
Spring框架可以简单的设置统一异常处理
Gin等框架也可以,对异常和错误统一进行处理,返回统一的错误格式
垃圾回收
支持垃圾回收,并且效率很高
支持垃圾回收。目前垃圾回收效率略低于Java
面向对象
支持面向对象,支持封装,继承,多态
支持面向对象,但是没有继承。满足封装和多态。官方推荐使用组合。认为继承的入侵性太强。
虚拟机
代码运行虚拟机中
无虚拟机
AOP
java在运行时能通过字节码操作,强化类功能。实现动态代理。
go是静态语言,不支持动态机器码生成。可以使用策略模式,实现类似功能。
指针
不支持指针操作
支持指针
泛型
支持泛型
Go1.17新版本,也将支持泛型
APM 工具链
非常完善
目前支持还不够完善
网络
拥有Netty,网络支持完善
拥有fasthttp,但是HTTP/2.0不支持,WebSocket 不支持
待续......