---
概述: 用Go查询以太坊区块。
---
# 查询区块
正如我们所见,您可以有两种方式查询区块信息。
#### 区块头
您可以调用客户端的`HeadByNumber`来返回有关一个区块的头信息。若您传入`nil`,它将返回最新的区块头。
```go
header, err := client.HeaderByNumber(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(header.Number.String()) // 5671744
```
#### 完整区块
调用客户端的`BlockByNumber`方法来获得完整区块。您可以读取该区块的所有内容和元数据,例如,区块号,区块时间戳,区块摘要,区块难度以及交易列表等等。
```go
blockNumber := big.NewInt(5671744)
block, err := client.BlockByNumber(context.Background(), blockNumber)
if err != nil {
log.Fatal(err)
}
fmt.Println(block.Number().Uint64()) // 5671744
fmt.Println(block.Time().Uint64()) // 1527211625
fmt.Println(block.Difficulty().Uint64()) // 3217000136609065
fmt.Println(block.Hash().Hex()) // 0x9e8751ebb5069389b855bba72d94902cc385042661498a415979b7b6ee9ba4b9
fmt.Println(len(block.Transactions())) // 144
```
调用`Transaction`只返回一个区块的交易数目。
```go
count, err := client.TransactionCount(context.Background(), block.Hash())
if err != nil {
log.Fatal(err)
}
fmt.Println(count) // 144
```
在下个章节,我们将学习查询区块中的交易。
### 完整代码
```go
package main
import (
"context"
"fmt"
"log"
"math/big"
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, err := ethclient.Dial("https://mainnet.infura.io")
if err != nil {
log.Fatal(err)
}
header, err := client.HeaderByNumber(context.Background(), nil)
if err != nil {
log.Fatal(err)
}
fmt.Println(header.Number.String()) // 5671744
blockNumber := big.NewInt(5671744)
block, err := client.BlockByNumber(context.Background(), blockNumber)
if err != nil {
log.Fatal(err)
}
fmt.Println(block.Number().Uint64()) // 5671744
fmt.Println(block.Time().Uint64()) // 1527211625
fmt.Println(block.Difficulty().Uint64()) // 3217000136609065
fmt.Println(block.Hash().Hex()) // 0x9e8751ebb5069389b855bba72d94902cc385042661498a415979b7b6ee9ba4b9
fmt.Println(len(block.Transactions())) // 144
count, err := client.TransactionCount(context.Background(), block.Hash())
if err != nil {
log.Fatal(err)
}
fmt.Println(count) // 144
}
```
- 客户端
- 创建客户端
- 以太坊账户
- 账户余额
- 账户代币余额
- 生成新钱包
- 密匙库
- 硬件钱包
- 地址验证
- 交易
- 查询区块
- 查询交易
- ETH转账
- 代币转账
- 监听新区块
- 创建裸交易
- 发送裸交易
- 智能合约
- 智能合约 & ABI
- 部署智能合约
- 加载智能合约
- 查询智能合约
- 写入智能合约
- 读取智能合约二进制码
- 查询ERC20代币智能合约
- 事件日志
- 监听事件日志
- 读取时间日志
- 读取ERC20代币的事件日志
- 读取0x Protocol事件日志
- 签名
- 生成签名
- 验证签名
- 测试
- 发币龙头
- 使用模拟客户端
- Swarm存储
- 创建 Swarm存储
- 上传文件到Swarm
- 从Swarm下载文件
- Whisper通信协议
- 创建Whisper客户端
- 生成Whisper密匙对
- 在Whisper上发送消息
- 监听Whisper消息
- 工具
- 工具集合
- 专有词汇表
- 资源