对Go语言的简单了解

目录

基础知识

基本概念

一些特性

协程并发

管道

内存回收(GC)

编译

网络编程

语言交互性

异常处理

defer机制

应用领域


基础知识

基本概念

Go语言(Golang语言的简称)是一种静态强类型的编译型编程语言。

Go语言语法上与C相似,但有内存安全、GC(垃圾回收)等功能。

与C++相比,Go并不包括如枚举、继承、断言、虚函数等功能,但增加了切片(Slice)型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持。

与Java相比,Go内嵌了关联数组(哈希表和字典),就像字符串类型一样。

使用Go语言编程既能实现开发效率高,又能实现程序执行时性能强。

一些特性

协程并发

高并发是Go语言的一大亮点。

Go语言支持协程并发,且操作简单。协程(goroutine)又称微线程,比线程更轻量、开销更小、性能更高。一个线程可以包含多个协程,协程间一般不做同步通讯,而Go语言中可通过 共享内存型 和 消息传递型 这两种方式实现协程间通讯。

管道

管道(Channel)是Go语言在语言级别上提供的协程之间的通讯方式,可以使用管道在多个协程之间传递消息。注意管道是进程之内的通讯方式,如果要跨进程通讯的话,可以通过Socket等网络方式实现。

内存回收(GC)

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的引入,可以简化编程,并增强代码的可读性。

可通过defer关键字指定需要延迟执行的逻辑体,即在函数体return前或出现panic时执行。这种机制很适合善后逻辑处理,例如尽早避免可能出现的资源泄露问题。

应用领域

1.服务器编程。例如日志处理、数据打包、虚拟机处理、文件系统等。

2.分布式系统。

3.数据库处理器。

4.中间件。

5.网络编程。如Web应用、API应用、下载应用。

6.云计算基础设施领域。

7.基础软件。

8.微服务。

9.互联网基础设施。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值