使用go获取链上数据之主动拉取-搭建环境(一)

使用go获取链上数据之主动拉取-搭建环境(一)

  • 1、配置文件
    • 1.1、新建配置文件
    • 1.2、新建setting.go文件
    • 1.3、新建config.go文件
  • 2、全局变量配置
    • 2.1、新建global.go
    • 2.2、初始化配置
    • 2.3、验证配置

在我们实际开发项目中,很多时候都需要从链上获取区块数据,将数据加工处理后存入到数据库中,本章开始,我们来学习一下如何从链上获取数据(主动拉取)并存储到数据库中

1、配置文件

首先我们新建go项目,然后在项目根目录新建目录:config、internal、global、pkg,完成后的项目看起来应该是这样的:
![在这里插入图片描述](https://img-blog.csdnimg.cn/613794c33ddb4f55a0e543a571b3f6b2.png#pic_center

config目录主要存储配置文件、配置文件操作相关类
internal目录主要存储内部类,如model、dao、service等等
global目录主要存储全局类
pkg目录主要存储第三方类

1.1、新建配置文件

在config目录下新建文件 config.yml,填写如下信息:

Database:DbType: mysql  #数据库类型DbName: go-chain-data  #数据库名称Host: #数据库链接,如 127.0.0.1:3306Username: #用户名Pwd: #数据库密码Charset: utf8  #数据库编码ParseTime: TrueBlockChain:RpcUrl: https://goerli.infura.io/v3/    #  区块链rpc地址  infura.io 可以获取 

Database配置的是数据库链接信息,我们示例里使用的是mysql数据库
BlockChain配置的是区块链的rpc地址,如果没有可以访问infura.io申请

1.2、新建setting.go文件

首先在config目录下创建setting目录,然后在setting目录下新建setting.go文件,代码如下:

package settingtype DbConfig struct {DbType    stringDbName    stringHost      stringUsername  stringPwd       stringCharset   stringParseTime bool
}
type BlockChainConfig struct {RpcUrl string
}

这里的结构与我们yml配置文件是一致的,后面我们会将yml配置读取到这些对象里

1.3、新建config.go文件

首先,在项目终端下执行如下命令安装viper包:

go get github.com/spf13/viper

然后,在config目下新建 config.go文件,代码如下:

package configimport ("github.com/spf13/viper"
)type Config struct {vp *viper.Viper
}func NewConfig() (*Config, error) {vp := viper.New()vp.SetConfigName("config")vp.AddConfigPath("config")vp.SetConfigType("yaml")err := vp.ReadInConfig()if err != nil {return nil, err}return &Config{vp}, nil
}func (config *Config) ReadSection(k string, v interface{}) error {err := config.vp.UnmarshalKey(k, v)if err != nil {return err}return nil
}

NewConfig方法里我们创建了viper的实例对象,并读取了yml文件的配置信息
ReadSection方法可以通过给定的 k值 读取配置文件对应的 配置信息 并存到 v 变量里

2、全局变量配置

2.1、新建global.go

在global目录下新建global.go,代码如下:

package globalimport ("go-chain-data/config/setting"
)var (DbConfig         *setting.DbConfigBlockChainConfig *setting.BlockChainConfig
)

这里定义的变量,我们接下来会在各个类中进行调用

2.2、初始化配置

首先,在global.go文件里新建setupConfig()方法:

func setupConfig() {conf, err := config.NewConfig()if err != nil {log.Panic("config2.NewConfig error : ", err)}err = conf.ReadSection("Database", &DbConfig)if err != nil {log.Panic("ReadSection - Database error : ", err)}err = conf.ReadSection("BlockChain", &BlockChainConfig)if err != nil {log.Panic("ReadSection - BlockChain error : ", err)}
}

通过调用conf.ReadSection()方法,我们将yml里的配置读取到全局变量里,这样在其他的地方我们就可以通过global.DbConfig.X的方式进行调用

然后,在global.go文件里新建init()方法:

func init() {setupConfig()
}

在init()方法里,我们调用setupConfig()方法,这个init()是go内置方法,默认会在调用类加载之前自动执行

2.3、验证配置

首先,在项目根目录新建main.go文件,记得把package改成main
然后,在main.go里新建main()方法,完整代码如下:

package mainimport ("go-chain-data/global""log"
)func main() {log.Println(global.BlockChainConfig.RpcUrl)
}

接下来我们运行main()方法,输出如下:
在这里插入图片描述
说明我们的配置已经能正确的写入到了全局变量,并可以在项目里进行读取

通过本章课程学习,我们搭建了项目的基础环境,并成功的完成了配置文件的读取操作,在下节课里我们将要进一步完善项目,让我们的项目可以访问数据库,没有学会的同学可以照着教程反复练习几遍,那么下节课见吧!

请关注公众号:外柏叁布道者(web3_preacher),回复 “go获取链上数据” 领取完整代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/28865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 微调终极指南:第 1 部分 — 预训练模型及其配置

一、说明 如今,在训练深度学习模型时,通过在自己的数据上微调预训练模型来迁移学习已成为首选方法。通过微调这些模型,我们可以利用他们的专业知识并使其适应我们的特定任务,从而节省宝贵的时间和计算资源。本文分为四个部分&…

数据结构:插入排序

直接插入排序 插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。 直接插入排序是插入排序算法中的一种,采用的方法是:在…

解析隧道代理被封的几个主要原因

Hey,各位爬虫高手,你是不是经常遇到爬虫代理HTTP被封的问题?不要慌,今天我来分享一些信息,帮你解析这个问题!告别封禁,让你的爬虫工作更顺利,赶快跟随我一起了解吧! 在爬…

opencv基础45-图像金字塔01-高斯金字塔cv2.pyrDown()

什么是图像金字塔? 图像金字塔(Image> Pyramid)是一种用于多尺度图像处理和分析的技术,它通过构建一系列不同分辨率的图像,从而使得图像可以在不同尺度下进行处理和分析。图像金字塔在计算机视觉、图像处理和计算机…

APT80DQ60BG-ASEMI快恢复二极管APT80DQ60BG

编辑:ll APT80DQ60BG-ASEMI快恢复二极管APT80DQ60BG 型号:APT80DQ60BG 品牌:ASEMI 芯片个数:双芯片 封装:TO-3P 恢复时间:≤80ns 工作温度:-55C~150C 浪涌电流:600A 正向电…

UEFI build报错:‘build‘ is not recognized as an internal or external command

UEFI学习,某一次进行build时,提示: build is not recognized as an internal or external command,operable program or batch file. 用的命令是: C:\UEFIWorkspace>build -a X64 -p edk2\OvmfPkg\OvmfPkgX64.dsc -b NOOPT -…

【性能类】—页面性能类

一、提升页面性能的方法有哪些? 1. 资源压缩合并,减少HTTP请求 图片、视频、js、css等资源压缩合并,开启HTTP压缩,把资源文件变小 2. 非核心代码异步加载 →异步加载的方式 → 异步加载的区别 异步加载的方式 ① 动态脚本加载…

【OpenCV常用函数:视频捕获函数】cv2.VideoCapture

文章目录 1、cv2.VideoCapture() 1、cv2.VideoCapture() 输入视频路径,创建VideoCapture的对象 cv2.VideoCapture(filename) filename: 视频文件的路径视频名扩展名该类的函数有: 1)video.isOpened: 检查视频捕获是否成功 2)vid…

