首页 > 其他分享 >Go语言使用场景 | go语言与其它开源语言比较 | Go WEB框架选型

Go语言使用场景 | go语言与其它开源语言比较 | Go WEB框架选型

时间:2022-12-21 16:35:56浏览次数:63  
标签:WEB 语言 编程 C++ go 开发 Go

 

一、Go语言使用场景

1. 关于go语言

2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++, 这就是Golang。出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发,不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。

被称为GO语言之父的Rob Pike说,你是否同意GO语言,取决于你是认可少就是多,还是少就是少(Less is more or less is less)。Rob Pike以一种非常朴素的方式,概括了GO语言的整个设计哲学–将简单、实用体现得淋漓尽致。

很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。

Go语言是谷歌2009年发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。

1.1 开发团队

在这里插入图片描述GO语言的开发阵营可以说是空前强大,主要成员中不乏计算机软件界的历史性人物,对计算机软件的发展影响深远。Ken Thompson,来自贝尔实验室,设计了B语言,创立了Unix操作系统(最初使用B语言实现),随后在Unix开发过程中,又和Dennis Ritchie一同设计了C语言,继而使用C语言重构了Unix操作系统。Dennis Ritchie和Ken Thompson被称为Unix和C语言之父,并在1983年共同被授以图灵奖,以表彰他们对计算机软件发展所作的杰出贡献。Rob Pike,同样来自贝尔实验室,Unix小组重要成员,发明了Limbo语言,并且和Ken Thompson共同设计了UTF-8编码,《Unix编程环境》、《编程实践》作者之一。

2. go语言的特性

  1. 自动垃圾回收降低了开发难度
    内存和资源管理一直是一个让人非常抓狂的难题。在其他语言(如C或C++)中,使用内存前要先分配这段内存,使用完毕后再将其释放掉,一个小疏忽就可能引发内存泄漏,导致程序甚至系统崩溃。而Go语言的现代化垃圾回收机制显著地降低了开发难度,把无趣的内存管理交给专业的编译器去做,而让程序员专注于更有趣的事情。

  2. 支持函数多返回值
    目前的主流语言中除Python外基本都不支持函数的多返回值功能,但很多情况下开发者非常需要这个功能。Go语言的多返回值功能让开发者既不用再只为了返回多个值而专门定义一

  3. 漂亮的错误处理规范
    Go语言引入了defer关键字用于标准的错误处理流程,并提供了内置函数panic、recover完成异常的抛出与捕获。与C++和Java等语言中的异常捕获机制相比,Go语言的错误处理机制可以大量减少代码量,开发者无需再仅为了程序安全而添加大量一层套一层的try-catch语句。
    golang不支持try…catch这样的结构化的异常解决方式,因为觉得会增加代码量,且会被滥用,不管多小的异常都抛出。golang提倡的异常处理方式是:

    • 普通异常:被调用方返回error对象,调用方判断error对象。
    • 严重异常:指的是中断性panic(比如除0),使用defer…recover…panic机制来捕获处理。严重异常一般由golang内部自动抛出,不需要用户主动抛出,避免传统try…catch写得到处都是的情况。当然,用户也可以使用panic(‘xxxx’)主动抛出,只是这样就使这一套机制退化成结构化异常机制了。
  4. 并发编程
    Go语言在并发编程方面比绝大多数语言要简洁不少,这一点是其最大亮点之一,也是其在未来进入高并发高性能场景的重要筹码。
    不同于传统的多进程或多线程,golang的并发执行单元是一种称为goroutine的协程。
    在当今这个多核时代,并发编程的意义不言而喻。当然,很多语言都支持多线程、多进程编程,但遗憾的是,实现和控制起来并不是那么令人感觉轻松和愉悦。Golang不同的是,语言级别支持协程(goroutine)并发(协程又称微线程,比线程更轻量、开销更小,性能更高),操作起来非常简单,语言级别提供关键字(go)用于启动协程,并且在同一台机器上可以启动成千上万个协程。

  5. 网络编程
    由于golang诞生在互联网时代,因此它天生具备了去中心化、分布式等特性,具体表现之一就是提供了丰富便捷的网络编程接口,比如socket用net.Dial(基于tcp/udp,封装了传统的connect、listen、accept等接口)、http用http.Get/Post()、rpc用client.Call(‘class_name.method_name’, args, &reply),等等。

  6. 编译
    运行编译好的Go程序不需要额外安装像java的jdk或者js的node这样的运行环境,同时Go提供了原生的交叉编译支持,跨平台的开发和部署非常方便。
    当然编译运行也更容易带来更好的运行效率,不过这方面也不能迷信,越来越多的“解释型”编程语言的运行环境开始支持JIT,这让Go这种编译所带来的性能优势变得没有那么明显。

