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

news2024/9/29 15:19:23

使用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:3306
  Username: #用户名
  Pwd: #数据库密码
  Charset: utf8  #数据库编码
  ParseTime: True

BlockChain:
  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 setting

type DbConfig struct {
	DbType    string
	DbName    string
	Host      string
	Username  string
	Pwd       string
	Charset   string
	ParseTime bool
}
type BlockChainConfig struct {
	RpcUrl string
}

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

1.3、新建config.go文件

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

go get github.com/spf13/viper

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

package config

import (
	"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 global

import (
	"go-chain-data/config/setting"
)

var (
	DbConfig         *setting.DbConfig
	BlockChainConfig *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 main

import (
	"go-chain-data/global"
	"log"
)

func main() {
	log.Println(global.BlockChainConfig.RpcUrl)
}

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

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

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

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

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

相关文章

基于Selenium模块实现无界面模式 执行JS脚本

此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 & 执行JS脚本(把滚动条拉到底部),并以具体的示例进行展示。 1、Selenium 设置无界面模式 创建浏览器对象之前,创建 options 功能对象 :options webdriver.ChromeOptions() 添加…

SciencePub学术 | 传感器类重点SCIE征稿中

SciencePub学术 刊源推荐: 传感器类重点SCIE征稿中!信息如下,录满为止: 一、期刊概况: 传感器类重点SCIE 【期刊简介】IF:2.0-2.5,JCR3区,中科院4区; 【版面类型】正刊&#xff1…

【UE4 RTS】03-Camera Zoom

前言 本篇通过对CameraPawn的弹簧臂组件的长度进行增减,从而实现了视角的远近缩放控制。 效果 步骤 1. 在项目设置中添加如下操作映射 2. 打开玩家控制器“RTS_PlayerController_BP”,在上一篇中我们已经实现了CameraPawn的移动功能: 这里…

OpenLayers实战,OpenLayers实现气象台风飓风运动轨迹运动动画,可调台风旋转速度和运动速度,静态图片旋转动画

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers实现气象中常用的台风或者飓风运动轨迹动画,支持调整台风图标旋转速度和运动速度。 不同的台风可以设置不同的运动速度和旋转速度,也可以通过变量控制图片不旋转。 本章图片使用静态png图片,并非gif动态图。…

棒球电影产业建设·野球1号位

棒球电影产业建设 1. 引言 棒球电影产业在美国和全球的历史发展概述 自20世纪初,棒球电影产业在美国开始起步,以一种富有创意的方式将体育和娱乐结合起来,开创了一种全新的娱乐形式。这些电影为观众提供了一个了解棒球运动的独特视角&#…

FFmpeg 硬编码VideoToolBox流程

介绍 FFmpeg已经提供对 VideoToolBox 的编解码支持;主要涉及到的文件有videotoolbox.c、videotoolbox.h、videotoolboxenc.c、ffmepg_videotoolbox.c。在编译 FFmpeg 源码时,想要支持VideoToolBox,在 configure 时,需要–enable-…

SMART司马他法则(目标管理)

S代表具体(Specific),指绩效考核要切中特定的工作指标,不能笼统; M代表可度量(Measurable),指绩效指标是数量化或者行为化的,验证这些绩效指标的数据或者信息是可以获得的; A代表可实现(Attainable)&…

CSV文件编辑器——Modern CSV for mac

Modern CSV for Mac是一款功能强大、操作简单的CSV文件编辑器,适用于Mac用户快速、高效地处理和管理CSV文件。Modern CSV具有直观的用户界面,可以轻松导入、编辑和导出CSV文件。它支持各种功能,包括排序、过滤、查找和替换,使您能…

1.RuoYi-Vue前后端分离版本启动

1.代码下载 去若依官网,选择RuoYI前后端分离版: 下载地址:https://gitee.com/y_project/RuoYi-Vue 2.依赖环境的部署 1.Mysql 2.Redis安装部署 : https://blog.csdn.net/qq_27860623/article/details/132168382 3.Idea打开后端服务 用Idea打开后端的…

隐秘通信-使用PingTunnel搭建ICMP隧道实验

目录 引言 实验目的 实验内容 基础知识 ICMP协议简介 ICMP隧道简介 ICMP隧道搭建工具介绍 PingTunnel简介 实验过程 前置准备 PingTunnel搭建ICMP隧道步骤 CentOS 7更换阿里源 CentOS 7安装make及词法分析工具 CentOS 7安装libpcap依赖库 CentOS 7安装PingTunnel…

Scikit-learn聚类方法代码批注及相关练习

一、代码批注 代码来自:https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py import numpy as np from sklearn.cluster import DBSCAN from sklearn import metrics from sklearn.datasets …

机器学习深度学习——RNN的从零开始实现与简洁实现

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——循环神经网络RNN 📚订阅专栏:机器学习&&深度学习 希望文章对你们有所帮…

php后端实现调用高德地图进行POI搜索

对于当前位置或者选定省市位置进行查询 接口实现 /*** 查询地址* ApiTitle (查询地址)* ApiSummary (查询地址)* ApiMethod (POST)* ApiRoute (/api/demo/address)* ApiParams (name"dart", type"integer", requiredtrue, description"省…

项目经理的性格与情绪控制︱小象智能COO、原腾讯项目集管理经理王炼

小象智能COO、原腾讯项目集管理经理王炼女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:项目经理的性格与情绪控制。大会将于8月12-13日在北京举办,敬请关注! 议题简要: 众所周知,项…

光模块故障:能否继续发射光信号?

光模块是一种关键的光通信组件,负责将电信号转换为光信号进行传输。然而,光模块也可能出现故障,导致其无法正常工作。那么,如果光模块坏了,是否还能发射光信号呢?本文将探讨光模块故障对光信号发射的影响&a…

【ArcGIS】经纬度数据转化成平面坐标数据

将点位置导入Gis中,如下(经纬度表征位置): 如何利用Gis将其转化为平面坐标呢? Step1 坐标变换 坐标变换,打开ArcToolbox,找到“数据管理工具”->“投影和变换”->“要素”->“投影”…

0基础学习VR全景平台篇 第81篇:全景相机-临云镜如何直播推流

临云镜全景相机是阿里巴巴定制全景设备,实现空间三维信息的快速采集,与阿里云三维空间重建平台搭配,帮助品牌商与平台以较低的成本完成空间的快速采集,并支持对室内/室外空间的三维全景展示及空间漫游,同时支持VR浏览、…

论文图表--pyecharts使用

python中使用matplotlib画图颜色不好看,所以选取了pyecharts来画图表。 echarts介绍 pyecharts是echarts的python接口,echarts本身是基于javascript的,由于javascript搭建也比较麻烦,这里使用pyecharts来画图。 echarts常用来pp…

语音同声翻译软件到底谁更胜一筹呢

嘿!你是否曾经遇到过需要在不同语言之间进行实时翻译的情况?别担心,现在有许多翻译软件可供选择,让你的沟通变得更加简便和愉快。无论你是旅行者、国际商务人士还是语言爱好者,这些软件都将成为你的得力助手&#xff0…

PyQt学习笔记-Windows系统版本兼容问题踩坑记录

1 Pyinstaller打包的exe在Win10上可以使用&#xff0c;在Win7上缺提示找不到dll。 错误信息&#xff1a; Traceback (most recent call last): File "main.py", line 4, in <module> ImportError: DLL load failed while importing QtWidgets: 找不到指定的…