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

需要这个体系教程的话看个人介绍 拿。希望这个学习体系对大家有帮助

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容