欢迎访问我的博客,目前从事Machine Learning,欢迎交流

【读书笔记&个人心得】第1章:Go 语言的起源,发展与普及

起源与发展

2010 年 5 月:谷歌投入使用

官网的首页有一个功能叫做 Go Playground,是一个 Go 代码的简单编辑器的沙盒,它可以在没有安装 Go 语言的情况下在你的浏览器中编译并运行 Go

语言的主要特性与发展的环境和影响因素

执行速度快但是编译速度并不理想的语言:C++
编译速度较快但执行效率不佳的语言:.NET、Java
发难度较低但执行速度一般的动态语言:JS
Go 语言在这 3 个条件之间做到了最佳的平衡:快速编译,高效执行,易于开发

Go 目标

Go 语言的主要目标是将静态语言的安全性和高效性与动态语言的易开发性进行有机结合,达到完美平衡,因此,Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算

Go 语言的另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机,设计者通过 goroutine(Go 例) 这种轻量级线程的概念来实现这个目标,然后通过 channel(信道) 来实现各个 goroutine 之间的通信

程序构建

人们越来越需要一门具有严格的、简洁的依赖关系分析系统从而能够快速编译的编程语言。这正是 Go 语言采用包模型的根本原因,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性

执行速度

由于内存泄漏长期以来一直伴随着 C++ 的开发者们,尽管 Go 语言像其它静态语言一样执行本地代码,但它依旧运行在某种意义上的虚拟机,以此来实现高效快速的垃圾回收(使用了一个简单的标记-清除算法)

其他

Go 语言还能够在运行时进行反射相关的操作

Go 语言还支持调用由 C 语言编写的海量库文件(使用 cgo,第 3 章)

指导设计原则

Go 语言有一套完整的编码规范

语言的特性

Go 语言没有类和继承的概念,它通过接口 (interface) 的概念来实现多态性
Go 语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说
Go 语言使用静态类型,所以它是类型安全的一门语言,加上通过构建到本地代码,程序的执行速度也非常快
Go 作为强类型语言,隐式的类型转换是不被允许的,记住一条原则:让所有的东西都是显式的
Go 语言其实也有一些动态语言的特性(通过关键字 var)
Go 是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码

语言的用途

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言,值得注意的是,因为垃圾回收和自动内存分配的原因,Go 语言不适合用来开发对实时性要求很高的软件(实时性是指某个事件服务或某进程代码在分配的响应时间内必须是可执行的。换言之,假定没有其他进程竞争 CPU,该进程必须能在规定的响应时间内执行完)

Go 语言可以在 Intel 或 ARM 处理器上运行,此它也可以在安卓系统下运行

关于特性缺失

为了简化设计,不支持函数重载和操作符重载
为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换
Go 语言通过另一种途径实现面向对象设计(第 10-11 章)来放弃类和类型的继承
尽管在接口的使用方面(第 11 章)可以实现类似变体类型的功能,但本身不支持变体类型
不支持动态加载代码
不支持动态链接库
不支持泛型(2021 年 12 月 14 日 Go 1.18 已支持)
通过 recover() 和 panic() 来替代异常机制(第 13 章)
不支持静态变量

posted @ 2023-03-01 11:51  有蚊子  阅读(34)  评论(0编辑  收藏  举报