GO开篇:手握Java走进Golang的世界

这篇具有很好参考价值的文章主要介绍了GO开篇:手握Java走进Golang的世界。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、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的优势提升软件系统性能。 旧的编程语言无法在开发效率与执行效率之间做出很好的平衡:

  • C++之类,执行效率高,开发效率低、编译速度慢。
  • JAVA之类,拥有高效的编译速度,但是执行效率低。

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

  • 执行效率(execution speed): C/C++ > Java > Python
  • 开发效率(developing efficiency): Python > Java > C/C++

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

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

  • 在Google公司内部,随着项目规模的不断扩大,开发和维护的复杂性也正在把Google公司一步一步拖入泥潭中。
  • 系统越来越复杂,大量的代码是由C++、Java、Python 写成,规模越来越庞大。需要大量的程序员每天都在围绕着数以万计行的代码、数百万的服务器工作着,以保证各项服务的正常运行。

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年):

GO开篇:手握Java走进Golang的世界

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开篇:手握Java走进Golang的世界

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

近2-3年GO语言在语言排行榜(https://www.tiobe.com/tiobe-index/)上的名次比较固定(第12位左右):
GO开篇:手握Java走进Golang的世界

整体语言使用率趋势如下:

GO开篇:手握Java走进Golang的世界

4、Go的设计思想

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

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

5、Go的特点

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

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

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

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

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

  • 不支持函数重载和操作符重载,为了简化设计;
  • 不支持隐式转换,为了避免在 C/C++ 开发中的一些 Bug 和混乱;
  • 放弃类和类型的继承,通过其他方式实现面向对象设计;
  • 不支持泛型;
  • 不支持动态加载代码、动态链接库;
  • 不支持动态代理;
  • 不支持静态变量;
  • 不支持断言;
  • 通过 recover 和 panic 来替代异常机制。

6、Go的性能

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

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

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

7、Go的吉祥物

金花鼠(Gordon)

GO开篇:手握Java走进Golang的世界

二、Go和Java的宏观对比

1> 跨平台?

  • Java因为有JVM虚拟机支撑的,故有“一次编译、处处运行”的特性。
  • 而GO没有虚拟机,不跨平台(多个操作系统),想要运行在多个平台,需要针对每个平台打不同的二进制程序包,编译成对应服务器操作系统版本的可执行程序,比如:windows的exe程序。
    • 我们说的go跨平台,指32位和64位相同操作系统之间的跨平台。

2> 代码风格?

  • Java语言编程风格很面向对象,提供了很多面向对象的特点,比如:重写、重载、继承、泛型、动态代理…
  • 而Go本着其设计原则**"keep it simple”**,更加简洁,可以用更少的代码实现同样的功能。

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

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

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

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

  • 编译型:程序运行前先用编译器将程序源代码进行编译,以后拿着编译的结果直接运行。
  • 解释型:每次运行程序时,都需要拿到源代码,让解释器解释执行。

GO开篇:手握Java走进Golang的世界

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

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

  • 半编译:指它的代码都会编译成class类型的文件,并且只需要编译一次,就可以在不同的操作系统的Java虚拟机上执行;
  • 半解释:指在Java虚拟机中,它还是需要一句一句的将class文件的代码解释成对应操作系统可执行的代码。

2、微观对比

1> 引用类型参数传递

  • Go可以按值传递(以对象为参数)、也可以按引用传递(以对象指针为参数)。
  • Java只能是按引用传递

2> 面向对象特性

  • Go主打一个简单,没有切面编程、泛型、继承…
  • Java有很多面向对象的特性。

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

三、Go应用场景

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

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

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

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

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

5、游戏系统开发。

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

Go语言不适合的场景为:

  • 强实时性软件,比如:语音通信、无人驾驶、垃圾回收、自动内存分配等。

1、开源上的应用

云原生技术中代表性的技术:docker、kubernetes、Prometheus、etcd、consul都是使用GO开发的。

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

四、总结和后续

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

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

下一篇文章继续GO环境的搭建、Hello World代码的运行和运行原理。文章来源地址https://www.toymoban.com/news/detail-456064.html

到了这里,关于GO开篇:手握Java走进Golang的世界的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 走进Oracle世界

    1. 走进Oracle世界 1.1. Oracle简介 Oracle Database ,又名Oracle RDBMS,或简称Oracle,为 甲骨文(Oracle)公司 的一款 关系数据库管理系统,也是甲骨文公司起家和后续的拳头产品 。在传统数据库领域,Oracle多年来一直处于领先地位,也是目前世界上最流行的关系数据库管理系统之一,

    2024年02月07日
    浏览(39)
  • vLive带你走进虚拟直播世界

    虚拟直播是什么? 虚拟直播是基于5G+实时渲染技术,在绿幕环境下拍摄画面,通过实时抠像、渲染与合成,再推流到直播平台的一种直播技术。尽管这种技术早已被影视工业所采用,但在全民化进程中却是困难重重,面临着克服相关技术难题。该技术的应用需要具备专业导演

    2023年04月20日
    浏览(43)
  • 走进Linux世界【七、Linux网络】

    走进Linux世界【一、Linux概述】 走进Linux世界【二、VM与Linux安装】 走进Linux世界【三、Linux文件与路径】 走进Linux世界【四、Linux基本命令一】 走进Linux世界【五、Linux基本命令二】 走进Linux世界【六、Linux编辑器vim】 走进Linux世界【七、Linux网络及快照和克隆】 走进Linux世界【

    2024年02月16日
    浏览(36)
  • 网络安全(黑客)自学!走进黑客的世界

     谈起黑客,可能各位都会想到:盗号,其实不尽然;黑客是一群喜爱研究技术的群体,在黑客圈中,一般分为三大圈: 娱乐圈 技术圈 职业圈 。   娱乐圈:主要是初中生和高中生较多,玩网恋,人气,空间,建站收徒玩赚钱,技术高的也是有的,只是很少见。   技术圈:

    2024年02月12日
    浏览(47)
  • 走进Linux世界【八、Linux shell命令】

    走进Linux世界【一、Linux概述】 走进Linux世界【二、VM与Linux安装】 走进Linux世界【三、Linux文件与路径】 走进Linux世界【四、Linux基本命令一】 走进Linux世界【五、Linux基本命令二】 走进Linux世界【六、Linux编辑器vim】 走进Linux世界【七、Linux网络及快照和克隆】 走进Linux世界【

    2024年02月15日
    浏览(36)
  • 走进Linux世界【四、Linux基本命令一】

    走进Linux世界【一、Linux概述】 走进Linux世界【二、VM与Linux安装】 走进Linux世界【三、Linux文件与路径】 走进Linux世界【四、Linux基本命令一】 走进Linux世界【五、Linux基本命令二】 走进Linux世界【六、Linux编辑器vim】 走进Linux世界【七、Linux网络及快照和克隆】 走进Linux世界【

    2024年02月16日
    浏览(45)
  • 【走进Linux的世界】Linux---基本指令(3)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 date 指定格式显示时间: date +%Y:%m:%d date 用法:date [OPTION]… [+FORMAT] 1.在显示方面,

    2024年02月08日
    浏览(41)
  • 【走进Linux的世界】Linux---基本指令(1)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录

    2024年02月06日
    浏览(41)
  • 【走进Linux的世界】Linux---基本指令(2)

    个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 ls有个对应的通配符 * ,而 *代表零个或多个任意字符 。 举个例子: 比如 ls *.c 可

    2024年02月07日
    浏览(49)
  • 走进音视频的世界——Opus编解码协议

    Opus是一种开源免费的音频编解码器,支持音乐和语音,具有低延时、带内FEC、DTX、PLC等特点,默认22.5ms延时,非常适用网络实时传输。官网:https://www.opus-codec.org。Opus协议收录于RFC6716,使用SILK和CELT两种编码。 目录 一、Opus特点 二、码率、音质、延时 1、音质与码率比较 2、

    2023年04月08日
    浏览(86)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包