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...

相关推荐
小扳4 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
aherhuo14 小时前
kubevirt网络
linux·云原生·容器·kubernetes
catoop15 小时前
K8s 无头服务(Headless Service)
云原生·容器·kubernetes
小峰编程15 小时前
独一无二,万字详谈——Linux之文件管理
linux·运维·服务器·云原生·云计算·ai原生
桃园码工16 小时前
1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]
go·gin·环境搭建
小马爱打代码16 小时前
云原生服务网格Istio实战
云原生
云中谷16 小时前
Golang 神器!go-decorator 一行注释搞定装饰器,v0.22版本发布
go·敏捷开发
运维小文17 小时前
K8S中的PV、PVC介绍和使用
docker·云原生·容器·kubernetes·存储
ζั͡山 ั͡有扶苏 ั͡✾18 小时前
Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)
云原生·容器·kubernetes
Hadoop_Liang18 小时前
Kubernetes ConfigMap的创建与使用
云原生·容器·kubernetes