Go 语言的由来、特性

网友投稿 267 2022-09-13

Go 语言的由来、特性

学习Go语言的目的是为了让我们读懂代码,当生产系统遇到故障点时候,我们能够从代码点级别找到根本点原因。

统一思想-12 factors

有一个著名的原则在指导整个微服务架构体系,就如上图所示。

I. 基准代码  一份基准代码,多份部署

代码驱动整个部署,在以前的项目管理当中,项目管理是非常混乱的,生产系统出现故障之后经常找不到原始代码,一份代码多份部署就是部署在多个平台的代码在仓库里面保留一份。这样生产系统出现故障可以找到具体的版本。

III. 配置   在环境中存储配置

鼓励配置和代码分离,如果我们要修改代码,比如java,代码编译为字节码,变成war包。

如果是go和c,编译出来的可能是可执行文件,这一部分是代码点部分。这部分代码在运行的时候

可能会需要读取一些配置,这些配置通常是文本文件。

这样的好处是在生产系统变更时候,如果是代码变更,需要走整个流水线的,需要将源代码进行构建和测试,再根据流水线的定义发布到测试环境,预生产环境,生产环境,这个流程是比较重的。

但是对于配置来说点话,如果修改配置,这个配置有时候是可以在生产系统进行的。

VI. 进程   以一个或多个无状态进程运行应用

鼓励应用以一个以多个无状态的进程去运行,这样好处是进程都是无状态的,它不依赖于数据,当应用进程出现问题的时候可以随意去停止进程,并且使用新的进程替换它。

上面都是云原生和微服务点指导思想。尽量将数据变为没有数据依赖的,无状态的。当一个进程出现问题的时候可以轻易的替换它。

为什么需要Go语言

Go 语言的原则

Go尽量点将语法精简,把实现精简,这样对开发者来说相对友好。

为什么需要 Go 语言

其他编程语言的弊端。

硬件发展速度远远超过软件。(现有的语言对多核支持不友好)C 语言等原生语言缺乏好的依赖管理 (依赖头文件,c语言的很多依赖是基于头文件的,非常难定义去依赖于哪一个模块和什么版本,最后c语言的依赖会变的非常复杂,也容易因为版本的问题导致生产故障)Java 和 C++ 等语言过于笨重(虽然解决了依赖管理点问题,但是要去写一个java程序,很多时候java的基本包是无法满足你的需求点,那么你就需要依赖于一个非常重的框架去做,这使得你启动任何点小项目都会变成一个非常重的项目)系统语言对垃圾回收和并行计算等基础功能缺乏支持对多核计算机缺乏支持(代码写完之后是没有充分利用计算机里面的cpu资源的)

Go 语言是一个可以编译高效(在编译的时候可以充分的利用多核),支持高并发的(由于协程,所以在单节点上启动几十万上百万的协程都是可能的,对并发的支持会非常的强大),面向垃圾回收(不太需要关心内存回收和泄漏)的全新语言。

秒级完成大型程序的单节点编译。依赖管理清晰。不支持继承,程序员无需花费精力定义不同类型之间的关系。支持垃圾回收,支持并发执行,支持多线程通讯。对多核计算机支持友好。

1. 为什么需要 Go 语言

Go 语言不支持的特性

• 不支持函数重载和操作符重载

• 为了避免在 C/C++ 开发中的一些 Bug 和混乱,不支持隐式转换

• 支持接口抽象,不支持继承

• 不支持动态加载代码

• 不支持动态链接库(这样的好处就是程序一旦编译出来,就可以直接运行,付出的代价就是依赖的包可能会有些大)

• 通过 recover 和 panic 来替代异常机制(简单的error,需要你使用的时候,给其赋值一个message,message是什么,error就是什么)

• 不支持断言

• 不支持静态变量

如果你没做过其他语言的开发,那么恭喜,以上大部分复杂的问题,在go语言里不存在,你也无需关心。

Go 语言特性衍生来源

包定义:同一类相关的文件可以放到相关的目录,这些目录可以将其命名为一个一个的包

支持接口抽象,但是不支持接口继承,定义一个接口,在接口里面可以定义一系列的function,

然后可以定义不同的对象,然后为不同的对象实现这些接口方法。这样就将一系列的行为抽象出来了,其次有不同的对象实现这些接口,它们具有不同的行为。

Csp多线程模型:启动一系列轻量级用户态的协程,彼此之间通过管道去做通信。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:广告情报局:好文案,要有场景感!
下一篇:Ansible Inventory 主机清单 和 如何匹配主机组
相关文章

 发表评论

暂时没有评论,来抢沙发吧~