跳转至

Golang概述

Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。

它也打算成为现代的,支持网络与多核计算的语言。

要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了

一、Go

背景

Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。

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

目标

Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。

二、Go应用领域

2.1 区块链的应用开发

区块链技术,简称BT(Blockchain technology),也被称为分布式账本技术,是一种互联网数据库技术,其特点时去中心化、公开透明,让每个人均可参与数据库记录。

区块链(英文名:blockchain 或block chain)是一种块链式存储、不可篡改、安全可信的去中心化分布式账本,它结合了分布式存储、点对点传输、共识机制、密码学等技术,通过不断增长的数据块链(Blocks)记录交易和信息,确保数据的安全和透明性。

区块链的特点包括去中心化、不可篡改、透明、安全和可编程性。每个数据块都链接到前一个块,形成连续的链,保障了交易历史的完整性。智能合约技术使区块链可编程,支持更广泛的应用.

1)区块链开发框架

Go语言在区块链领域拥有广泛的应用。例如,以太坊(Ethereum)和超级账本(Hyperledger Fabric)等知名区块链平台都使用Go语言作为主要的开发语言。Go语言的高性能和并发特性使得它非常适合构建分布式账本和智能合约。

2)加密货币开发:

Go语言为加密货币的开发提供了强大的支持。例如,比特币的一些核心组件就是使用Go语言编写的,开发者可以利用Go语言的丰富库和工具来开发自己的加密货币应用。

