Go 语言现在常常被用来做去中心化系统(decentralised system). 其他类型的公司也都把 Go 用在产品的核心模块中, 并且它在网站开发中也占据了一席之地.
我们在决定做 Karachain 的时候, 考量 (benchmark) 了 C,C++, Java, 甚至 Node.JS, 我们也试着用一些算法来作为考量标准. 而现在, 我表示我们正在用 Go 来实现此目标, 并且感觉不错.
啊, 现在建造一个区块链, 恰如当时建造一个操作系统!
我们在建造像区块链平台这样复杂的东西时, 把注意力放在了那些核心问题上. 经过差不多 4 周的开发与探索, 我们才发现这门奇妙的语言是如何优雅地解答了我们的难题.
1
长期项目中的易维护代码
Go 语言很简单. 并且每次你中途休息 (cessation) 之后回到代码中时, 它没有那么多诡异的错误 (quirk) 来浪费你的时间. 再加上, 它所需要的学习量很少, 因为它的语法比较大众, 开发者的学习曲线很平缓, 这样的特性本身就很吸引开发者. 这也导致 (facilitate) 出现 Bug 的几率很低. 所以整个开发过程显得如此简单快速.
一般来讲, 代码量越多, 项目越难维护. 而一个区块链系统需要的代码可达几千行, 所以我们需要一门语言, 来让维护变得轻松.
2
轻松变成 Go 语言大师
我们初期有 20 位出色的工程师, 大多来自 JavaScript, Java, 和 Python, 也有的是系统工程师, 善使 C 器.
我们自然需要同一个语言来协同工作. 说服 (convince) 他们来学习 Go 非常容易, 但让他们一个月速成 Go 语言工程师, 却也是挺简单... 我倒不确定选择其他语言是否也能有此神速.
3
速度与效率
不似 Python, Go 不是一种解释型语言 -- 它是编译型的. 这大大地 (drastically) 减少了在运行中突然出现的 Bug. 这一点有点像 C 语言, 代码先被编译, 错误会在编译时出现并得到处理, 然后才能运行; 但是, 它比 C 更高级, 比 JavaScript 和 Python 更具生产力.
一个区块链非常需要高效性, 鉴于其使用的是加密 (cryptographic) 算法, 鉴于它把大量数据传输 (propagate) 于网络, 并存储于网络.
4
为分布式系统而生
这一点, 在那些用 Golang 打造的工具和软件中显而易见. Docker, 作为一种微服务的容器, 也是用 Golang 打造.
我们已经看到了我们能用 Golang 打造的微服务轻松驾驭百万数量的请求.
5
Goroutines
并发 (Concurrency) 是让几个程序或者一个程序的几个部分同时间运行, 或者说并行, 以提升计算机的吞吐量 (throughput). 通常, 在 Java 或其他一些语言中, 通过线程(threads) 来实现并发. 而 Go 则用的是 "Goroutines" 方法. Goroutines 就是说一些函数, 它们可以同另外的一些函数同时被执行. 一个 Goroutine 在内存中占用大概 4kb, 而一个线程需要大约 1024kb 的内存. 所以, Goroutines 同其他语言所使用的线程比起来, 小了 250 倍, 这使得它也可以同时执行不断增加的其他 Goroutines.
以下是 Go 语言在处理线程方面与 Java 的不同之处:
在 Java 中, 对象 (object) 在工作单元间共享, 其中某一单元为了访问到这个数据, 必须先得到它的对象锁. 在 Golang 中, 工作单元间共享一种被称为信道 (channel) 的东西, 一个信道基本上就是一个先入先出通道(FIFO pipe)-- 工作单元可以向信道发起数据读写.
Go 语言遵循着它的准则 --"不要通过内存共享进行通讯, 应当通过通讯来共享内存"(not to communicate by sharing memory, instead share memory by communicating).
并行操作对于区块链是有着特殊意义的. 同时跑大量函数 -- 这一巧妙而天然的特性使得 Go 程序灵活地运行于分布式系统, 这正是区块链的主要需求. 不过这一特性早已被发掘, 有 Docker,MongoDB,Netflix,Uber 等等等, 他们的产品功能也都主要依赖于高并发.
6
区块链领域的所有人都用它
很多基于稳定区块链的 DApps 和 tools 都是用的 Go 语言. 你所需要的某个功能, 很轻松就能找到一个相对应的库.
Go 是编译型的, 所以直接由操作系统执行. 这让我们可以更自如地实现像以太坊沙盒 (EVM (Ethereum Virtual Machine)) 一样的技术. 而如果是 Java, 因为它本身的运行载体 JVM 就是一个虚拟机, 要再在上面做一个沙盒, 实质是更高一层的抽象, 这完全没有必要, 会浪费计算机资源.
当然, Go 的使用体验像是脚本语言, 学习成本很低, 所以非常适合小型项目. 而在 QPS(The Queries per second)上, 比起 Java 好太多, 所以又适合用来构建高请求量的服务.
参考学习课程下载地址: golang 语言基础区块链编程开发项目实战全套视频教程 https://pan.baidu.com/s/1r3fDV-Z925RyKNCUaT-VHw
课程包含:
golang 基础之核心技术 高并发服务器开发
去中心化前端与 web 服务器开发
区块链理论 kotlin 函数式编程
Java 分布式 springboot springcloud 微服务 数据库技术开发
spring cloud 和区块链 *** 项目, 以太坊和智能合约项目实战
来源: http://www.bubuko.com/infodetail-2978643.html