Go基础-核心特性和前景

目录

go语言的简介:

go语言特性

1、高并发:

2、内存回收(GC):

3、内存分配:

4、编译:

5、网络编程

6、函数多返回值

7、语言交互性

8、异常处理

9、其他特性:

go语言可以做什么:


go最大优势:就是执行速度和开发效率都很出色,从语言级别支持并发,执行速度快是因为go是编译型静态语言,他在执行速度上比解释型语言具有先天的优势,生产效率高是基于go的语法和结构简明,易学易用。

go语言的简介:

1、go代码编译成机器码非常迅速

2、具有方便的垃圾收集机制和强大的运行时反射机制

3、是一个快速的,静态类型的编译型语言,感觉却像动态类型的解释型语言

4、go语言据有很强的表达能力,它简洁,清晰,高效,go语言推崇的思想是大道至简,小而蕴真

go语言特性

1、高并发:

go语言最大亮点的特性就是并发编程,且编程简单,高并发也是未来高性能场景的中重要筹码,不同于多线程和多进程,go语言的并发执行单元是gorountine的协程,协程又称微线程,比线程更轻量,开销更小,性能更高,操作简单,关键字go用于启动协程,并且可以在同一台机器上可以启动成千上万个协程,协程间一般由应用程序显式实现调度,上下文切换无需下到内核层,高效不少。协程间通信靠独有的channel机制实现

2、内存回收(GC):

内存自动回收,再也不需要开发人员进行内存的管理,只需要new进行分配内存,不需要进行释放,GC的过程是:先stop the world ,扫描所有对象判活,把可回收的对象在一段bitmap区中标记下来,接着立即start the world,恢复服务,同时起一个gorountine回收内存到空闲list中以备复用,不进行物理释放,物理释放由专门线程定期执行,GC瓶颈在于每次都要扫描所有对象判活,待收集的对象越多,就越慢,GC性能可以随着版本不断更新会不断优化。

3、内存分配:

在初始化阶段直接分配一块大内存区域,然后切割跟程各个大小等级的内存块,放到不同的空闲list中,对象分配空间时从空闲list中取出大小相当的内存块,内存回收时,会把不用的内存重新放到空闲的list,空闲内存会按照一定策略合并,以减少碎片

4、编译:

编译快也是go语言的一大亮点之一,目前golang有两种编译器,一种是建立在GCC基础上的Gccgo。另外是分贝针对64位*64和32位*86计算机的一套编译器,go语言依赖的第三方库基本上都是在github上,所以在代码的import中加上对应的github路径就可以使用了,库会默认下载到工程的pkg目录下。编译的时候会默认检查代码中所有实体的使用情况,凡事没有使用的package或者是变量,都会编译不通过,这也是go语言比较严谨的地方。

5、网络编程

go语言诞生在互联网时代,天生具备了去中心化,分布式等特性,表现为提供了丰富便捷的网络编程接口,比如socket用net.Dial(基于tcp/udp,封装了传统的connect,listen,accept等接口),http用http.Get/Post(),rpc用client.Call,在go语言中还有一个重要的能力,就是自带高性能HttpServer,通过简单的代码调用,就可以得到基于协程的高性能服务,更重要的是,维护成本低,没有任何依赖。

6、函数多返回值

允许函数返回多个值,在某种场景下,可以有效的简化编程,go语言推荐的编程风格,是函数返回的最后一个参数为error类型(只要逻辑体中可能出现异常),这样,在语言中支持多个返回值就很必要了

7、语言交互性

语言交互性是指本语言和其他语言之间的交互,比如可以调用其他语言编译的库,go和以和c程序进行交互,在go语言中直接重用了大部分c模块。

8、异常处理

如果是普通异常:产看被调用方返回error对象

如果是严重异常:3个关键字defer,panic,recover,defer是函数结束后执行,先进后出,panic是程序出现无法修复的错误时使用,但会让defer执行完,recover会修复错误,不至于程序终止,当不确定函数不会出错的时候使用defer+recover

9、其他特性:

类型推导:在定义变量的时候支持var ABC= 10 这样的语法,看起来像动态类型的语言,但是go其实是强类型的,是因为前面定义会被推导出int类型

接口interface:一个类型只要实现了某个interface的所有方法,即可实现该interface,无需显式去继承,go编程规范推荐每个interface只提供一到两个的方法,这样使得每个接口的目的非常清晰

defer 机制:提供关键字defer,可以通过该关键字制定需要延迟执行的逻辑体,就是在函数体return前或出现panic时执行,这种机制非常适合善后逻辑处理,比如可以尽早避免可能出现的资源泄漏问题,可以说defer是继goroutine和channle之后另一个非常重要,实用的语言特性,对defer的引入,在很大程度上可以简化编程,并且在语言描述上显的更为自然,极大的增强了代码的可读性

包的概念:和python一样,包的作用是提高代码的复用性

交叉编译:比如说可以在linux系统上开发windows下运行的程序。

go语言可以做什么:

1、服务器编程语言

2、分布式系统,数据库代理器,中间件等

3、网络编程

4、数据库操作

5、开发云平台

猜你喜欢

转载自blog.csdn.net/Mojitoice/article/details/107468436