本文谈谈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
需要这个体系教程的话看个人介绍 拿。希望这个学习体系对大家有帮助
有疑问加站长微信联系(非本文作者)