Go语言-让我印象深刻的13个特性

我们正在加速进入云原生时代,Go语言作为云原生的一块基石,确有它的独到之处。本文介绍Go语言的几个让我印象深刻的特性。

1、兼顾开发效率和性能

Go语言兼顾开发效率和性能。可以像Python那样有很快的开发速度,也可以像C++那样有很快的执行速度。

2、编译速度很快

编译速度很快,减少编译等待时间。其实编译时间长,对开发人员未必是坏事,可以有个正当理由摸鱼了,哈哈!

3、没有面向对象的束缚

Go语言有些面向对象的特性,没有太多面向对象的束缚,但是一样可以做到代码复用。

Go语言虽然不是面向对象的语言,但是依然支持面向对象的开发模式,只是没有继承这种特性。

Go语言推荐使用组合而非继承的设计模式,只需要将一种类型嵌入到另一种类型,就能复用所有的功能。

4、自带垃圾回收器

自带垃圾回收器,不需要用户自己管理内存。

5、最吸引我的特性 --- 并发

Go语言最吸引我的特性的是它天生对并发的支持。采用了类似虚拟线程的概念,使用很少的代码,占用更少的内存,就可以写出复杂的并发程序。

Go语言的并发同步模型,是以消息传递为模型。通过通道(channel)在各个goroutine之间传递消息,来实现同步访问,而非通过对数据加锁来实现同步,这一点与其他语言不同。

Go语言内部实现了一个逻辑处理器,每个逻辑处理器对应一个线程,每个逻辑处理器可以处理多个并发程序。正是因为这种并发程序不会独占线程的方式,所以Go语言的并发会占用更少的线程和内存。

6、独特的接口实现机制

Go语言具有独特的接口实现机制,允许用户对行为进行建模,而不是对类型进行建模。

在Go语言中,不需要声明某个类型实现了某个接口,编译器会自动判断一个类型的实现是否符合正在使用的接口。

说白了就是不需要强制指定某个类实现了某个接口。

7、独特的_符号

Go语言的_特性是为了让程序的可读性更强,Go编译器不允许声明导入某个包却不使用,也不允许在函数中声明了某个变量却不使用。

8、init函数

Go语言中可以定义init函数,程序中每个代码文件里的init函数都会在main函数执行前调用。

9、允许一个函数返回多个值

Go语言中允许一个函数返回多个值,单就这一点就可以让程序员写代码更舒心了,有时候代码写的很舒畅的时候,突然为了几个简单的返回值再去定义一个对象,实在有点糟心。

10、所有的变量都以值的方式传递。

Go语言中,所有的变量都以值的方式传递。指针变量有点特殊。因为指针变量的值是所指向的内存地址,在函数间传递指针变量,是在传递这个地址值,所有依旧被看做以值的方式在传递。

11、支持闭包

Go语言支持闭包,在闭包里并不是拿到外部变量的副本,而是直接访问外层函数作用域中声明的这些变量本身。

12、关键字Defer

Defer后的代码会在函数返回时才会执行。哪怕函数意外奔溃终止,也能保证Defer安排的函数会被执行。

引入这个关键字的初衷是为了提高代码可读性。可以将打开、关闭资源的代码成对靠近的写在一起,避免了try...catch...finally这样散落的代码组织形式。

13、函数和方法

Go语言有些函数式编程的特性。Go语言中有函数和方法,他俩的区别是:如果声明的函数带有接受者,则是方法。

方法的接受者分为:指针接受者值接受者。使用指针接受者的方法,只能使用指针类型调用。使用值接受者的方法,使用指针类型和值类型都可以调用。

参考文献:《Go语言实战》

本篇完结!感谢你的阅读,欢迎点赞 关注 收藏 私信!!!

原文链接: www.mangod.top/articles/20...mp.weixin.qq.com/s/cKCo1KcK1...

相关推荐
ggaofeng9 小时前
通过命令学习k8s
云原生·容器·kubernetes
qq_道可道12 小时前
K8S升级到1.24后,切换运行时导致 dind 构建镜像慢根因定位与解决
云原生·容器·kubernetes
郝同学的测开笔记15 小时前
云原生探索系列(十二):Go 语言接口详解
后端·云原生·go
mit6.82416 小时前
[Docker#5] 镜像仓库 | 命令 | 实验:搭建Nginx | 创建私有仓库
linux·后端·docker·云原生
数据猿17 小时前
【金猿人物展】博睿数据董事长兼CEO李凯:云原生与数据治理融合,实现全域数据协同...
云原生
一点一木1 天前
WebAssembly:Go 如何优化前端性能
前端·go·webassembly
数据智能老司机1 天前
Rust原子和锁——Rust 并发基础
性能优化·rust·编程语言
A ?Charis1 天前
我来讲一下-Service Mesh.
云原生·service_mesh
严格要求自己2 天前
nacos-operator在k8s集群上部署nacos-server2.4.3版本踩坑实录
云原生·容器·kubernetes
少吃一口就会少吃一口2 天前
k8s笔记
云原生·容器·kubernetes