Golang 言語は、可読性と保守性が高いオブジェクト指向プログラミング言語です。ほとんどの開発者にとって、開発には Golang を使用する方が便利で高速です。 Golang では、struct は非常に一般的なデータ型であり、オブジェクトの一連の属性を表すことができます。実際の開発では構造体間の変換が必要になることが多いのですが、今回はGolangがどのように構造体変換を行うのかを学びます。
まず、構造を定義しましょう:
type Person struct { Name string Age int Address Address } type Address struct { Province string City string Street string }
上のコードでは、Body という 2 つの構造を定義しました。1 つは person です。名前、年齢、住所の 3 つの属性が含まれます。ここで、住所はネストされた構造です。
実際の開発では、構造を JSON 形式に変換する必要があることがよくあります。 Golang の組み込みの encoding/json パッケージは便利な JSON エンコードおよびデコード機能を提供しており、このパッケージを使用して構造体を JSON 形式のデータに変換できます。
import "encoding/json" func main() { person := Person{Name: "Tom", Age: 18, Address: Address{Province: "Beijing", City: "Beijing", Street: "Wudaokou"}} jsonBytes, err := json.Marshal(person) if err != nil { fmt.Println(err) } fmt.Println(string(jsonBytes)) }
上記のコードでは、まず Person インスタンスを作成し、次に json.Marshal() を呼び出してインスタンスを JSON 形式のデータに変換します。変換処理中にエラーがあった場合はエラーメッセージが出力され、そうでない場合は変換結果の文字列が出力されます。
構造体を JSON 形式に変換することに加えて、多くの場合、JSON 形式のデータを構造体に変換する必要があります。上の例では人物をJSON形式に変換しましたが、次にJSONデータを構造体に変換してみましょう。
jsonStr := `{"Name":"Tom","Age":18,"Address":{"Province":"Beijing","City":"Beijing","Street":"Wudaokou"}}` person := Person{} err := json.Unmarshal([]byte(jsonStr), &person) if err != nil { fmt.Println(err) } fmt.Println(person)
上記のコードでは、最初に JSON 形式のデータを jsonStr として定義し、次に json.Unmarshal() を呼び出して Person 構造体に変換します。同様に、変換処理中にエラーが発生した場合はエラーメッセージが出力され、それ以外の場合は変換後のパーソン構造体のインスタンスが出力されます。
データのフィールド名が構造内のフィールド名と一致しない場合があり、この場合はフィールド変換が必要です。 Golang では、構造体の属性名を Tag に変更することでこれを実現できます。
type Person struct { Name string `json:"name"` Age int `json:"age"` Address Address } type Address struct { Province string `json:"province"` City string `json:"city"` Street string `json:"street"` }
上記のコードでは、JSON 属性名を指定する json タグを構造属性名の前に追加しました。変換プロセス中、タグが存在する場合は、タグが優先されます。
構造内には、配列を含む属性が存在する可能性があります。この場合、配列を走査する必要があります。
type Person struct { Name string `json:"name"` Age int `json:"age"` Address []Address `json:"address"` } type Address struct { Province string `json:"province"` City string `json:"city"` Street string `json:"street"` } func main() { jsonStr := `{"name":"Tom","age":18,"address":[{"province":"Beijing","city":"Beijing","street":"Wudaokou"},{"province":"Henan","city":"Kaifeng","street":"Longting"}]}` person := Person{} err := json.Unmarshal([]byte(jsonStr), &person) if err != nil { fmt.Println(err) } for _, a := range person.Address { fmt.Println(a.Province, a.City, a.Street) } }
上記のコードでは、Person 構造体に Address の配列が含まれており、これを走査する必要があります。変換プロセス中に、Unmarshal を使用して JSON 形式のデータを Person 構造インスタンスに変換し、次に Address 配列を走査して、各 Address インスタンスの都道府県、市区町村、および番地属性を出力できます。
Golang では、構造体の変換は比較的頻繁に行われる操作です。この記事の導入を通じて、Golang が構造体と JSON を相互に変換する方法を学びました。フィールド変換や配列トラバーサルなどの一部の特殊なケースでは、より深い理解と操作が必要です。 Golang の構造体変換機能により、開発がより便利かつ迅速になります。
以上がGolangで構造体変換を行う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。