为什么劝你要学习Golang以及GO语言(Go语言知识普及)

news2024/11/26 2:26:52

Go语言

 

一、 Go语言的由来

Go语言亦叫Golang语言,是由谷歌Goggle公司推出。

传统的语言比如c++,大家花费太多时间来学习如何使用这门语言,而不是如何更好的表达写作者的思想,同时编译 花费的时间实在太长,对于编写-编译-运行这个链条来说周期太长。动态语言如Python,由于没有强类型的约束,多问题需要在运行时发现,这种低级错误更应该交给编译器来发现。于是Go诞生了。

二、 Go语言的特点

它能长期保持简单性、稳定性和健壮性。Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发速度和易维护性,有人形容Go语言: Go = C + Python , 说明Go语言既有C静态语言程序的运行速度,又能达到Python动态语言的快速开发。

Go 的标准库高效、简洁、正确地实现了丰富的网络协议,并巧妙地结合了协作/抢占式多任务处理模型,因此使用 Go 编写可扩展的互联网软件非常容易。

Go语言有以下特性:

1. 自动垃圾回收

C/C++最头疼的就是指针问题,一不小心就野指针了或者又越界了。在Go语言里再也不用担心,也不用考虑delete或 者free,系统自动会回收。

2. 函数可以返回多个值

这个很神奇,大多数语言只能返回一个值,Go语言可以返回多个值。这个功能使得开发者再不用绞尽脑汁的想到底 怎么返回值的设计,也不用为了传值专门定义一个结构体。

3.并发编程

Go语言天然并发,只需要关键字“go”就可以让函数并发执行,使得并发编程变得更为简单,这也是Go语言最大的优势。

4. 没有依赖地狱, 甚至是glibc

5. 编译一次,随处拷贝,部署极为方便


  • 设计Go语言是为了解决当时Google开发遇到的以下这些问题:
  1. 大量的C++代码,同时又引入了Java和Python;
  2. 成千上万的工程师
  3. 数以万计行的代码
  4. 分布式的编译系统
  5. 数百万的服务器

其主要有以下几个方面的痛点:

  1. 编译慢
  2. 失控的依赖
  3. 每个工程师只是用了一个语言里面的一部分
  4. 程序难以维护(可读性差、文档不清晰等)
  5. 更新花费的时间越来越长
  6. 交叉编译困难

  • Go主要应用的领域

目前Go主要应用在下面这些系统:

①Web服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。

②容器开发:Docker,使开发高效且可预测;Kubernetes,也称为K8s,是一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。

③微服务、分布式系统、数据库代理器等,例如gRPC、Etcd等。

④Web网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包足够强大,基本就涵盖了常用的Web应用方法了。

⑤数据库,前一段时间Google开发的Groupcache,Couchbase的部分组建,Tidb,Cockroachdb,Influxdb等。

⑥云平台,目前国外很多云平台在采用Go开发,CloudFoundy的部分组建,前VMare的技术总监自己出来搞的Apcera云平台。


  • Go语言实战知识图谱

  • 对于Go语言,一直存在着争议,很多人善于使用Go语言进行开发,但并不是所有人都喜欢Go语言,那么为什么推荐你学Go语言呢?

1、简单易学

Go 语言简单易学,学习曲线平缓,不需要像 C/C++ 语言动辄需要两到三年的学习期。Go 语言被称为“互联网时代的C语言”。Go 语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化,去掉了不需要的表达式括号,循环也只有 for 一种表示方法,就可以实现数值、键值等各种遍历。

2、代码风格统一

Go 语言提供了一套格式化工具——go fmt。一些 Go 语言的开发环境或者编辑器在保存时,都会使用格式化工具进行修改代码的格式化,这样就保证了不同开发者提交的代码都是统一的格式。

3、原生支持并发

Go语言是一种非常高效的语言,从语言层原生支持并发,使用起来非常简单。Go语言的并发是基于 Goroutine 的,Goroutine 类似于线程,但并非线程,是Go语言面向线程的轻量级方法。创建 Goroutine 的成本很低,只需几千个字节的额外内存。

4、开发效率高

Go语言虽然是一门编译型的语言,但是它内置了垃圾回收机制,降低了开发者的心智负担,使其拥有像Python、PHP等解释性语言的一样的开发效率。真正实现了开发效率和执行效率的完美结合。

5、自由高效

Go语言的编译速度明显优于 Java 和 C++,还拥有接近C语言的运行效率以及接近 PHP 的开发效率,可以说Go语言将运行效率和开发效率进行了完美的融合。同时,Go语言还支持当前所有的编程范式。开发者们可根据需求自由组合。

6、强大的标准库

Go里面的标准库非常稳定并且丰富多样,包括网络、系统、加密、编码、图形等各个方面。

7、稳定性强

Go语言拥有强大的编译检查、严格的编码规范和很强的稳定性,此外Go语言还提供了软件生命周期(如开发、测试、部署、维护等)的各个环节的工具。

8、部署方便

不需要使用虚拟机,Go语言的代码可以直接输出为二进制可执行文件。而且Go语言拥有自己的链接器,不依赖任何系统提供的编译器和链接器。

9、垃圾回收

在使用Go语言进行开发时,在内存方面开发者只需要关注内存的申请即可,并不需要关系内存的释放,因为Go语言内置了 runtime 来自动进行管理。

以上就是本篇文章的分享,如果你觉得有用,记得点赞收藏,以防找不到我哦~

(部分文字及图片整理于网络,如有侵权联系删除)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/42764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言只推荐这1本宝藏书,你读过吗?

