ホームページ > バックエンド開発 > Golang > 同じメンバーで型が異なる Go 構造体間で効率的に変換するにはどうすればよいですか?

同じメンバーで型が異なる Go 構造体間で効率的に変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-13 16:19:10
オリジナル
122 人が閲覧しました

How Can I Efficiently Convert Between Go Structs with Identical Members but Different Types?

メンバーが同じで型が異なる構造体の変換

Go では、メンバーが同じで型が異なる 2 つの構造体がある状況に遭遇することがあります。 。これは、ある構造体から別の構造体に値をコピーする必要がある場合に問題が生じる可能性があります。

使用例の例

次の例を考えてみましょう:

type Common struct {
    Gender int
    From   string
    To     string
}

type Foo struct {
    Id    string
    Name  string
    Extra Common
}

type Bar struct {
    Id    string
    Name  string
    Extra Common
}
ログイン後にコピー

Foo 型の変数 foo があり、その値を bar 型の変数にコピーするとします。 Bar.

変換アプローチ

Foo と Bar の基になる型は、構造体タグを除いて同一であるため、型変換を使用して値をコピーできます。その方法は次のとおりです。

foo := Foo{Id: "123", Name: "Joe"}
bar := Bar(foo)
ログイン後にコピー

上記のコードでは、変換 Bar(foo) により、foo の値が Foo 型から Bar 型に明示的に変換されます。これは、基礎となる型が同一であるため可能です。

Playground Example

<br>package main</p>
<p>import "fmt"</p>
<p>type 共通構造体{</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">Gender int
From   string
To     string
ログイン後にコピー

}

type Foo struct {

Id    string
Name  string
Extra Common
ログイン後にコピー
ログイン後にコピー

}

type Bar struct {

Id    string
Name  string
Extra Common
ログイン後にコピー
ログイン後にコピー

}

関数 main() {

foo := Foo{Id: "123", Name: "Joe"}
bar := Bar(foo)

fmt.Println(bar)
ログイン後にコピー

}

出力

{123 Joe {0 "" ""}}
ログイン後にコピー

ご覧のとおり、foo の値はに正常にコピーされましたbar.

注:

変換アプローチは、構造体の基になる型が構造体タグを除いて同一である場合にのみ機能します。基礎となる型が異なる場合は、メンバーごとに値を手動でコピーする必要があります。

以上が同じメンバーで型が異なる Go 構造体間で効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート