実際の開発プロジェクトでは、チェーンからブロックデータを取得し、データを加工してデータベースに保存することが必要になることが多いですが、この章の初めに、チェーンからデータを取得(アクティブプル)して保存する方法を学びましょう。それをデータベースに入れる
1. 設定ファイル
まず、新しい go プロジェクトを作成し、プロジェクトのルート ディレクトリに新しいディレクトリを作成します: config、internal、global、pkg 完成したプロジェクトは次のようになります。
configディレクトリは主に設定ファイルと設定ファイル操作に関連するクラスを保存します
内部ディレクトリは主にモデル、dao、サービスなどの内部クラスを保存します
グローバルディレクトリは主にグローバル クラスを保存します
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 可以获取
データベースはデータベース リンク情報で構成されています。この例では、mysql データベースが使用されています。ブロック
チェーンは、ブロックチェーンの 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.go を作成します。コードは次のとおりです。
package global
import (
"go-chain-data/config/setting"
)
var (
DbConfig *setting.DbConfig
BlockChainConfig *setting.BlockChainConfig
)
ここで定義した変数を次に各クラスで呼び出します
2.2. 初期設定
2.2.1. 新しい設定の読み取り方法
まず、config.go ファイルに新しい SetupConfig() メソッドを作成します。
func SetupConfig() {
conf, err := NewConfig()
if err != nil {
log.Panic("NewConfig error : ", err)
}
err = conf.ReadSection("Database", &global.DbConfig)
if err != nil {
log.Panic("ReadSection - Database error : ", err)
}
err = conf.ReadSection("BlockChain", &global.BlockChainConfig)
if err != nil {
log.Panic("ReadSection - BlockChain error : ", err)
}
}
conf.ReadSection() メソッドを呼び出すことで、yml 内の設定をグローバル変数に読み込み、global.DbConfig.X を通じて他の場所でその設定を呼び出すことができます。
2.2.2. 呼び出し設定の初期化方法
まず、プロジェクトのルート ディレクトリに新しい main.go ファイルを作成し、忘れずにパッケージをmainに変更して
から、main.go ファイルに新しい init() メソッドを作成します。
func init() {
config.SetupConfig()
}
init() メソッドでは、SetupConfig() メソッドを呼び出します。この init() は go の組み込みメソッドであり、クラス ローディングを呼び出す前にデフォルトで自動的に実行されます。
2.3. 設定の確認
main.go に新しい main() メソッドを作成します。
func main() {
log.Println(global.BlockChainConfig.RpcUrl)
}
次に、main() メソッドを実行すると、出力は次のようになります。
これは、設定がグローバル変数に正しく書き込まれ、プロジェクトで読み取ることができることを意味します。
この章の学習を通じて、プロジェクトの基本的な環境を構築し、設定ファイルの読み込み操作を正常に完了しましたので、次の授業では、プロジェクトがデータベースにアクセスできるようにプロジェクトをさらに改良していきます。学習していませんが、理解できます。チュートリアルは何回も練習しましたので、次のクラスでお会いしましょう。
公式アカウント: Web3_preacher (web3_preacher)に注意してください。完全なコードを受け取るには、「チェーン上のデータを取得しに行く」と返信してください。