背景

Go (通常称为“ Golang”)是一种相当新的编程语言,于2007年首次提出,并于2012年推出了1.0版。它的三位发明者目前都是Google员工,具有令人称奇的声誉。 肯·汤普森 ( Ken Thompson)是UNIX的传奇之父。 Rob Pike与Thompson一起创建了具有影响力的Plan 9操作系统, Robert Griesemer致力于Java HotSpot虚拟机和Google的V8 JavaScript引擎。

Go的起源源自对C ++变得过于复杂的信念。 这三位发明家想要一种新的系统级语言……同样以C语言为基础,但是增加了现代概念并消除了混乱。 与C一样,Go具有相当紧凑的语言规范,并且与其他现代语言相比,它的标准库很小。 但是,Go引入了以下功能:

  • 静态打字和打字安全
  • 自动垃圾收集
  • 简化使用指针
  • 内置的并发支持
  • 依赖管理系统
  • … 以及更多

最初假定Go的目标受众是C和C ++开发人员。 但是,到目前为止,最热情的是来自Python和其他动态语言社区。 使用Go进行编程在许多方面“感觉”类似于Python……增加了对静态类型的支持,轻松的并发性以及可笑的更快的执行速度。 可以将它描述为“两全其美”的模型,将低级系统语言的效率与高级语言的易用性和表达能力相结合。

是Java程序员吗?

从某种意义上说,Go背后的动机与Java起源背后的动机相似。 二十年前,Sun Microsystems想要一种比C / C ++更轻松,更宽容的编程语言(例如,垃圾回收,没有指针运算!)。 但是它必须功能强大,并具有足以执行大多数任务的丰富标准库。 该行业刚刚进入商业Internet时代,需要强大的网络支持语言来奠定其基础。

我从事Java已有15年以上的专业经验,但我认为Java作为主要语言的地位不会很快改变。 但是,我一直需要使用辅助语言来满足Java的需求。 有时,我需要一个快速脚本来解析几GB的脏日志文件。 我需要一个一次性命令行实用程序,用于将信息输入数据库。 我需要轻松部署一些批处理逻辑,以便从cron作业中调用。 我可能需要一个基本的CRUD Web应用程序,只需包装一些数据库表即可轻松输入数据。 等等。

当然,我可以用Java完成所有这些事情。 只是将Java用于许多这些任务就像在需要一把剪刀时使用电锯一样。 与其他语言相比,引导Java程序需要大量的工作。 您必须设置诸如Maven或Gradle之类的构建系统,或者手动管理您的JAR文件依赖项。 部署小型专用实用程序感觉有些过时了。 单独部署JAR意味着在调用JVM时必须管理您的类路径,而将它们捆绑到一个整体的可执行JAR中可能会出现问题。

更重要的是,按照当今的标准,Java是一种非常冗长的语言。 对于大型的面向团队的项目或需要长时间维护的复杂逻辑,我并不认为这是缺点。 我发现批评来自新手,他们试图将Java用于简单,短暂,一次性的任务……冗长是不必要的开销。 但是,打开和解析一堆文件的确需要大量令人沮丧的样板代码,如果您仅需一个小实用程序即可。

因此,像许多Java程序员一样,我总是在后兜里有一两种辅助语言来完成这些副任务。 早在90年代后期,就是Perl。 最终转移到了Python,尽管我也花了很多时间在Groovy,Scala和其他人身上。 这些额外的语言不仅填补了Java在特殊任务方面的空白,而且还有助于提高我的Java开发技能。 当我开始使用异步Java代码时,由于以前使用过JavaScript(其中异步是规范),因此它变得更容易。 如果我已经好几年没有与Scala一起工作了,那么学习Java 8中的新功能构造将是一项艰巨的任务。

