孔为民医生个人网站,外管局网站先支后收怎么做报告,网站被挂了黑链,青岛网站建设鲁捷云使用go获取链上数据之主动拉取-搭建环境#xff08;一#xff09; 1、配置文件1.1、新建配置文件1.2、新建setting.go文件1.3、新建config.go文件 2、全局变量配置2.1、新建global.go2.2、初始化配置2.3、验证配置 在我们实际开发项目中#xff0c;很多时候都需要从链上获取… 使用go获取链上数据之主动拉取-搭建环境一 1、配置文件1.1、新建配置文件1.2、新建setting.go文件1.3、新建config.go文件 2、全局变量配置2.1、新建global.go2.2、初始化配置2.3、验证配置 在我们实际开发项目中很多时候都需要从链上获取区块数据将数据加工处理后存入到数据库中本章开始我们来学习一下如何从链上获取数据主动拉取并存储到数据库中 1、配置文件
首先我们新建go项目然后在项目根目录新建目录config、internal、global、pkg完成后的项目看起来应该是这样的
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/globallog
)func main() {log.Println(global.BlockChainConfig.RpcUrl)
}接下来我们运行main()方法输出如下 说明我们的配置已经能正确的写入到了全局变量并可以在项目里进行读取 通过本章课程学习我们搭建了项目的基础环境并成功的完成了配置文件的读取操作在下节课里我们将要进一步完善项目让我们的项目可以访问数据库没有学会的同学可以照着教程反复练习几遍那么下节课见吧 请关注公众号外柏叁布道者web3_preacher回复 “go获取链上数据” 领取完整代码