重试框架入门:Spring-RetryGuava-Retry

前言 在日常工作中,随着业务日渐庞大,不可避免的涉及到调用远程服务,但是远程服务的健壮性和网络稳定性都是不可控因素,因此,我们需要考虑合适的重试机制去处理这些问题,最基础的方式就是手动重试&#xf…

YOLOv5源码中的参数超详细解析(2)— 配置文件yolov5s.yaml

前言:Hello大家好,我是小哥谈。YOLOv5配置了5种不同大小的网络模型,分别是YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,其中YOLOv5n是网络深度和宽度最小但检测速度最快的模型,其他4种模型都是在YOLOv5n的基础上不断…

BEV3D检测模型

Fast-BEV: A Fast and Strong Bird‘s-Eye View Perception Baseline 目录 Fast-BEV: A Fast and Strong Bird‘s-Eye View Perception Baseline 近年来,基于鸟瞰图(BEV)表示的感知任务越来越受到关注,BEV表示作为下一代自动驾…

常见Git命令

Git常见命令 1. 添加单个文件 git add a.txt2. 添加多个文件 git add a.txt b.txt c.txt3. 添加(commit)修改,此时修改还未push到服务器上 git commit -m "修改了a.txt内容"4. 提交(push)修改,此时修改会同步到服务器上 git push5. 查看当…

《Python入门到精通》os模块详解,Python os标准库

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 os模块详解 1、文件目录操作os.stat() 获取文件状态os.utime() 修改文件时间os.r…

IPC之三:使用 System V 消息队列进行进程间通信的实例

IPC 是 Linux 编程中一个重要的概念,IPC 有多种方式,本文主要介绍消息队列(Message Queues),消息队列可以完成同一台计算机上的进程之间的通信,相比较管道,消息队列要复杂一些,但使用起来更加灵活和方便&am…

FFmpeg中AVIOContext的使用

通过FFmpeg对视频进行编解码时,如果输入文件存在本机或通过USB摄像头、笔记本内置摄像头获取数据时,可通过avformat_open_input接口中的第二个参数直接指定即可。但如果待处理的视频数据存在于内存块中时,该如何指定,可通过FFmpeg…

用MiCoNE工具对16S序列数据进行共现网络分析

谷禾健康 微生物群通常由数百个物种组成的群落,这些物种之间存在复杂的相互作用。绘制微生物群落中不同物种之间的相互关系,对于理解和控制其结构和功能非常重要。 微生物群高通量测序的激增导致创建了数千个包含微生物丰度信息的数据集。这些丰度可以转…

python去掉列表数据中的最大最小值

python去掉列表数据中的最大最小值 有一个列表数据为: data = [1,29,3,3,4,5,1,3,4,5,6,7,80,9,9,9,4]现在需要去掉列表中的最大值、最小值。 步骤如下: 1、先获取最大值 max_value = max(data)2、然后获取最小值 min_value = min(data)3、使用filter进行过滤,满足条件的…

Nginx开启gzip网页传输压缩配置

场景 Nginx 服务器为网页压缩专门提供了 gz 模块,并且模块中的相关指令均可以设置在http、server或location块中, 实现服务器端按照指定的设置进行压缩。 CentOS7中解压tar包的方式安装Nginx: CentOS7中解压tar包的方式安装Nginx_centos7…

Dockerfile构建Redis镜像(yum方式)

目录 Dockerfile构建Redis镜像 1、建立工作目录 2、编写Dockerfile文件 3、构建镜像 4、测试容器 Dockerfile构建Redis镜像 1、建立工作目录 [roothuyang1 ~]# mkdir redis [roothuyang1 ~]# cd redis/ 2、编写Dockerfile文件 [roothuyang1 redis]# vim Dockerfile 配置如…

手搓vue3组件_1.封装一个button

我的icepro参考地址,内有参考代码,有条件的割割点点star 实现要求: 基于vue3支持通过colors(更改颜色)支持点击事件…支持其他的自定义样式(例如圆角,size等等) 最基础的第一步: 父组件引入并使用: <template><div class"buttonLim">我的按钮:<ice-b…