在过去的一年中,围棋已经成为我的主要“其他”语言。 它为Java程序员提供了许多巨大的优势:

  • 轻巧简洁的编程风格,就像使用动态语言一样,却提供了Java开发人员更喜欢的编译时类型检查。
  • 一个标准库,它足够小以快速学习,但又足够丰富,可以满足您可能通常需要的所有内容。 有针对最常见数据类型(例如XML,JSON,CSV等)的内置解析器。 与JDBC类似的数据库库。 具有出色性能的内置HTTP服务器,用于编写快速的RESTful服务或小型Web应用程序。 等等
  • 轻松的依赖关系管理和部署。 Go程序直接编译为本机可执行文件,并且所有依赖项都静态链接。 没有虚拟机! 您不必担心在目标包装盒上安装了正确版本的Python,也不必担心使用诸如virtualenv之类的工具在自己的包装盒上与多个环境打交道。 只需构建一个exe,然后运行它即可。 尽管可执行文件是特定于平台的,但是Go可以使交叉编译变得容易……例如,在Windows工作站上构建Linux可执行文件。
  • Go可执行文件不仅快速,而且编译器也是如此。 编译器是如此之快,以至于您可以将Go程序作为“脚本”运行,而编译则在后台进行。
  • 一种最简单的模型,可以安全地编写高度并发的代码。

以Java程序员的身份学习Go

尽管Go是一种相当轻便且易于学习的语言,但在以Java开发人员的方式使用Go时仍存在一些文化挑战。 Go上有几本很棒的书(请参阅底部的参考资料部分),但是它们大多是从C / C ++角度编写的。 他们强调的许多事情对于Java程序员来说都是陌生的,分散了他们的注意力。

同时,还有IRC和StackOverflow以及许多其他在线Go社区,但是这些似乎主要由Python开发人员组成。 它们可以对比Go的环境,并为“ pip”和“ virtualenv”构建工具,但是相对于Maven和其他Java概念而言,它们的解释能力不足。

因此,在接下来的几周和几个月中,我计划撰写一系列有关Go的博客文章,从有助于Java程序员的角度介绍不同方面。 我将Go概念与其Java对应概念进行比较。 希望对Java程序员而言,这比阅读针对C / C ++或Python读者的解释并在脑海中将其翻译成Java术语更有用。

Go for Java Programmers系列主页上列出了本系列所有文章的链接以及将来计划的主题。 如果您希望在某个时候看到其他主题,请随时与我联系并提出建议。 感谢您的阅读,并享受您的Go体验!

其他资源

  • 围棋之旅 –基于浏览器的交互式教程,通过实时代码示例学习围棋的基础知识。 展示Go Playground ,这是一种用于在Google App Engine上托管的Web浏览器中测试Go代码的方法。
  • 有效的围棋 –长达50页的语言功能调查,非常适合完成围棋之旅教程后阅读。
  • 如何编写Go代码 –环境主题的简要概述,例如库管理,以及完整Go应用程序的正确目录结构。
  • 《 Go编程入门》 – Caleb Doxsey撰写的165页的书,可在他的网站上免费获得,并提供象征性收费的Amazon Kindle版本。 我以前已经在此站点上对该书进行了详细的评论 。
  • Go编程语言短语手册 –大卫·奇斯纳尔(David Chisnall)的这本288页的书名奇特,因为它当然不仅仅是“短语书”。 相反,它是该语言的精心编写的中级概述。 它的范围和密度介于Doxsey的上一本书和Summerfield的一本书之间。
  • Go中的编程:创建21世纪的应用程序 – 496页,Mark Summerfield的书是我所推荐的当前市场上最全面的语言基础。 如果您曾经学习过Perl,那么您可以认为Chisnall的书类似于“ 骆驼书 ”,而Summerfield的书类似于“ 骆驼书 ”。

在Go for Java Programmers系列的下一篇文章中,我们将从包,函数和变量开始比较Java和Go之间的基本语法差异。

参考: Go for Java Programmers:我们的JCG合作伙伴 Steve Perkins的介绍,位于steveperkins.net博客上。

翻译自: https://www.javacodegeeks.com/2014/03/go-for-java-programmers-introduction.html

