# 2 - 用 Go 来做以太坊开发
这里可能有读者会问,为什么用 Go 语言做以太坊开发?当然以太坊开发,有其自己的语言 Solidity,那为什么不用其自己的语言呢?
笔者这里一开始也确实打算以 Solidity 语言去学习以太坊开发,那为什么又改用 Go 语言了呢?
很简单的原因,就是项目需要,后面的开发项目中,有要求是需要用 Go 语言,基于学习成本和实施成本的考虑。
# 那么这里可能还有不甘心的小伙伴儿会问 Solidity 和 Go 有什么不同呢?
它们分别用于以太坊的智能合约和底层开发。下面我会详细解释它们的不同以及如何选择。
# Solidity:
Solidity 是一种专门为以太坊平台设计的智能合约编程语言。智能合约是在区块链上执行的自动化程序,可以实现各种功能,如数字资产交换、投票系统、去中心化应用(DApp)等。Solidity 具有以下特点:
-
目标: Solidity 旨在实现智能合约的编写,使开发人员能够在以太坊平台上构建去中心化应用。
-
语法: Solidity 的语法与类似的编程语言(如 JavaScript)相似,使开发者相对容易上手。
-
合约: Solidity 用于编写智能合约,合约中包含状态变量、函数、事件等,用于实现业务逻辑。
-
特点: Solidity 具备丰富的特性,如状态变量、修饰器、事件、继承等,用于支持复杂的智能合约开发。
示例: 下面是一个简单的 Solidity 智能合约,实现一个简单的数字投票系统。
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.0; | |
contract SimpleVoting { | |
uint256 public yesVotes; | |
uint256 public noVotes; | |
function voteYes() public { | |
yesVotes++; | |
} | |
function voteNo() public { | |
noVotes++; | |
} | |
} |
# Go:
Go 是一种通用编程语言,用于开发各种类型的应用程序,包括底层开发、Web 开发、后端开发等。在区块链领域,Go 通常用于开发区块链节点和工具,如以太坊客户端(Geth)、Hyperledger Fabric 等。
-
目标: Go 用于通用软件开发,区块链领域中主要用于开发区块链节点、工具和底层功能。
-
语法: Go 具有简洁而现代的语法,强调可读性和高效性。
-
应用: Go 在区块链领域广泛应用于开发底层区块链网络、节点、钱包、工具等。
示例: 下面是一个使用 Go 编写的简单命令行工具,用于生成区块链账户地址。
package main | |
import ( | |
"fmt" | |
"log" | |
"github.com/ethereum/go-ethereum/accounts/keystore" | |
) | |
func main() { | |
ks := keystore.NewKeyStore("./keystore", keystore.StandardScryptN, keystore.StandardScryptP) | |
account, err := ks.NewAccount("passphrase") | |
if err != nil { | |
log.Fatal(err) | |
} | |
fmt.Printf("Account address: %s\n", account.Address.Hex()) | |
} |
# 如何选择:
-
Solidity: 选择 Solidity,如果你想在以太坊平台上开发智能合约,构建去中心化应用程序(DApp),并与以太坊网络进行交互。Solidity 是专门为这些用例设计的。
-
Go: 选择 Go,如果你想参与底层区块链开发,如开发节点、客户端、工具,以及与区块链网络进行交互。Go 在这些领域有着广泛的应用。
最终,选择取决于你的项目需求和兴趣领域。如果你对智能合约和去中心化应用感兴趣,那么学习 Solidity 是一个不错的选择。如果你对底层区块链开发和工具有兴趣,那么学习 Go 会更有帮助。