3)区块链应用场景探索:

  • 支付和现金交易:区块链通过自身去中心化的优势为支付和现金交易创建一个更直接的支付流,它可在国内或跨国界,并且无需中介,以超低费率几乎瞬时速度的方式支付。
  • 银行业:本质上来说,银行是一个安全的存储仓库和价值的交换中心,而区块链作为一种数字化的、安全的以及防篡改的总账账簿可以达到相同的功效。
  • 游戏业务:区块链应用游戏领域的核心价值:把游戏权利交还给游戏玩家。区块链技能去中心化、智能合约、资产买卖等技能特点,能很好的解决现在游戏职业游戏数据和用户数据隐私走漏的问题,促进游戏中虚拟数字钱银的保值,完成用户与游戏开发渠道公正的价值同享。
  • 物联网:作为匿名的去中心化的点对点遥感技术,区块链可以成为大量设备的一种公共账簿,它们将不再需要有一个中央化的路由在他们之间居中交通。在没有了中央控制系统来验证之后,设备将能够在它们之间互相匿名传输,并管理软件的更新、错误,或者进行能源管理。
  • 供应链金融:区块链可以缓解信息不对称的问题,十分适合供应链金融的发展。供应链中商品从卖家到买家伴随着货币支付活动,在高信贷成本和企业现金流需求的背景下,金融服务公司提供商品转移和货款支付保障。供应链溯源防伪、交易验真、及时清算的特点将解决现有贸易金融网络中的诸多痛点,塑造下一代供应链金融的基础设施。
  • 版权保护:在区块链技术环境下,每一次版权交易都会产生不可逆的交易记录,这也就意味着,包括一个创意、故事、剧本或角色。一旦记录在区块链上,即使所有权发生交换、转移、出售等,该资产都将一直被追踪,从而解决版权问题。
  • 汽车行业:未来的客户选择他们想要租赁的汽车,进入区块链的公共总账;然后,坐在驾驶座上,客户签订租赁协议和保险政策,而区块链则是同步更新信息。 这不是一个想象,对于汽车销售和汽车登记来说,这种类型的过程也可能会发展为现实。
  • 物流链:商品从生产商到消费者手中,需要经历多个环节,跨境购物则更加复杂;中间环节经常出问题,消费者很容易购买的假货。区块链天生的开放、透明,使得任何人都可以公开查询,伪造数据被发现的概率大增。物流链的所有节点上区块链后,商品从生产商到消费者手里都有迹可循,形成完整链条;商品缺失的环节越多,将暴露出其是伪劣产品概率更大。
  • 跨境支付:跨境支付涉及多种币种,存在汇率问题,流程繁琐,结算周期长:传统跨境支付基本都是非实时的,银行日终进行交易的批量处理,通常一笔交易需要24小时以上才能完成;某些银行的跨境支付看起来是实时的,但实际上,是收款银行基于汇款银行的信用做了一定额度的垫付,在日终再进行资金清算和对账,业务处理速度慢。接入区块链技术后,通过公私钥技术,保证数据的可靠性,再通过加密技术和去中心,达到数据不可篡改的目的,最后,通过P2P技术,实现点对点的结算;去除了传统中心转发,提高了效率,降低了成本(也展望了普及跨境小额支付的可能性)。
  • 实体资产:实体资产往往难以分割,不便于流通,实体资产的流通难以监控,存在洗黑钱等风险,用区块链技术实现资产数字化后,所有资产交易记录公开、透明、永久存储、可追溯,完全符合监管需求。
  • 医疗行业:电子医疗数据的处理、药品溯源、医疗保险都是区块链+医疗行业的热点领域。医疗数据的区块链存储完成去中心化的医疗信息和患者数据管理,实现各机构数据共享。例如EC国际的肿瘤医疗项目,易通天下的医联体分级诊疗平台,实现数据掌握在患者手中,各机构也可在用户授权下共享数据。
  • 社交:区块链应用社交领域的核心价值:让用户自己控制数据,杜绝隐私泄露。想想为什么我们刚刚浏览完某个购物网站,总会在其他社交平台上收到类似的广告弹窗,因为数据隐私被垄断的大数据平台进行了可耻的贩卖。区块链技术在社交领域的应用目的,就是为了让社交网络的控制权从中心化的公司转向个人,实现中心化向去中心化的改变,让数据的控制权就牢牢掌握在用户自己手里。
  • 云计算:区块链应用云计算领域的核心价值:推动公共信任基础设施建设进程。我国信息通讯研究院以为,区块链与云的结合也是必然趋势。区块链与云的结合,有两种方法,一种是区块链在云上,一种是区块链在云里。后边一种,也就是BaaS,Blockchain-as-a-Service,是指在云效能商直接把区块链作为效能供给给用户。未来,云效能企业越来越多地将区块链技术整合至云核算的生态环境中,经过供给BaaS功用,有用下降企业运用区块链的安置本钱,下降立异创业的初始门槛
  • 共享经济:区块链应用云计算领域的核心价值:为平台构建用户信任。区块链经过借助智能合约技能、能够主动履行满意某项条件下的操作,也能够使得更多产品“共享”,大幅降低契约建立和履行的本钱。腾讯正在把智能合约运用于自行车租赁、房子共享等范畴,假如这种智能合约运用于今日火爆的共享单车范畴,或许会给整个职业带来全新的改动。
  • 慈善:区块链应用慈善领域的核心价值:实现所有数据公开透明。对于慈善捐助,区块链可以让人们准确跟踪其捐款流向,捐款何时到账,最终捐款到了谁的手里。由此,区块链可以解决慈善捐赠过程中长期存在的透明度不高和问责不清等问题。
  • 文件存储:区块链的去中心化可以安全的,高性能的和廉价的方式来存储数据,将数据散布在许多节点上。至于数据的安全性,区块链的方法就意味着每一个文件都是被切碎的,并且使用你自己的密钥进行加密,然后散布在网络上,直到你准备再使用这个文件。需要检索的时候,这些文件就会被解密,并迅速地无缝重新组装起来。
  • 大数据:区块链的去中心化可以安全的,高性能的和廉价的方式来存储数据,将数据散布在许多节点上。至于数据的安全性,区块链的方法就意味着每一个文件都是被切碎的,并且使用你自己的密钥进行加密,然后散布在网络上,直到你准备再使用这个文件。需要检索的时候,这些文件就会被解密,并迅速地无缝重新组装起来。
  • 礼品卡和会员项目:区块链可以帮助提供礼品卡和会员项目的零售商,使得他们的系统更廉价、更安全。几乎不用任何中间人来处理销售交易和礼品卡的发行,应用区块链技术的礼品卡的获取过程和使用过程将更加有效和廉价。同样的,区块链独有的验证技术使得欺诈保护手段进一步升级,可以减少成本、阻止非法用户获取被盗账户。
  • 体育:对运动员进行投资逐渐成为了体育管理机构和公司的关注点,但是区块链通过民主化粉丝的能力去获得现在的体育明星在未来的金融股份,可以将投资运动员的过程去中心化。这一利用区块链去投资运动员并获得收益的概念并没有大规模被尝试。
  • 政务:政务信息、项目招标等信息公开透明,政府工作通常受公众关注和监督,由于区块链技术能够保证信息的透明性和不可更改性,对政府透明化管理的落实有很大的作用。政府项目招标存在一定的信息不透明性,而企业在密封投标过程中也存在信息泄露风险。区块链能够保证投标信息无法篡改,并能保证信息的透明性,在彼此不信任的竞争者之间形成信任共识。并能够通过区块链安排后续的智能合约,保证项目的建设进度,一定程度上防止了腐败的滋生。

