Go小专栏 第一期

devtools/2024/9/23 6:06:44/

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.ppmy.cn/devtools/115848.html

相关文章

Android-UI设计

控件 控件是用户与应用交互的元素。常见的控件包括: 按钮 (Button):用于执行动作。文本框 (EditText):让用户输入文本。复选框 (CheckBox):允许用户选择或取消选择某个选项。单选按钮 (RadioButton):用于在多个选项中…

Maven国内镜像(四种)

配置Maven使用国内镜像是一个常见的做法&#xff0c;因为这样可以显著提高依赖下载的速度并避免网络不稳定带来的问题 在 settings.xml 文件中&#xff0c;需要添加或修改 <mirrors> 标签来指定国内镜像。 以下是几个可用的镜像 1. 阿里云 <mirrors> <mi…

prompt攻击与防范

Prompt攻击是指通过精心设计的输入提示来操纵AI模型&#xff0c;使其产生不准确或有害的输出。这些攻击可能包括提示词注入、提示词泄露和提示词越狱等。攻击者可能会尝试通过提供包含恶意内容的输入&#xff0c;来操纵语言模型的输出&#xff0c;或者从模型的响应中提取敏感或…

美食共享圈:Spring Boot校园周边美食平台

第二章 系统分析 2.1 可行性分析 可行性分析的目的是确定一个系统是否有必要开发、确定系统是否能以最小的代价实现。其工作主要有三个方面&#xff0c;分别是技术、经济和社会三方面的可行性。我会从这三个方面对网上校园周边美食探索及分享平台进行详细的分析。 2.1.1技术可行…

html 几行的空间分成3个区域

1.代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>三个区域示例</title> …

LeetcodeLCR 116. 省份数量

文章目录 题目原题链接思路C代码 题目 原题链接 LCR 116. 省份数量 思路 利用并查集的思想&#xff0c;将连接的诚实放在一个集合当中&#xff0c;最后遍历并查集数组判断有几颗树 初始化一个并查集&#xff1b;将连通的城市合并&#xff1b;统计并查集中树的个数&#xff1b…

面试金典题8

编写一种算法&#xff0c;若M N矩阵中某个元素为0&#xff0c;则将其所在的行与列清零。 示例 1&#xff1a; 输入&#xff1a; [[1,1,1],[1,0,1],[1,1,1] ] 输出&#xff1a; [[1,0,1],[0,0,0],[1,0,1] ]示例 2&#xff1a; 输入&#xff1a; [[0,1,2,0],[3,4,5,2],[1,3,1…

828华为云征文|Flexus云服务器X实例部署宝塔运维面板

本次华为云Flexus云服务器X实例部署宝塔运维面板教学&#xff0c;这次是推陈出新啊 之前的云耀云服务器L实例已经很不错了&#xff0c;大力赞叹华为云的 同时感谢华为云提供优惠卷&#xff0c;只能说白嫖真是太棒了 华为云近期正在筹办华为云828企业节活动&#xff0c;90款免…