本文介绍: Go简介、Go和Java的对比

一、Golang简介

Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种计算机高级编程语言

Go的官方文档https://golang.org

Go的中文api文档 https://studygolang.com/pkgdoc

Go中文社区网站 https://studygolang.com/

1、Go的诞生

go退推出之前,已经存在很多高级编程语言了,比如:C、C++、C#、Java…。为什么还要再造一个GO呢?

主要原因有三个:

1> 计算机硬件技术更新频繁,性能提高很快。但是主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。 旧的编程语言无法在开发效率与执行效率之间做出很好的平衡:

整体来看各个语言执行效率和开发效率:

Go语言的诞生一方面便是为了同时拥有高效的执行速度、编译速度和开发速度。

2> 软件系统复杂度越来越高,维护成本越来越高,缺乏一个足够简洁高效的编程语言

3> 企业运行维护很多c/c++的项目c/c++程序运行速度虽然很快,但是编译速度确很慢,同时还存在内存泄漏的一系列的困扰需要解决

针对上述问题,谷歌公司的三位工程师于 2007 年 9 月 20 号下午进行一次讨论,正是这次讨论才有了第二天组织在位于加利福尼亚的山景城 43 号楼的三人会议。这与会的三人正是Go 的创始人:Robert Griesemer,Rob Pike 和 Ken Thompson。这三个神仙主要成就如下

  1. Robert Griesemer罗伯特.格利茨默(Java HotSpot虚拟机、V8引擎开发者之一)
  2. Rob Pike罗伯.派克(贝尔实验室UNIX团队成员,曾参与Plan9、Inferno和Limbo等项目
  3. Ken Thompson肯.汤普森(贝尔实验室UNIX团队成员,C语言、UNIX和Plan 9创始人之一,与Rob Pike共同开发了UTF-8字符集规范

在Go的官网https://go.dev/solutions/google/)上有Rob Pike的一段话,讲述了Go的诞生、发版、现状(2020年):

在这里插入图片描述

2、Go的官网域名

为什么官方叫Golang,而大家都在说它是Go呢?

有意思的是:Google 在注册 Go 的官网域名时,go.org域名已经被迪士尼注册。替而代之:golang.org域名才被使用。这也导致很多人误以为 Golang 是其正式名称;然而我们可以认为Golang是Go的一个绰号。

3、Go的发展

Go 语言起源于2007 年9月,2009年11月Google公司正式发布Go语言,并以BSD协议完全开源,2012年3月 go1.0发布,2015年8月go1.5版本发布(历史性的节点,完全移除C语言部分,使用GO编译GO)。当前最新版本为go1.20。所有的发版节点传送链接如下
在这里插入图片描述

此外,在GO语言版本迭代过程中,语言特性基本没有太大的变化,基本上维持在GO1.1的基准上;并且官方承诺,新版本对老版本下开发的代码完全兼容

近2-3年GO语言语言排行榜https://www.tiobe.com/tiobe-index/)上的名次比较固定(第12位左右):
在这里插入图片描述

整体语言使用率趋势如下

在这里插入图片描述

4、Go的设计思想

GO的核心设计简单就是为了简单:“keep it simple”,其追求简单实用的哲学,从语言的层面上减少代码复杂度

比如:隐式接口&切片、类的弱化、指针的弱化、简洁高效的开发。

5、Go的特点

GO相对其他语法来说,最大的特点:并发

原生支持并发编程。Go 语言的对网络通信并发和并行编程支持度极高,从而可以更好利用大量的分布式和多核的计算机

开发者可以通过 goroutine 这种轻量级线程概念实现这个目标然后通过 channel实现各个 goroutine 之间的通信。他们实现分段栈增长和 goroutine 在线程基础上多路复用技术自动化

后续扩展GO的编程模型(GMP)。

不过GO也有很多面向对象语言的特性没有给以支持

6、Go的性能

同C、C++一样,Go语言也是编译型的语言,它直接将人类可读的代码编译成了处理器可以直接运行二进制文件,执行效率更高,性能更好

根据 Go 开发团队和基本的算法测试,于 2013 年 3 月 28 日之前统计结果得出,Go 语言与 C 语言的性能差距大概在 10%~20% 之间。

保守估计在相同的环境和执行目标的情况下,Go 程序比 Java 或 Scala 应用程序要快上 2 倍,并比这两门语言使用少占用 70% 的内存

7、Go的吉祥物

金花鼠(Gordon

在这里插入图片描述

二、Go和Java的宏观对比

1> 跨平台

2> 代码风格

3> 并发性能底层CPU的利用)?

  • GO1.5版本之前底层也和Java一样都是用C实现的。
  • JAVA诞生时(1995年),硬件层面还没有多核CPU的电脑,它对并发的支持是后来添加上去的。
  • 而GO诞生时(2009年),已经有了多核CPU的电脑,所以其在设计的时候充分利用了多核CPU,所以它对高并发的支持更好。

1、编译型语言 or 解释型语言

计算机编程语言按照运行方式可以分为:编译型语言、解释型语言。

在这里插入图片描述

Go是一种编译型语言,运行在不同的平台需要打包成不同操作系统类型下的可执行文件

Java既不是完全的编译型语言,也不是完全的解释型语言,它属于半编译、半解释型语言

2、微观对比

1> 引用类型参数传递

2> 面向对象特性

更多微观层面 Go 和 Java语言使用上的一些区别,见专栏的后续文章

三、Go应用场景

编程语言只是一种工具,没有最好的,只有最合适的。

1、服务器编程。和Java一样,Go语言最多的应用场景就是服务器后端系统的开发,例如:微服务系统开发(Web应用、API应用)、处理日志数据打包虚拟机处理文件系统等。

2、分布式系统开发。比如:集群系统、游戏服务器、数据库代理器、中间件场景

3、网络编程。Go非常适用需要高性能高并发的网络编程,用Socket相互传输数据的系统,类似于Java中Netty的用途。

4、云原生平台运维管理系统)开发。目前国外很多云平台都采用Go开发,比如:Docker,K8s、以及很多DevOps平台

5、游戏系统开发。

6、区块链开发。GO语言是区块链的第一开发语言。

Go语言不适合的场景为:

1、开源上的应用

原生技术中代表性的技术dockerkubernetes、Prometheusetcdconsul都是使用GO开发的。

笔者研究Go也正是为了看这几个技术源码

四、总结和后续

本文主要介绍了Golang的一些常识。

专栏将类比着Java介绍Go语言的使用,并以此展开对后续云原生开源技术的实践、源码阅读。

下一篇文章继续GO环境搭建、Hello World代码的运行和运行原理

原文地址:https://blog.csdn.net/Saintmm/article/details/130793052

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_20574.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注