2.2 后台的服务应用

美团后台流量支撑程序,支撑主站后台流量(排序,推荐,搜索等),提供负载均衡,cache,容错,按条件分流,统计运行指标(qps,latency)等功能。

1)高性能Web服务

Go语言具有卓越的性能和并发处理能力,使其在构建高性能的Web服务方面表现出色。通过使用Go语言的标准库和第三方框架,开发者可以轻松构建高并发、低延迟的Web应用程序。

Go语言的标准库中包含了HTTP、HTML、XML等相关的库,使得开发Web应用程序更加简单和高效。常见的Go语言开发的Web框架有Gin、Echo、Beego等。

2)微服务架构

Go语言天生支持并发编程,适合构建微服务架构。Go语言的轻量级线程(goroutine)和通信机制(channel)使得开发者可以轻松实现服务间的并发通信和协作,提高系统的可扩展性和稳定性。

3)RESTful API开发

Go语言提供了丰富的网络编程库和框架,使得开发者可以快速构建RESTful API。其简洁的语法和高效的性能使得Go语言成为构建API服务的理想选择。

2.3 云计算/云服务后台应用

1) 盛大云CDN(内容分发网络)

应用范围:CDN的调度系统、分发系统、监控系统、短域名服务,CDN内部开放平台、运营报表系统以及其他一些小工具等

2) 京东消息推送云服务/京东分布式文件系统

应用范围:后台所用的服务用go实现,golang的计算能力强。

1)容器编排

Go语言在容器编排领域有着广泛的应用。例如,Kubernetes就是使用Go语言开发的,它提供了强大的容器编排和管理能力,成为云原生应用开发的重要工具。

2)云函数

Go语言的快速编译和启动时间使其成为开发云函数的理想语言。云函数可以根据事件触发自动执行特定的代码逻辑,Go语言的高性能和低延迟使得它非常适合实时处理和响应性能要求较高的任务。

2.4 工具开发

由于Go语言具有简洁的语法和高效的编译速度,因此很多工具和框架都选择使用Go语言进行开发。例如,Docker、Etcd、InfluxDB和Prometheus等工具都是用Go语言编写的。Go语言的开发速度和可靠性使得它成为一个理想的工具开发语言。

系统工具开发:Go语言被广泛用于开发各种系统工具,例如:数据库代理工具、内容分发工具、日志系统、监控和管理工具等。由于Go语言的编译速度快、执行效率高,这些工具的性能表现也很出色。

容器编排工具开发:Go语言的简洁性、高效性和并发性使得它成为容器编排工具的首选语言。例如,Docker Swarm(Docker的内置编排工具)、Rancher等工具都是使用Go语言开发的。

2.5 人工智能和大数据分析

由于Go语言具备高性能和高并发性能,它被应用于人工智能和大数据分析领域。Go语言的并发编程模型和内存管理机制使得它可以高效地处理大规模数据和复杂计算任务。因此,很多人工智能和大数据公司都选择使用Go语言来构建他们的系统和算法。

2.6 Go语言成功案例

Nsq:Nsq 是由Go语言开发的高性能、高可用消息队列系统,性能非常高,每天能处理数十亿条的消息;

Docker:基于lxc的一个虚拟打包工具,能够实现PAAS平台的组建。

Packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者

Skynet:分布式调度框架

Doozer:分布式同步工具,类似ZooKeeper

Heka:mazila开源的日志处理系统

Cbfs:couchbase开源的分布式文件系统

Tsuru:开源的PAAS平台,和SAE实现的功能一模一样

Groupcache:memcahe作者写的用于Google下载系统的缓存系统

God:类似redis的缓存系统,但是支持分布式和扩展性

Gor:网络流量抓包和重放工具

Go语言作为一门大型项目开发语言,在很多大公司相继使用,甚至完全转向Go开发,其中代表有Google、Facebook、腾讯、百度、阿里巴巴、京东、小米以及360、美团、滴滴以及新浪等,因此,Go语言的开发前景还是很不错的!

三、Go语言适合做什么

3.1 网络编程

Go语言在网络编程领域具有显著的优势。

其高度的可伸缩性和并发性使其成为构建Web应用程序的理想选择,众多知名企业已经采用Go来开发其Web应用。

