目录
基础知识
基本概念
一些特性
协程并发
管道
内存回收(GC)
编译
网络编程
语言交互性
异常处理
defer机制
应用领域
Go语言(Golang语言的简称)是一种静态强类型的编译型编程语言。
Go语言语法上与C相似,但有内存安全、GC(垃圾回收)等功能。
与C++相比,Go并不包括如枚举、继承、断言、虚函数等功能,但增加了切片(Slice)型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。
与Java相比,Go内嵌了关联数组(哈希表和字典),就像字符串类型一样。
使用Go语言编程既能实现开发效率高,又能实现程序执行时性能强。
高并发是Go语言的一大亮点。
Go语言支持协程并发,且操作简单。协程(goroutine)又称微线程,比线程更轻量、开销更小、性能更高。一个线程可以包含多个协程,协程间一般不做同步通讯,而Go语言中可通过 共享内存型 和 消息传递型 这两种方式实现协程间通讯。
管道(Channel)是Go语言在语言级别上提供的协程之间的通讯方式,可以使用管道在多个协程之间传递消息。注意管道是进程之内的通讯方式,如果要跨进程通讯的话,可以通过Socket等网络方式实现。
Go语言是内置运行时(runtime)的编程语言,可以完成类似预分配、内存池等操作。Go语言程序每次运行时可从操作系统申请一大块内存,由Go语言来对这块内存做分配,以避免每次分配内存都需要系统调用,这样可以提高程序运行时的性能。
Go语言回收对象内存时,一般并没有将其真正释放掉,只是放回预先分配的大块内存中,以便复用。当内存闲置过多时,会尝试归还部分内存给操作系统,以降低整体开销。
虽然Go语言有自动内存回收机制,但不要完全依赖它,必要的地方手动回收内存的效果可能会更好。
【拓展】C/C++允许程序员自己管理内存,没有垃圾回收机制也是C/C++运行起来速度快的一大原因。但是程序员的一些不小心可能导致 “内存泄漏”使得资源浪费 或者 “野指针”使得程序崩溃。为了提高程序开发的速度和程序的健壮性,Java和C#引入了内存回收机制,即让程序员不需要考虑内存回收,而是由语言特性提供垃圾回收器来回收内存。
编译涉及到编译速度和依赖管理。
Go语言具有两种编译器,绝大多数开源库都在Github上,在代码中import导入相关文件包就行了。
Go语言在编译时会默认检查代码中所有实体的使用情况,凡是有没使用到的包(Package)或者变量,都会编译不通过。
Go语言提供了丰富便捷的网络编程接口,具备去中心化、分布式特性。
Go语言里直接重用了大部分的C模块(Cgo),可以和C程序交互。
【拓展】语言交互性是指本语言能否和其它语言交互,例如调用其它语言编译的库。
Go语言没有try...catch这种错误处理机制。
Go语言提倡的异常处理方式为:
1.如果是普通异常,则被调用方返回error对象,调用方判断error对象。
2.如果是严重异常,则可使用def...recover...panic机制来处理。严重异常一般由Go语言内部自动抛出,不需要程序员手动抛出,这样能减少异常处理的代码量。
defer的引入,可以简化编程,并增强代码的可读性。
可通过defer关键字指定需要延迟执行的逻辑体,即在函数体return前或出现panic时执行。这种机制很适合善后逻辑处理,例如尽早避免可能出现的资源泄露问题。
1.服务器编程。例如日志处理、数据打包、虚拟机处理、文件系统等。
2.分布式系统。
3.数据库处理器。
4.中间件。
5.网络编程。如Web应用、API应用、下载应用。
6.云计算基础设施领域。
7.基础软件。
8.微服务。
9.互联网基础设施。