本系列文章仅作为学习记录,内容包括引用内容,以及个人观点等,如有意见请留言指正

—————————————————我是华丽的分割线———————————————————————

目录

go语言概述

发展目标

语言特性

用途

特性缺失

小节


go语言概述

发展目标

1. 结合静态语言的安全和高效性, 以及动态语言的易开发性,吸取二者的优点便于开发
    Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算。

2. 另一个目标是对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机。

3. 依赖管理摒弃了c/c++系列的头文件,防止随着项目的增大导致依赖关系的混乱。采用了类似 java/python 的包模型机制,这个模型通过严格的依赖关系检查机制来加快程序构建的速度,提供了非常好的可量测性。

4. 构建速度(编译和链接到机器代码的速度)非常快,一般情况构建一个程序只需要数百毫秒到几秒。整个 Go 语言标准库的编译时间一般都在20秒内,其他的常规项目也只需要半秒钟的时间来完成编译工作。相对于c/c++那样的静态语言那漫长的编译和链接工作,同样作为静态语言的 Go 语言,通过自身优良的构建机制,使得程序的构建过程变得微不足道,拥有了像脚本语言和动态语言那样的高效开发的能力。另外,在运行速度方面 Go 语言也可以与 C/C++ 相提并论。

5. 内存问题(通常是内存泄漏): Go 语言像其它静态语言一样执行本地代码,但它依旧运行在某种意义上的虚拟机,以此来实现高效快速的垃圾回收。Go 语言自己的 GC 机制随时间在优化,就我所知已经经历了几次大的优化。

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

7. 安装第三方包非常简单 go install package。

8. Go 语言还支持调用由 C 语言编写的海量库文件,从而实现对过去开发的软件进行快速迁移。

语言特性

1. Go 语言没有类和继承的概念。它通过接口(interface)的概念来实现多态性。Go 和传统的面向对象语言不同,抛弃了臃肿的面向对象编程技术(个人觉得指的就是继承)。

2. 函数作为 Go 语言中的基本构件, 更加灵活的使用它。

3. Go 语言使用静态类型,所以它是类型安全的,加上通过构建到本地代码,程序的执行速度也非常快。

4. 强类型语言,不允许任何隐式的类型转换。原则:让所有东西都是显式的。

5. 支持交叉编译,比如可以在 linux 系统上面开发运行 windows 下的应用程序。这是第一门完全支持 UTF-8 的编程语言,这不仅体现在它可以处理使用 UTF-8 编码的字符串,就连它的源码文件格式都是使用的 UTF-8 编码。

用途

1. Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

2. Go 语言一个非常好的目标就是实现所谓的复杂事件处理(CEP),这项技术要求海量并行支持,高度的抽象化和高性能。

3. 因为垃圾回收和自动内存分配的原因,Go 语言不适合用来开发对实时性要求很高的软件。

特性缺失

许多能够在大多数面向对象语言中使用的特性 Go 语言都没有支持,但其中的一部分可能会在未来被支持。

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

小节

Go 语言优势:

  • 简化问题,易于学习
  • 内存管理,简洁语法,易于使用
  • 快速编译,高效开发
  • 高效执行
  • 并发支持,轻松驾驭
  • 静态类型
  • 标准类库,规范统一
  • 易于部署
  • 文档全面
  • 免费开源