Golang でさまざまなカスタム タイプを取り込めるヘルパー関数を作成しようとしていますが、希望どおりに正確に実行する方法がわかりません。状況は次のとおりです (ちなみに、私は HAL プロトコルを実装する JSON オブジェクトを返す API を作成しています。これは、リソースと関係が単なる ID ではなくリンクとして返されることを意味します)。
アプリには、学生、校長、学校など、多数のモデルがあります。これらの各モデルには、同じものもあれば異なるものもある多くのフィールドがあります。理想的には、構造体のフィールドを反復処理し、構造体の別のフィールドを変更できる関数が必要です。大きな課題は、これらの構造体が Student、Principal、School などの型になる可能性があることです...
モデル:
type Person struct {
halgo.Links
Id bson.ObjectId
Firstname string
Lastname string
Email string
}
type Student struct {
Person `bson:",inline"`
School mgo.DBRef
}
type School struct {
Id bson.ObjectId
Address []string
Name string
Description string
}
次に、基本的にこれらの構造体のいずれかを取り、( を使用してreflect
) フィールドを反復処理し、各フィールドで何かを実行できる関数が必要です。
取る関数を試しましたinterface{}
が、問題は、フィールドにアクセスするには引数を型アサートする必要があることです。そして、それができたとしても、とにかく各タイプ/モデルに対して個別の関数を書く必要があります.:
func GenerateLinksHelper(m interface{}) {
...
}
最終的には、多少任意の構造体を受け取り、そこにある場合とない場合があるフィールドに対して操作を実行する関数を作成する方法を見つけようとしています。