【goを使ったブロックチェーン開発】チェーン上のデータを取得する(01)

実際の開発プロジェクトでは、チェーンからブロックデータを取得し、データを加工してデータベースに保存することが必要になることが多いですが、この章の初めに、チェーンからデータを取得(アクティブプル)して保存する方法を学びましょう。それをデータベースに入れる

1. 設定ファイル

まず、新しい go プロジェクトを作成し、プロジェクトのルート ディレクトリに新しいディレクトリを作成します: config、internal、global、pkg 完成したプロジェクトは次のようになります。
![ここに画像の説明を挿入](https://img-blog.csdnimg.cn/613794c33ddb4f55a0e543a571b3f6b2.png#pic_center

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)に注意してください。完全なコードを受け取るには、「チェーン上のデータを取得しに行く」と返信してください。

おすすめ

転載: blog.csdn.net/rao356/article/details/132182259