Go拥有众多优秀的Web框架,如Echo、Gin、Iris、Martini、Revel和beego,这些都基于其内置的net/http包,该包提供了丰富的网络功能。可以用于开发高性能、可扩展的Web应用程序。Go语言的Web框架通常具有简单易用、高效、安全等特点,可以用于开发各种类型的Web应用程序,如博客、电商网站、社交网站等。

不仅如此,Go还支持TCP/UDP套接字、HTTP/HTTPS、WebSocket和RPC等,使其成为开发高性能、可扩展的网络应用程序的首选语言。如服务器、代理、爬虫、Web应用程序等。

3.2 服务器端开发

Go语言在服务器端开发中表现出色,特别适用于替代C和C++进行各种任务。这主要得益于Go的高效性能和简洁的语法。

在服务器编程中,Go可以轻松处理日志、数据打包、虚拟机处理、监控系统以及文件系统等任务。以前你使用C或者C++做的那些事情,用Go来做很合适。

Go还广泛应用于分布式系统、数据库代理器、中间件如Etcd,以及网络编程、web应用、API应用和下载应用等场景。

总体来说,Go语言为服务器端开发提供了一个全面而高效的解决方案。

3.3 分布式存储领域

Go语言在分布式存储领域具有显著的优势。其强大的并发编程和协程支持,使得构建高并发、高可用、可伸缩的分布式系统变得轻而易举。

Go语言不仅内置了协程和通道两大并发特性,还提供了sync库,包括Mutex、WaitGroup、Pool等接口,帮助开发者更安全地掌控并发行为。

此外,Go语言还提供了如etcd、Consul、ZooKeeper等分布式系统框架和工具包,以及RPC和序列化机制的支持,进一步简化了分布式存储的开发过程。

3.4 写工具

Go语言非常适合用于编写工具。例如,hugo、hub、fzf等都是用Go编写的工具。此外,还有国人开发的Linux下的百度pan client,也是用Go实现的。这些工具展示了Go在构建高效、可靠工具方面的优势。

3.5 造轮子

Go语言非常适合用于“造轮子”,即创建自己的库或工具。

当发现现有的库不能满足需求或存在不足之处,Go语言提供了简单、高效的方式来快速构建自己的解决方案。这种灵活性使得开发者能够根据项目需求定制功能,而不是受限于现有的库。

此外,Go语言的并发特性也使得在造轮子过程中能够高效地处理多任务,提高开发效率。

总体来说,Go语言为“造轮子”提供了强大的支持和灵活性。

3.6 内存数据库和云平台领域开发

Go语言在内存数据库和云平台领域开发中具有显著优势。

首先,Go提供了对多种数据库的强大支持,包括MySQL、MongoDB、Redis和Elasticsearch等。这使得开发人员能够轻松地连接和操作这些数据库。

其次,Go的ORM框架,如GORM和XORM,进一步简化了数据库操作,加速了开发过程。

此外,Go语言在并发、高性能和分布式系统方面具有天然的优势,这使其成为构建可靠且高性能应用程序的理想选择。

3.7 云服务

Go语言在云服务领域有着广泛的应用。许多国外的云平台选择使用Go进行开发,如七牛云、华为云等都有采用Go开发并开源的产品。

此外,Go不仅适用于数据库操作和开发云平台,还特别适合服务器开发、微服务实践和重构。近期热门的Docker也是用Go开发的。这些应用案例表明,Go语言在云服务领域具有高度的灵活性和效率。

3.8 区块链领域

Go语言在区块链领域有着广泛的应用。以太坊和fabric是区块链中的两个明星项目,它们都采用了Go语言进行开发。

此外,Go语言也被视为区块链行业的开发语言,许多知名的区块链系统和应用,如以太坊和fabric,都选择了Go作为其开发语言。

这得益于Go语言的特性,使其非常适合服务器开发、云平台开发以及微服务实践和重构,特别是在区块链开发方面。

3.9 并发编程

Go语言在并发编程方面具有显著优势。这主要得益于其内建的协程机制,使得处理并发请求变得简单,开发人员无需过多关注线程管理。

此外,Go提供了如管道(channel)这样的通信机制,确保数据在并发环境中的安全共享。

同时,为了支持并发编程,Go还提供了goroutine、锁(如读写锁、互斥锁)、以及通道等基础组件。这些特性共同确保了Go在并发编程领域的强大实力。

3.10 容器虚拟化

容器虚拟化是Go语言的一个重要应用领域。

