当前位置: 首页 > article >正文

Go小专栏 第一期

Go的前世今生

如标题所述,这篇文章主要是来聊聊Go的历史,现状以及未来,或者也可称为Go的发展脉络。我认为任何事物存在皆有原因,技术也不例外。这篇文章主要探讨Go为什么会出现,Go的特点。

Go为什么会出现?

如果你接触过Go,就应该会知道Go被Google开源出来,Go的出现源自一次大型工程的构建,在等待漫长的构建过程中,有三位大佬开始讨论是否可以利用编程语言加快构建时间,解决目前Google在软件开发中遇到的问题呢?正是因为这次讨论,Go语言就此诞生。这三位大佬,分别是,Ken Thompson(图灵奖获得者、C 语法联合发明人、Unix 之父),Rob Pike(Plan 9 操作系统领导者、UTF-8 编码的最初设计者),Robert Griesemer(Java 的 HotSpot 虚拟机和 Chrome 浏览器的 JavaScript V8 引擎的设计者之一)。从语言的设计者角度看,Go语言可谓是身出名门。在这三位大佬的讨论中,这门编程语言要解决Google软件工程上的问题,而不是去做编程语言的创新。当时的Google面向下面的痛点

  1. 构建缓慢
  2. 依赖关系不可控
  3. 语言特性过多,每个工程师只会使用其中的一部分
  4. 代码可读性差
  5. 重复劳动
  6. 更新代价高
  7. 版本兼容性差
  8. 编写自动化工具困难
  9. 跨语言构建

而Go语言就是为了解决这些问题而生的,可以说Go语言是面向工程的语言。除此之外,三位大佬认为一门成功的编程语言需要保证下面三点

  1. 即使在规模庞大,依赖众多其他组件,在很多开发人员共同协作的程序上,也能很好的运行
  2. 它应该足够令人熟悉,尤其是在Google的开发者,他们更加熟悉C系语言的风格
  3. 它也需要足够现代,适应当时多核CPU的计算环境,比如内置并发

基于这些考虑,这三位大佬最终确定了Go语言的特点

  1. 足够简单,语言特性不易过多。
  2. 组合而不是继承,放弃传统的面向对象
  3. 良好的依赖管理,不允许循环依赖的出现,构建一颗清晰的依赖树
  4. 内置并发,借助CSP理论,内置并发原语,channel,select,goroutine
  5. 垃圾回收, 借助运行时,管理内存。
  6. 错误处理,借鉴C语言的基于值比较的错误处理方式,并再其上做了一定的创新

小结

到此,我讲解了为什么Go会出现,以及Go语言的特点,理解了这些东西,我们在学习Go的语法,再能更好的理解。那么下一期,我们会聊聊Go的基本数据类型以及语法结构,并谈谈我对类型的理解。到此为止,你看完了专栏的第一篇文章,如果你想再深入了解,可以看看这篇文章 Go at Google: Language Design in the Service of Software Engineering - The Go Programming Language


http://www.kler.cn/a/314339.html

相关文章:

  • GPT-5 要来了:抢先了解其创新突破
  • 将Excel文件的两个表格经过验证后分别读取到Excel表和数据库
  • WEB攻防-通用漏洞SQL注入sqlmapOracleMongodbDB2等
  • 量化交易系统开发-实时行情自动化交易-3.4.2.2.Okex交易数据
  • redis7.x源码分析:(1) sds动态字符串
  • 【大数据测试HBase数据库 — 详细教程(含实例与监控调优)】
  • 【前端】ES6:Promise对象和Generator函数
  • 【MySQL 01】数据库基础
  • 配置docker的proxy指向
  • 【Proteus仿真】基于51单片机的L298N电机电速调节
  • 记录动态库项目仅生成了dll,未生成lib文件的问题
  • 深度学习02-pytorch-07-张量的拼接操作
  • 剖析Spark Shuffle原理(图文详解)
  • go 以太坊代币查余额
  • Python | Leetcode Python题解之第424题替换后的最长重复字符
  • 是德科技Keysight N4433D ECal模块 26.5GHz 4端口3.5毫米
  • 在python爬虫中xpath方式提取lxml.etree._ElementUnicodeResult转化为字符串str类型
  • RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
  • 演示jvm锁存在的问题
  • Java集合(三)
  • Centos7安装chrome的问题
  • WebApi开发中依赖注入和RESTful 详解
  • OceanBase 的并发简述笔记
  • Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对
  • 【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理
  • php变量赋值javascipt变量