跟着课程思路简易学习Go——Go基本特性 | 青训营笔记

76 阅读2分钟

Go基本特性

1. 高性能、高并发

Golang是编译型语言(C、C++也是编译型语言),拥有比Java、Python等编译型语言更更快的运行速度,同时消耗的内存也更加小。通过下图可以清楚看出为什么编译型语言速度要更加快。

image.png

大多数现代编程语言(如 Java、Python 等)都来自于 90 年代的单线程环境。这些语言大多数都支持多线程,但是真正的问题来自于并发执行、线程锁、竞争条件和死锁。像Java中创建新的线程会大量消耗内存,一个新的线程会消耗大约1MB大小的堆内存,因此Go中则提出了goroutine来替代线程,它们从堆中消耗了大约2KB的内存。

2.语法简单、易于维护

Go的设计者在设计之初就将简化语法作为目标之一,同时又得益于谷歌强大的代码库,在代码的开发上都尽量使其让其他开发者容易理解,而且一段代码应该对另一段代码有最小的影响。

Go 有意的忽视了许多现代面向对象语言的一些特性。

  • 没有类。  所有代码都仅用 package 分开,Go 只有结构体而不是类。
  • 不支持继承。  这将使得代码易于修改。在其他语言中,如: Java/Python,如果类 ABC 继承类 XYZ 并且你在类 XYZ 中做了一些改动,那么这可能会在继承类 XYZ 的其他类中产生一些副作用。通过移除继承,Go 也使得理解代码变得很容易  (因为当你在看一段代码时不需要同时查看父类)
  • 没有构造方法。
  • 没有注解。
  • 没有泛型。
  • 没有异常。

参考资料:知乎《golang语言介绍》

3.跨平台

通过不同平台对应的go编译器对代码进行编译能够实现不同平台的使用。

拓展:不同语言如何实现跨平台

参考上面编译型语言和解释型语言的流程图,解释型语言Java、C#等需要有对应操作系统相关的虚拟机首先生成一个中间文件‘字节码’再用编译器编译从而实现跨平台,而编译型语言C、C++则只要有该系统相应的编译器就能够完成跨平台,很明显编译型语言能够跨平台的范围会比解释型语言更大。

参考资料:CSDN《跨平台语言》

4.垃圾回收

和Java、C#等完全面向对象的编程语言一样,Golang也支持自动的垃圾回收,而不需要像C/C++一样手动去delete或者调用free()去释放内存,从语言内部机制的层面去帮助开发者解决令人苦恼的内存泄露问题。