Go言語で構造体を変換する方法

DDD
リリース: 2023-06-16 12:01:31
オリジナル
1322 人が閲覧しました

Go 言語変換構造体: 1. 構造体をマップに変換します。reflect パッケージの「TypeOf」関数と「ValueOf」関数を使用して構造体の型と値を取得し、構造体の各フィールドを走査します。 . そしてそれをマップに保存します; 2. マップを構造体に変換します. 入力パラメータはマップと構造体へのポインタです. 出力は空です. この関数はマップ内の値を構造体の対応するフィールドにマップします反省を通して。

Go言語で構造体を変換する方法

このチュートリアルの動作環境: Windows 10 システム、go1.20 バージョン、Dell g3 コンピューター。

Go 言語は静的型付けプログラミング言語であり、その特徴の 1 つは、複雑なデータ型を構造体によって定義および整理することです。構造体の変換は、Go 言語開発において習得しなければならない基本的なスキルの 1 つです。この記事では構造体を変換する方法を紹介します。

構造体の定義:

Go 言語では、次の方法で構造体を定義できます:

type Person struct {
Name string
Age int
}
ログイン後にコピー

この定義は、Person 型の構造体を表します。これには、名前と年齢の 2 つのフィールドがあります。

定義された構造体の場合、次の方法でオブジェクトをインスタンス化し、その値を設定できます:

a := Person{
Name: "Alice",
Age: 20,
}
ログイン後にコピー

この方法で、構造体タイプ Assignment の変数を簡単に設定して使用できます。

1. 構造体をマップに変換する

構造体型をマップ型に変換する必要がある場合は、次のコードを使用できます:

func StructToMap(obj interface{}) map[string]interface{} {
objType := reflect.TypeOf(obj)
objVal := reflect.ValueOf(obj)
data := make(map[string]interface{})
for i := 0; i < objVal.NumField(); i++ {
data[objType.Field(i).Name] = objVal.Field(i).Interface()
}
return data
}
ログイン後にコピー

関数の入力パラメータはインターフェイス型で、出力はマップ型です。この関数は、reflect パッケージの TypeOf 関数と ValueOf 関数を使用して、構造体の型と値を取得します。次に、関数は構造体の各フィールドを反復処理し、それをマップに保存します。

2. マップを構造体に変換する

マップ型を構造体型に変換する必要がある場合は、次のコードを使用できます:

func MapToStruct(m map[string]interface{}, s interface{}) {
sType := reflect.TypeOf(s).Elem()
sVal := reflect.ValueOf(s).Elem()
for i := 0; i < sType.NumField(); i++ {
field := sType.Field(i)
val := reflect.ValueOf(m[field.Name])
sVal.Field(i).Set(val)
}
}
ログイン後にコピー

The 関数の入力パラメーターはマップと構造体へのポインターであり、出力は空です。この関数は、マップ内の値をリフレクションを通じて構造体の対応するフィールドにマッピングします。

要約:

上記の紹介を通じて、Go 言語では構造体の変換が非常に簡単で、リフレクションを使用することで簡単に実現できることがわかりました。上記の方法により、Go 言語の開発プロセス中に構造体型を快適に使用して変換できるため、より効率的に開発できます

以上がGo言語で構造体を変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!