干货 | 区块链开发主流编程语言居然是Go语言!?
Posted 黑马程序员深圳中心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了干货 | 区块链开发主流编程语言居然是Go语言!?相关的知识,希望对你有一定的参考价值。
一、区块链与分布式的关系
目前区块链概念正在大面积普及。很多人感觉这个东西好抽象,没有什么落地的东西,今天这里主要介绍一下区块链的一些落地项目和有关区块链技术相关的知识。
区块链是什么?
一句话解释 : 它是一种特殊的分布式数据库。
有人又会问,那么“分布式”又是个啥啊?
我们用一个例子说明一下分布式。
你开了一家饭店,一开始顾客比较少,你顾一个厨子其实就够用了,这样这个厨子会做全部的事情(切菜,炒菜,端盘,洗碗,拌料等等),实际上所有的事务处理,都经过这个核心的厨子上,所以当前你的饭店就是一个中心化(一体化)的规格。 那么当你的客流量逐步增加,一个厨子当然不能累死啦,就会招一些每个领域都精通的厨子,去干自己的工作,你会雇炒菜的大厨,切菜的大厨,拌料的大厨等等。 这就是分布式,将一体化的东西拆分成单个精通的领域完成。分布式的概念应用很广泛,云计算、微服务、集群、区块链等等。
一体化与分布式
其实区块链其实核心思想就是分布式去中心化哦~!再举个栗子~
中央电脑一体化记账数据
我们的传统银行,或者支付宝,或者微信,在这些平台上的所有交易,我们实际上是把交易的转账等信息发送给中心数据中心,然后中心数据中心进行记账计算和高密度处理,将钱转移给交易对象。
中心化的记账方式实际上有一定的弊端,就是一旦中央电脑被Hacker入侵了或者破坏了,我们的所有账本数据和交易数据可能都将同一时刻毁灭。
去中心化分布式记账
反观如果是去中心化区块链方式,就是不再依赖中心化的记账,而是通过一种密码学计算让全网节点随机争夺记账权,争夺记账权的节点就会被奖励数字代币,而记完后的账本发布给全网所有节点保存。
下图介绍了区块链在交易工程中的工作原理。
二、必须要了解的区块链专用名词
公钥:相当于账号,全网每个节点都有一个公钥,别人付钱时都是付给这个公钥。
私钥:相当于你的账号的身份证明。私钥可以解开公钥加密的数据,说明付款方式确实是你。私钥必须妥善保存哦~,一旦丢失,就丢失了账户内所有的数据,那可都是白花花的银子啊,多少人早起玩比特币的业余人士,忘记了自己的私钥,里面的n个币子,都没了,以当今的价格换算的话,别墅、奔驰、宝马不在话下吧。
交易:节点之间发生的支付就是交易
区块:一段时间内所有的交易会打包成一个区块。这个区块会记录上一个区块的hash值(唯一码),使得上一个区块不可被篡改。区块会包含时间戳,这个时间戳解决了“双花”问题,也就是一个货币不能被支付两次,区块链技术中承认时间戳在前的交易有效性。
区块链:由于每个区块都有上一个区块的hash值,造成每生成一个新区块,乎造成老区块的不可篡改,从而形成全部数据的不可篡改。
挖矿(记账权):挖矿其实就是记账的权利,就是向整个区块链中添加一个区块的权利啦。就是把上次区块生成后到现在为止的所有交易打包再打上时间戳,向全网公示,51%的节点确认区块链有效则该区块就加入到区块链的末端,成为账本的一部分。由于不存在中心,所以记账是全网争夺的,大家通过计算一道密码学难题,谁先算出来,就获得全网共识(就是记账权利),就能够添加区块喽。算了这么卖力,总该有奖励吧,为了鼓励大家参与记账,所以争夺到记账权会有报酬,就是比特币喽(或者其他代币),
共识机制:就是所有分布式节点之间怎么打成共识,通过算法来生成和更新数据,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。以比特币为例,采用的是“工作量证明(Proof Of Work,检查POW)”。工作量是需要算力的,通过工作量证明,有效的防止了篡改和伪造,因为如果要达到伪造和篡改的工作量,大概需要上亿元成本和算力。
三、区块链技术开发方向
“区块链开发” 分为 “区块链底层系统开发” 和 “区块链上层应用开发”。
(1)区块链底层系统开发
[多数以Go语言和C++语言为主]
I.链(区块链项目)
我们可以简单介绍几个比较成熟的区块链系统
EOS (Enterprise Operation System)是由 Block.one公司主导开发的一种全新的基于区块链智能合约平台,旨在为高性能分布式应用提供底层区块链平台服务。EOS 项目的目标是实现一个类似操作系统的支撑分布式应用程序的区块链架构。该架构可以提供账户,身份认证,数据库,异步通信以及可在数以万计的 CPU/GPU群集上进行程序调度和并行运算。EOS最终可以支持每秒执行数百万个交易,同时普通用户执行智能合约无需支付使用费用。
一句话解释:就是一个利用区块链思想的去中心化的操作系统啦,以前一台系统的CPU/GPU进行运算完成指令操作,现在是多个系统一起搞啦~!
以太坊(Ethereum): 并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统,以太坊从诞生到2017年5月,短短3年半时间,全球已有200多个以太坊应用诞生。 以太坊是一个平台和一种编程语言,使开发人员能够建立和发布下一代分布式应用。 以太坊可以用来编程,分散,担保和交易任何事物:投票,域名,金融交易所,众筹,公司管理, 合同和大部分的协议,知识产权,还有得益于硬件集成的智能资产。
一句话解释:以太坊就是封装好了区块链底层复杂的事情,而是提供出一个平台,如果你懂的技术不多,那么你可以利用以太坊平台进行二次开发进行交易或者发行代币,方便的狠嘞!
量子链(Qtum)是首个兼容比特币UTXO模型和以太坊虚拟机(EVM)的PoS智能合约平台,通过全新设计的账户抽象层(AAL)将比特币和以太坊生态连接。量子链“面向移动端”的战略将会促进区块链技术的产品化并提高区块链行业的易用性,搭建区块链与真实商业社会的桥梁。Qtum量子链的目标是成为全球领先的区块链平台,同时也致力于推进区块链技术的进步和整个行业生态的发展。
一句话解释:量子链就是将老旧的比特币和新的以太币做了一层兼容,使得交易更加顺畅。
下图是一些比较常见的区块链项目
区块链项目(链)
下图是目前移交流行的区块链项目的开发语言汇总
区块链项目主流语言
II.框架
目前企业应用开发主要使用的两个主流区块链应用框架:
Hyperledger Fabric(分布式记账本框架)【Golang语言实现】
Hyperledger Fabric是一个模块化的分布式账本解决方案支撑平台,提供高度的保密性、弹性、灵活性与可扩展性。它的目的是支持不同组件的可插入实现,并适应经济系统中存在的复杂性。Hyperledger Fabric提出了一个独特的高弹性且可扩展的体系结构,此结构使Fabric区别于其他区块链解决方案。在Fabric对企业级区块链的未来规划中,它的架构允许被全面审查且开源。
Fabric智能合约写在链码中,且当外部应用与账本互动时被调用。大多数情况中,链码只与账本的数据库部分互动(查询等),即世界状态,而不是交易日志。链码可以被多种语言编写,当前支持Go与Java,未来会发布更多语言的支持。
go-ethereum(以太坊智能合约框架)【Golang语言实现】
Go Ethereum是以太坊协议的三个原始实现之一。 它是用Go编写的,完全开放源代码并在GNU LGPL v3下获得许可。Go Ethereum可以作为独立的客户端Geth使用,您可以将其安装在任何操作系统上,也可以作为可以嵌入Go,android或ios项目的库。
III.Token(数字代币)
比特币;瑞波币;莱特币;以太币
下图是目前所有发行的代币的总量,当然这个数字会一直增长。
目前代币总数量和市值
(2)区块链应用开发[多数基于以太坊平台,提供API接口编程语言有Solidity语言和Golang语言]
目前涉及到的领域有
区块链+价值投资:直接融资大势所趋
区块链+数字资产交易:价值互联网蓝图
区块链+法律科技:基于区块链技术的证宝宝
区块链+保险:信息丢失的“破解之钥”
区块链+大数据:产业互联网金融的核心
区块链+供应链金融:破解中小企业融资难题
四、区块链招聘岗位
通过在网上寻找区块链工程师技能要求,我们可以总结出以下3规则:
一、目前在招区块链开发工程师岗位有90%以上的岗位要求掌握Go语言。
二、区块链开发工程师需要的技能体系要求多偏向于服务器后端语言编程开发知识体系。
三、区块链开发需要对密码学、安全协议、数据结构及算法有一定了解。
五、为什么称Go语言是区块链第一主流编程语言
Go语言的特性
•执行效率高
•擅长网络编程
•高并发
•跨平台
区块链行业所使用的编程语言需要满足,执行效率高,高并发,跨平台,对于网络开发要求比较高等特点。 早期的项目是以 c++ 为主,现在的一些项目都开始使用 Go 语言。
QA:
1. 区块链是否真的能改变世界?
如果说人工智能解放了生产力,那么区块链就可以解放生产关系。区块链技术是通过分布加密算法的方式大规模地把社会上很多人的生产力连接在一起,所以可以理解为一个生产关系的技术,人工智能与区块链融合应用到工业、商业的各个应用场景才是智能时代的必须。
2. Go语言除了能开发区块链还能开发哪些领域?
Go语言作为一个开发效率高,天生支持高并发,同时又具备媲美C语言性能的语言,在未来一定是后端开发语言的最具有潜力的编程语言。目前很多企业的服务器架构也逐步在用Go语言重构。
Go语言目前主要涉及的领域有:高并发服务器开发、分布式开发、微服务开发、Web框架及应用开发、和区块链开发。
高并发服务器开发:
不用解释了,Go天生语法的并发支持和Goroutine协程的轻量级与调度器的优化,目前很多游戏公司主要服务开发语言最优选择一定是Golang.
分布式开发:
我们知道的两个分布式虚拟化明星:Docker、Kubernetes他们的开发实现语言都是Go语言。有人说是Docker捧红了分布式,实际上很多人并不知道,是Go捧红了Docker生态。
微服务开发:
Go的微服务框架居多,加上Docker对go的支持最好,所以go也是微服务开发的首选语言。
go的微服务框架有go-micro,go-kit。服务发现有go实现的Consul。微服务通信的RPC机制有google实现的gRPC,其中通信协议protobuf也是对go无缝衔接的。
Web框架及应用开发:
对于web,大家可能会想到java的Spring、python的Django。但是可能并不知道Go的Beego和Gin、Echo等web框架正在逐步侵蚀大型互联网公司。很多公司已经通过Beego来搭建web后台服务,因为Go的天生网络处理的流畅,让开发者在构建大型web的时候,更加喜欢了Go语言。
区块链开发:
不多说了,整篇文章我们所遇见的区块链应用项目或者相关框架几乎都是Go语言实现,或者对Go的支持最好。主流的Hyperledger Fabric 和以太坊也是目前企业正在大规模使用的开发框架。go的这种开发效率高和高性能,对于区块链这种注重网络通信和信息安全的技术,更是不可或缺的。
3. 什么样的人是可以进军区块链技术领域的?
初级级别: 如果没有技术背景,掌握一些基础的计算机理论基础即可,可以做区块链开发,待遇也不菲呢~
中级级别:了解区块链的原理,懂得金融常识,不仅可以学技术开发,还可以炒币子赚点外快。
高级级别:能够了解各种加密货币采用技术的优缺点,或者加上一些炒股金融知识,拉个微信群可以收门票了喽~
大神级别:了解ICO 融资之类知识还需要编程能力,Golang/C++/JAVA 至少精通一门吧。
富豪级别:能够杀出来个区块链应用,财务自由很简单啊。
乔帮主级别:改变世界。
4. Go语言难易程度如何?
Go语言学习起来完全可以零基础入门。Google在创建Go语言的最初定义为:简单快乐的开发高性能系统语言。可见go语言并不是很难。
如果这些概念你觉得很有意思,想站在程序员的角度,理一理区块链技术如何在企业信息系统中落地,那么请长期专注传智播客黑马程序员;这里还会推出区块链的行业应用分析、Go语言与区块链、区块链编程入门、传智博客谷在线区块链课程。长期都有小板凳,欢迎来询~
为莘莘学子改变命运而讲课,为千万学生少走弯路而著书
以上是关于干货 | 区块链开发主流编程语言居然是Go语言!?的主要内容,如果未能解决你的问题,请参考以下文章