2020年热门Go语言开发的优点与缺点
本文谈谈Go语言的好与坏,并在目尾推荐了一个golang devops开发工程师学习完整体系。

什么是Go语言:
Go语言是Google开发的一种静态强类型、编译型、并发型,并具备垃圾回收功能的编程语言,它用批判吸收的眼光,融合C语言、Java等众家之长,将简洁、高效演绎得淋漓尽致。
Go语言起源于2007年,当时Google的技术大神们备受C++越来越臃肿的困扰,决心开发一种新的语言来取代C++。他们认为:与其在臃肿的语言上不断添加新的特性,不如简化编程语言。于是,Golang这门新语言应运而生。
在十年多的时间里,Go语言发展势头强劲,凭借其简洁、高效的特性,在竞争激烈的编程语言市场中占据了一席之地。Google、腾讯、阿里等大公司纷纷选择使用Go语言来开发服务应用项目。当然,和其余的编程语言一样,Go语言也有其自身的缺陷。[1]
特点及优势
Go语言的设计者们一直致力于降低构建简单、可靠、高效软件的门槛。相比于其余语言,Go语言具备众多令人兴奋不已的特点和优势:
1.自动垃圾回收降低了开发难度
内存和资源管理一直是一个让人非常抓狂的难题。在其余语言(如C或者C++)中,使用内存前要先分配这段内存,使用完毕后再将其释放掉,一个小疏忽即可能引发内存泄漏,导致程序甚至系统崩溃。而Go语言的现代化垃圾回收机制明显地降低了开发难度,把无趣的内存管理交给专业的编译器去做,而让程序员专注于更有趣的事情。
2.更丰富的内置类型
Go语言是一种典型的实战派语言,它内置了一个其余静态语言通常用库方式来支持的字典类型(map),理由很简单:既然绝大多数开发者都需要用到这个类型,为什么还非要每个人都写一行import语句来包含一个库?
Go语言还新添加了一个数据类型:数组切片(Slice)。我们可以将数组切片看作是一种可动态增长的数组,其功能与C++标准库中的vector相似,但有效地消除了反复写以下几行代码的工作量:
#include <vector>
#include<map>
#include<algorithm>
using namespace std;
使用Go语言,开发者不用再费事增加依赖的包,既减少了输入工作量,又可以让代码更简洁。
3.支持函数多返回值
目前的主流语言中除Python外基本都不支持函数的多返回值功能,但很多情况下开发者非常需要这个功能。比方,我们要定义一个函数,用于返回个人的名字信息,而名字信息包含多个部分——姓氏、名字、中间字,在不支持多返回值的语言中有两种做法来实现名字信息的返回:
专门定义一个结构体:
struct name
{
? char first_name[20];
? char middle_name[20];
? char last_name[20];
};
extern name get_name();//函数原型
name n = get_name();//函数调用
或者以传出参数的方式返回:
extern void get_name(
char* first_name,
char* middle_name,
char* last_name);//函数原型
//先分配内存
char first_name[20];
char middle_name[20];
char last_name[20];
//函数调用
get_name(first_name,middle_name,last_name);
Go语言的多返回值功能让开发者既不用再只为了返回多个值而专门定义一个数据结构,也不用再区分参数列表中哪几个用于输入,哪几个用于输出。
使用Go语言返回名字信息可以这样写:
func getName(firstName,middleName,lastName string){
? return “May”,”M”,”Chen”
}
fn,mn,ln,nn := getName()//函数调用
4.漂亮的错误解决
漂亮的错误解决规范是Go语言最大的亮点之一。Go语言引入了defer关键字用于标准的错误解决流程,并提供了内置函数panic、recover完成异常的抛出与捕获。与C++和Java等语言中的异常捕获机制相比,Go语言的错误解决机制可以大量减少代码量,开发者无需再仅为了程序安全而增加大量一层套一层的try-catch语句。
5.匿名函数和闭包
在Go语言中,所有的函数也是值类型,可以作为参数传递。Go语言支持常规的匿名函数和闭包,比方下列代码就定义了一个名为f的匿名函数,开发者可以随便对该匿名函数变量进行传递和调用:
f := func(x,y,int) int{
? return x+y
}
6.简洁的类型和“非侵入式”接口
Go语言的类型定义非常接近C语言中的结构(struct),甚至直接沿用了struct关键字。为了保持简洁,Go语言没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承和重载,而只是支持最基本的类型组合功能。尽管看起来过于简洁,但Go语言仍然能够实现C++和Java使用复杂的类型系统才能实现的功能。
而引入强大的“非侵入式”接口让开发者从以往对C++和Java开发中的接口管理问题中解脱了出来。
7.并发编程更轻盈更安全
Go语言引入了goroutine概念。goroutine是一种比线程更加轻盈、更省资源的协程。通过使用goroutine而不是裸用操作系统的并发机制,以及使用消息传递来共享内存而不是使用共享内存来通信,并发编程变得更加轻盈和安全。
主要应用场景
Golang非常适合用来做网络并发方面的服务,比方消息推送、监控、容器等。国内外的很多著名公司都使用了Go语言来开发服务及应用,比方:
Google最核心的搜索和广告业务;
腾讯的Docker容器化
百度的运维BFE(Baidu Front End)项目,应对庞大的前台页面访问量。
小米的运维监控系统,小米商城、小米视频等团队也在使用Go语言
不足之处
虽然Go语言独特的垃圾回收机制和并发编程机制等设计使代码更简洁,并大大提高了程序的性能,但与Python、Java、C/C++等语言相比,Go语言还是太年轻。
1.软件包版本管理不完善
Go语言的软件包版本管理一直被开发人员吐槽。Go语言没有制定特定版本的依赖库,在不同时间构建时,创立的生成可能会基于不同版本的包。在这方面,Go语言还无法与Python、Java等语言的软件包管理系统相媲美。
2.错误信息难取得
Go语言的错误解决最被人所诟病的一点是,开发者不能从函数上知道下层函数可能返回哪些类型的错误,很容易丢失错误发生的范围,难以提供有效的错误信息。
作为一门新兴的语言,Go语言难免存在种种缺陷。但出身名门的它拥有强大的后备力量,开源社区的客户不断地贡献新的轮子,Google也组建了一个独立的小组全职开发Go语言,在Google内部,Go语言有逐步取代Java和Python主流地位的趋势。未来Go语言的身影应该会出现在越来越多的应用服务当中。
推荐golang devops开发项目实战学习体系
项目包含:微信公众号后端开发,掘金网站服务器开发,B站流媒体服务器开发专栏
1. 语法入门专栏
环境调试
go安装与编译操作
IDE安装
testing单元测试
gdb调试
语法精讲
常量变量
整形字符串
byte与rune
数组类型
切片类型
通道类型
字典类型
流程与函数
条件选择
闭包
参数返回值
循环跳转
类与接口
结构定义
伪继承
方法与实例化
临时对象池
高级进阶
断言与反射
make与new
异常解决
发布
包管理
回收解决
条件变量
原子操作
协程
并发编程
内核线程
go sched
go routine
同步
2. 微信公众号后端开发专栏
项目需求
项目详情与分析
微信公众号开发流程详情
架构设计和接口说明
工程代码
公众号回复
微信消息接收与解析
Web服务器开始
公众号验证URL+Token
功能测试
RestClient使用
内网环境与接口测试
后台程序测试脚本
产品发布
公网发布与上云
3. 掘金网站服务器开发专栏
项目需求
项目需求分析
架构设计和接口说明
工程代码
Web开发
模板用法讲解
登陆及分类管理
文章增加标签
文章附件上传
文章的增加与删除
RPC实现
国际化支持
GoWeb扩展
评论与分类显示
自建Http中间件
功能测试
文章上传测试用例
RPC性能测试
评论分类测试
客户管理测试
产品发布
Shell系统自启动
项目上云 COS
4. B站流媒体服务器开发专栏
项目需求
项目需求分析
Restful接口设计
scheduler设计
工程代码
客户管理api
apidefs结构体定义
db连接
mysql建库建表
Session管理 UUID
video管理
功能测试
mysql库表测试
客户管理测试
api测试
产品发布
项目上云 腾讯云COS

需要这个体系教程的话看个人详情 拿。希望这个学习体系对大家有帮助
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 2020年热门Go语言开发的优点与缺点