Docker,这一广受欢迎的容器虚拟化工具,就是使用Go语言来构建的。这表明Go语言在容器虚拟化方面具有强大的功能和灵活性,使其成为实现高效、可移植的容器解决方案的理想选择。

3.11 数据库代理器

Go语言在数据库代理器方面具有显著的优势。

数据库代理器是用于在客户端和数据库之间建立连接,提供额外的功能或优化性能的中间件。

Go语言的高并发特性和简洁的语法使其成为构建此类工具的理想选择。

此外,Go的跨平台特性也使得数据库代理器能够轻松地在多种操作系统和数据库之间工作。总体来说,Go语言为数据库代理器的开发提供了一个高效、灵活的解决方案。

3.12 容器化

Go语言在容器化方面具有显著的优势。

容器化技术如Docker化部署、k8s集群、CVM云服务器和TKE容器服务都是Go语言可以高效支持的应用场景。

Go语言的跨平台特性使其成为构建容器内应用的首选语言,无论是部署在本地还是云端。

此外,Go语言的性能和并发处理能力也使其在容器化环境中能够提供高效、可靠的服务。

总体来说,Go语言为容器化提供了强大的支持和灵活性。

3.13 中间件

Go语言在中间件领域具有显著的优势。

中间件通常用于连接、协调或增强不同系统组件的功能。Go的简洁、高效和并发特性使其成为构建中间件的理想选择。例如,Etcd就是一个用Go编写的分布式键值存储系统,它在分布式系统中起到了关键的角色。

此外,Go还适用于处理日志、数据打包、虚拟机处理和文件系统等任务,这些都是中间件可能涉及的功能。总体来说,Go的强大功能和灵活性使其成为中间件开发的优选语言。

3.14 开发底层

Go语言在开发底层方面表现出色。以太坊和超级账本等项目都是基于Go语言构建的,这证明了其在底层开发领域的强大实力。

Go语言的并发模型和高效性能使其成为开发底层系统的理想选择,能够处理高并发和大规模数据操作。

此外,其简洁的语法和强大的标准库也使得开发过程更为高效和便捷。

3.15 爬虫及大数据

Go语言在爬虫及大数据处理方面具有天然的优势。这主要得益于Go语言对并发的原生支持。

在爬虫领域,并发性能尤为重要,因为它可以同时抓取多个网页,大大提高爬取效率。

此外,大数据处理同样需要高效的并发能力,以应对海量数据的快速处理和分析。

因此,Go语言成为编写分布式爬虫和进行大数据处理的理想选择。

3.16 云原生 微服务

Go语言在云原生微服务领域具有显著的优势。

首先,go-micro提供了基于Go的微服务框架,支持RPC通信,并详细讲解了服务间的同步机制。

此外,Go语言在处理json和protobuf等数据格式时也表现出色。结合DevOps、持续部署和容器化技术,Go语言能够为微服务提供高效、可靠的解决方案。例如,通过Docker和k8s进行容器化部署,结合spinnaker实现持续部署,以及利用蓝绿发布或金丝雀发布策略进行快速回滚。这些特性使得Go语言成为构建云原生微服务的理想选择。

3.17 小程序后端

Go语言在小程序后端开发中具有显著的优势。

首先,Go语言可以用于构建公众号开发流程,实现微信消息的接收与解析,以及公众号验证URL+Token。

其次,Go语言支持RESTful API设计、JWT认证,并可以与GORM进行对象关系映射,实现基于Casbin的RBAC访问控制模型。

此外,Go语言还可以用于构建支持千万级高并发的推送服务,如goim,它支持多种协议、动态扩展、异步消息推送等功能。

3.18 云原生应用开发

Go语言在云原生应用开发中具有显著的优势。

其并发性和网络功能,以及高度可移植性,使其成为构建云原生应用的理想选择。

事实上,Go已经被用于构建云原生计算的多个关键组件,如Docker、Kubernetes和Istio。

此外,由于现有Internet基础设施软件的老化问题,使用Go进行重写可以带来更好的内存安全性、更简单的跨平台部署和更易于维护的代码库。

3.19 后台应用开发

Go语言在后台应用开发领域表现出色,特别是其对于高并发处理的能力。

这种特性使得Go成为构建能够处理大量并发请求的后端服务的理想选择。高并发意味着系统可以同时处理多个任务,而不会导致性能下降或资源瓶颈。

此外,Go语言的简洁和高效也使其成为后台应用开发的优选工具。

3.20 内存数据库

内存数据库是利用RAM存储数据,以实现快速读取和检索的数据库系统。Go语言在构建内存数据库方面具有优势。