3. go语言使用场景

「Go」(又称:Golang)是一种怎样的编程语言?
参考URL: https://www.zhihu.com/question/321500270/answer/674270478

鉴于Go语言的特点和设计的初衷,Go语言作为服务器编程语言,很适合处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理等;网络编程方面,Go语言广泛应用于Web 应用、API应用、下载应用等;除此之外,Go语言还适用于内存数据库和云平台领域,目前国外很多云平台都是采用Go开发。

  • 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。
  • 分布式系统、数据库代理器、中间件等,例如Etcd。
  • 网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用,而且Go内置的net/http包基本上把我们平常用到的网络功能都实现了。
  • 数据库操作
  • 开发云平台,目前国外很多云平台在采用Go开发。

实现服务器端服务的业务逻辑,是C++,Java,Ruby,Python和Php的很好替代。也可以用来实现高并发的中间件

二、go语言与其它开源语言比较

  • 开发效率 GO语言使用起来简单、代码描述效率高、编码规范统一、上手快。

1. Go语言设计初衷

开启go 05.Go语言和其他语言的对比
参考URL: https://studygolang.com/articles/24885

Go希望成为互联网时代的C语言。多数系统级语言(包括Java和C#)的根本编程哲学来源于C++,将C++的面向对象进一步发扬光大。但是Go语言的设计者却有不同的看法,他们认为值得学习的是C语言。C语言经久不衰的根源是它足够简单。因此,Go语言也是足够简单。

所以,他们当时设计Go的目标是为了消除各种缓慢和笨重、改进各种低效和扩展性**。Go是由那些开发大型系统的人设计的,同时也是为了这些人服务的;它是为了解决工程上的问题,不是为了研究语言设计;它还是为了让我们的编程变得更舒适和方便。**

但是结合Google当时内部的一些现实情况,如很多工程师都是C系的,所以新设计的语言一定要易学习,最好是类似C的语言;20年没有出新的语言了,所以新设计的语言必须是现代化的(例如内置GC)等情况。最后根据实战经验,他们向着目标设计了Go这个语言。

2. go语言与JAVA

编译语言,速度适中(2.67s),目前的大型网站都是拿java写的,比如淘宝、京东等。主要特点是稳定,开源性好,具有自己的一套编写规范,开发效率适中,目前最主流的语言。

3. go语言与C/C++

  • C
    执行速度快(4.28),学习难度适中,开发速度适中。但是由于c#存在很多缺点,京东、携程等大型网站前身都是用c#开发的,但是现在都迁移到了java上。

  • C/C++
    现存编程语言中的老祖,其他语言皆由此而生。执行速度最快无人能及。但是写起来最为复杂,开发难度大。

从语言的特性来讲,Java与C有较大的差异,而go与C则更为接近。

4. go语言与python

2019年python、golang、java、c++如何选择?
参考URL: https://zhuanlan.zhihu.com/p/65177007
对比学习:Golang VS Python3
参考URL: https://zhuanlan.zhihu.com/p/65613337

Golang和Python都是目前在各自领域最流行的开发语言之一。

Golang其高效而又友好的语法,赢得了很多后端开发人员的青睐,最适用于高并发网络编程的语言之一。

Python不用说,TIOBE排行榜的前十常驻居民,现在已经稳定在前五了。在机器学习、AI、数据分析领域成为必学语言。

  • 与python比,go在性能上占有明显优势,因为解释型语言与编译型语言在运行速度上不可同日而语,另外go在语法简明和类型系统设计上优于python。

  • 性能强劲的同时,开发效率又不差于Python等动态语言。通常比原生 Python 应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。

Python
脚本语言,速度最慢(258s),代码简洁、学习进度短,开发速度快。豆瓣就是拿python写的。Python著名的服务器框架有django,flask。但是python在大型项目上不太稳定,因此有些用python的企业后来迁移到了java上。

三、Go语言与其它开源语言比较

go语言需要掌握什么web框架呢?
参考URL: https://www.zhihu.com/question/426948336
[推荐]Go语言框架:Beego vs Gin
参考URL: https://www.imooc.com/video/18655

在这里插入图片描述
go类似 spring boot的WEB框架,主要有 gin/beego/gf

  • gin Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 优于 httprouter,速度提高了近 40 倍。如果你需要极好的性能,使用 Gin 吧。
    官方网址:https://gin-gonic.com/
    在这里插入图片描述* Beego 作为国人开发的一款框架,它的中文文档相当丰富,同时它的社区也非常丰富。国内很多大企业都在使用beego框架,可以说它的稳定性还是很好的。Beego是一款MVC框架,提供了Restful功能,同时热编译、自动化测试代码以及自动化打包部署都是它受到人们追捧的特点。
    在这里插入图片描述
    在这里插入图片描述

四、参考

Rust vs Go:哪个更受欢迎?
参考URL: http://blog.studygolang.com/2020/05/rust-vs-go/
为什么要使用 Go 语言?Go 语言的优势在哪里?
参考URL: https://www.zhihu.com/question/21409296

 

标签:WEB,语言,编程,C++,go,开发,Go
From: https://www.cnblogs.com/python9090/p/16996516.html

相关文章

  • Windows 平台下 Go 语言的安装和环境变量设置
    1.Go语言SDK安装包下载和安装最新稳定版1.5.3安装包go1.5.3.windows-amd64.msi下载地址https://golang.org/dl/,大小约69MB(作者上传了一份该版本安装包到CSDN......
  • GO语言凭什么是区块链的首选语言
    GO语言凭什么是区块链的首选语言区块链的火热也带动了GO语言开发者的突增,那凭什么GO语言会成为最主要的区块链构建语言之一。我认为这得益于GO语言的性能、抽象度、简单性......
  • 五款最棒的Go语言开发工具?
    新一代编程神语言Go,由于其同时提供了开发效率与运行效率,可谓是近几年在编程界最耀眼的新星,越来越多的大神投入其中,也越来越成熟,开源库代码越来越多.想必现在也有......
  • golang对比java的优势_golang语言和其它编程语言的对比
    golang对比java的优势_golang语言和其它编程语言的对比 在软件行业做过一段时间的人都知道,没有万能的编程语言,也没有万能开发框架,更没有万能的解决方案。任何新技术的产......
  • go语言能做什么
    一、执行性能缩短API的响应时长,解决批量请求访问超时的问题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下,要做到并行......
  • 基于Go语言实现高并发推荐系统架构设计
    你好!我是封幼林,在小年糕负责推荐系统,主要从事服务架构相关工作。今天我要和你分享的话题是《高并发推荐系统架构设计》。这次分享主要分为以下这几个部分:推荐系统的基......
  • go通过chan和go func进行并发控制
    原文:Go并发实战核心编程【一】1.需求启动一个goroutine,将1-10000的数字放入chan中启动4个goroutine从chan中读取数字,并计算是不是素数是素数就讲结果放入结果chan......
  • C语言学习初识day1
    全局变量,局部变量:      放在大括号里的变量就是局部变量;全局变量生命周期是整个程序。当局部变量和全局变量辆重名时,局部变量优先。常量,变量,常变量:C语言中的常量分......
  • ​WEB漏洞渗透测试靶场 资源整理
    整理了一些WEB漏洞本地靶场资源,包括针对性的漏洞专题如SQL注入,XSS等…以及综合类的;1.测试靶场列表2.测试靶场简介 ......
  • forms组件渲染标签 、forms组件展示信息 、forms组件校验补充、 forms组件参数补充 、
    目录forms组件渲染标签forms组件展示信息forms组件校验补充forms组件参数补充forms组件源码剖析modelform组件django中间件forms组件渲染标签<p>forms组件渲染标签的方式......