Java程序员入门:简介相关推荐

  1. java程序员入门_Java程序员入门:简介

    java程序员入门 背景 Go (通常称为" Golang")是一种相当新的编程语言,于2007年首次提出,并于2012年发布了1.0版.它的三位发明者目前都是Google员工,具 ...

  2. java程序员入门先学什么开发者工具

    学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...

  3. Java程序员入门Vue基础(一)

    文章目录 1.为什么要学习VUE 2. Vue的架构 3. HelloWorld 4. VUE-devtools 1.为什么要学习VUE 最近公司的领导让我抽空学习一下VUE,下一个项目要用到它.这么 ...

  4. Java程序员入门技术大全V1(十三) -- 开发工具之设计工具

    设计工具 UML 统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明.可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言.UML使 ...

  5. java程序员自我简介及简历

    大家好,我叫***,来自***,计算机专业,本科学历. 在校期间,我的各方面表现都比较优秀. 就学习方面而言,我的综合测评排列班级前三名,获人民奖学金多次,国家励志奖学金一次. 就工作方面而言,我曾担 ...

  6. java程序员_哪些书是不可错过的?Java程序员书单分享

    作为后浪程序员,我们要精通一门编程语言,最好的途径就是看书,而这个时候读什么书就变成了最关键的了,靠谱的书籍无疑可以让我们少走弯路事半功倍,今天就来给大家推荐一些Java工程师必备书籍. ​入门篇&l ...

  7. Java程序员Go语言入门简介

    引用:Java程序员Go语言入门简介 为什么是 Go 语言 类 C 的语法,这意味着 Java.C#.JavaScript 程序员能很快的上手 有自己的垃圾回收机制 跨平台.编译即可执行无需安装依赖环 ...

  8. 来自Java程序员的Python新手入门小结

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 欣宸是个Java程序员,最近正在学习Pyth ...

  9. 菜鸟入门:Java程序员学习之路

     1. Java语言基础 谈到Java语言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

最新文章

  1. pytorch索引查找 index_select
  2. 透过散射薄膜成像方案整理
  3. opengl坐标转换
  4. 南京工程学院计算机组成原理第二版答案,南大__计算机组成原理第二次作业
  5. 常用安卓开发技巧汇总
  6. 十个现象,识别程序员的“水份”
  7. ASP.NET Core MVC with EF Core-迁移
  8. python自己做个定时器_技术图文:如何利用 Python 做一个简单的定时器类?
  9. 数据访问层代码自动生成
  10. brew 无法安装iterm2_MAC 安装OhMyZsh问题记录
  11. iOS 面试题整理(带答案)二
  12. 科研财务mysql相减_基于PHP和MySQL技术的地方高校科研管理系统的设计与实现
  13. Postman安装(汉化Postman)
  14. center os 安装 mysql_MySQL数据库之center os 7 Mysql 安装
  15. [自我介绍]第一篇博客
  16. 学计算机硬盘电脑多大好,笔记本电脑固态硬盘要多大的合适
  17. ajax读取json文件 / 跨域问题
  18. html中取颜色快捷键,ps中填充颜色的快捷键是什么?
  19. 在Dynamis CRM中打造一键保存关闭刷新案例的功能
  20. 分享---蔡康永情商课201集全

热门文章

  1. HUAWEI MateBook X Pro 2022款 评测
  2. 微店分布式监控系统实践
  3. 博客园的客户端提示是怎么样一个架构
  4. Java Docx文件简介和解析
  5. mysql计算两个日期之间的工作日(可跨年,排除周六日,不排除节日)
  6. EXCEL隔行选取操作
  7. 开发实现物理加速度移动_《无限法则》开发经验分享:射击游戏的物理引擎应用和移动模拟...
  8. Android 11 Sending non-protected broadcast问题分析
  9. Python爬虫入门例子-运满满的货运信息
  10. JAVA计算机毕业设计网上花店系统(附源码、数据库)