入门的大家随便搜搜学起来都不会出错,进阶的推荐1本豆瓣评分9.1,这本经典之作真正地让人搞懂了烦人的指针。 指针为什么如此重要?C语言圈内有一句经典的自嘲:C语言就只有指针可以用了。如果你干掉struct、干掉union、干掉数组、甚…

html在线阅读小说网页制作模板 小说书籍网页设计 大学生静态HTML网页源码 dreamweaver网页作业 简单网页课程成品

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

管道通信: 有名管道 无名管道,行业大牛通通教会你

管道是一种最古老也是最基本的系统IPC形式,管道就像现实中的水管,水就像数据,它是消息传递的一种特殊方式,管道机制必须提供三方面的协调能力:互斥、同步和确定对方的存在。在Linux中是一种使用非常频繁的通信机制。从…

链表剖析及自己手撸“单链表“实现基本操作(初始化、增、删、改等)

一. 基础 1. 前言 链式存储结构,又叫链表,逻辑上相邻,但是物理位置可以不相邻,因此对链表进行插入和删除时不需要移动数据元素,但是存取数据的效率却很低,分为三类: (1).单(向)链表&#xff1…

【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程

前言 为什么要使用阿里图标库: 图标现在是很多地方都会用到的 一般我使用的时候都是直接在ui库中比如elementul自带的一些 有时候哪怕是感觉图标不是非常适合也是用的elementul图标,主要原因是懒 因为能直接复制的,就懒得再去阿里图标库下载…

如何让Java项目兼容更多的客户端设备(一)

如何让Java项目兼容更多的客户端设备(一) 引入 HTTP访问是无状态的,(服务器不知道是不是你访问的)所以我们不知道每次登录的是谁 如果想实现每次登录不用重复登录,最简单的就是让浏览器记住用户名和密码…

球面距离计算方式(杭州到各城市的球面距离计算球面距离)

1)杭州到各城市的球面距离 1、数据来源:自主计算 2、时间跨度:至今 3、区域范围:368个城市 4、指标说明:利用城市经纬度,计算球面距离 部分数据如下: (2)计算两个点之…

Sentinel配置持久化到Nacos实现流控熔断

控制台 jar 下载:github.com/alibaba/Sen… 启动参数 # 将控制台自身接入到sentinel nohup java -jar -Dproject.namesentinel-dashboard -Dcsp.sentinel.dashboard.serverlocalhost:8181 sentinel-dashboard-1.8.5.jar --server.port8181 &> sentinel.log …

单商户商城系统功能拆解38—分销应用—分销订单

c 下面以likeshop单商户高级版 商城系统为例进行功能拆解,likeshop单商户高级版商城系统可以实现快速部署,文档齐全,代码全开源,无加密,极易二次开发,助力企业以极低的成本上线电商业务。并且likeshop以其…

Java项目模块占用CPU过高问题分析

背景:近期一个模块(暂且称为A)新上了一个需求,改动了些代码,在测试环境部署之后,该模块系统CPU使用率动不动就飙升到90%,甚至200%,严重影像其他业务执行。排查过程 1.使用top查看当…

【LeetCode】813. 最大平均值和的分组

题目描述 给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。 注意我们必须使用 nums 数组中的每一个数进行分组,并且分数不一定需要是整数。 返回我们所能得到的最大 分数 是多少。答…

eclipse中创建的Maven Module和Maven Project及其间区别

eclipse中创建Maven Module和Maven Project及其间的区别Maven Module和Maven ProjectProject和Module的关系及用法Maven Module工程必须有父工程Maven Module和Maven Project Maven Project可以理解为父工程,是最上级的项目,一般没有其他parent项目。是一…

Word控件Spire.Doc 【图像形状】教程(6): 如何在 C#、VB.NET 的 Word 文档中插入形状和形状组

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

天河超算,安装Hypre

1)下载,解压 略 得到目录:hypre-master 源文件在src目录下面 src包含如下目录: 2)cmake编译 版本比较新 HYPRE_RELEASE_NAME hypre HYPRE_RELEASE_VERSION 2.26.0 HYPRE_RELEASE_DATE 2022/10/14 HYPRE_RELEASE_TIM…

CT正投影算法归纳

一、CT重建基本原理 CT 系统成像基本模型可以描述成:   f为待重建图像,P为投影数据,W为系统矩阵,其中,投影矩阵反映探测器上的投影与重建物体的关系,其模型刻画对于重建速度和精度有着重要影响。 二、…

Java:多线程基础(一)-创建线程的两种方式

目录 线程与进程 Thread类 创建线程的两种方式 方式1:继承Thread类 方式2:实现Runnable接口 * 方式2延伸:实现Callable接口 Callable接口 Futuretask类 返回线程计算结果:get() Callable:创建子线程…

Redis实战之共享session + jwt 实现登录拦截、刷新token

共享session问题 每个tomcat中都有一份属于自己的session,假设用户第一次访问第一台tomcat,并且把自己的信息存放到第一台服务器的session中,但是第二次这个用户访问到了第二台tomcat,那么在第二台服务器上,肯定没有第一台服务器…

百度边止血边扩张

在经过一系列的“内部调整”之后,百度交出了一份超预期的财报。北京时间11月22日,百度发布了截至2022年9月30日的第三季度财务报告。第三季度,百度实现营收325.4亿元,同比增长2%;归属百度的净利润(non-GAAP…

在线杂志小程序开发,开启在线阅读时代

互联网技术的快速发展,让人们越来越依赖从网络上查看各种新闻资讯。传统的纸质杂志已经很难顺应时代的发展脚步,但是人们对于杂志的需求并没有减少。因此为了更好的满足众多读者对于杂志的需求,开发在线杂志小程序是十分必要的。在线杂志阅读…