首先,Go语言的并发性能优越,能够处理大量并发请求,这对于内存数据库来说至关重要,因为内存数据库通常需要处理高并发场景。

其次,Go语言的垃圾回收机制能有效管理内存,避免内存泄漏,这对于内存数据库的稳定性和性能至关重要。

因此,使用Go语言开发内存数据库是一个合适的选择。

四、Go有什么优势

Go语言具有以下优势:

  • 简洁和易学:
    • Go语法简单明了,没有太多晦涩难懂的概念,上手容易,适合快速开发。
    • 从学术的角度讲Go语言其实非常平庸,不支持许多高级语言特性
    • 从工程的角度讲,Go的设计是非常优秀的,规范足够简单灵活,有其他语言基础的程序员都能迅速上手。
    • 更重要的是Go自带完善的工具栏,大大提高了团队协作的一致性,比如gofmt自动排版,Go代码,在很大程度上杜绝了不同人写的代码排版风格不一致的问题。
    • 把编辑器配置在编辑存档的时候自动运行gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候变成正确排版的代码。此外还有gofix,govet等非常有用的工具。
  • 性能优越:
    • Go语言是编译型语言,相较于解释型语言,如Python,其运行速度更快,性能更优。
    • Go编译成机器码,执行性能接近C/C++,比解释型语言更高效。
    • 虽然不如C和Java,单通常比原生Python应用还高一个数量级的,适合编写一些瓶颈业务,内存占用也非常省。
  • 并发能力强:Go语言的并发模型是它的一大特色,通过Goroutines和Channels,开发者可以编写高效的并发程序。
  • 静态类型:Go语言是静态类型语言,这使得开发者在编译时就能发现一些潜在的错误,提高了代码的可靠性。
  • 丰富的标准库:Go语言提供了丰富的标准库,涵盖了网络、数据处理、加密等众多领域,使得开发者在编写基础功能时无需从零开始。
  • 跨平台:
    • Go语言支持跨平台,开发者可以在一种操作系统下开发程序,然后编译成在另一种操作系统下运行的可执行文件。
    • Go编译生成的是一个静态的可执行文件,除了glibc外没有其他的外部依赖。这让部署变得异常方便,目标机器上只需要有一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。
    • 支持多种操作系统和处理器架构,如Linux、Unix、Mac、Windows等。
  • 简洁易读:Go语言的语法简洁,易于学习,且代码易于阅读和理解。
  • 并发安全:
    • Go语言的并发模型通过Goroutines和Channels实现,可以避免并发中的数据竞争问题。可以非常方便地编写高效的并发程序。
    • Goroutine和channle使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。
    • 单个Go应用也能有效的利用多个CPU核,并行执行的性能好。
  • 内存管理:Go语言有垃圾回收机制,可以自动管理内存,减少了内存泄漏的风险。
  • 高效编译:Go语言的编译速度非常快,可以快速地构建和测试代码。
  • 支持网络和Web开发:Go语言内置对网络和Web开发的支持,使得开发Web应用变得简单高效。
  • 强大的组件生态:拥有成熟稳定的软件模块生态,包括Web框架、数据库驱动等。

可直接编译成机器码,不依赖其他库,glibc的版本有一定的要求,部署就是扔一个文件上去就完成。

Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。

它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。

静态类型语言,但是有动态语言的感觉,静态类型的语言就是可以在编译的时候检查出隐藏的问题,动态语言就是有很多包可以使用,写起来的效率很高。

Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。

语言层面支持并发,这个是go语言的最大特色,go就是基因里面支持的并发,可以利用多并发,很容易使用并发Goroutine 和 channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个Go应用也能有效的利用多个 CPU 核,并行执行的性能好。这和Python也是天壤之比。多线程和多进程的服务端程序编写起来并不简单,而且由于全局锁GIL的原因,多线程的Python程序并不能有效利用多核,只能用多进程的方式部署;如果用标准库里的multiprocessing包又会对监控和管理造成不少的挑战(我们用的supervisor管理进程,对fork支持不好)。部署Python应用的时候通常是每个CPU核部署一个应用,这会造成不少资源的浪费,比如假设某个Python应用启动后需要占用 100MB 内存,而服务器有 32 个CPU核,那么留一个核给系统、运行 31 个应用副本就要浪费 3GB 的内存资源。

内置runtime,支持垃圾回收,并为并发执行与通信提供了基本的支持。

简单易学,Go语言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go关键字是25个,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。

丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大