混乱しているタイトルのため申し訳ありませんが、私はこの問題の言葉に困っています。だから私はこのようなYAML設定ファイルを持っていると言うことができますYAMLを未知の構造体にアンマーシャリングする
animals:
-
type: whale
options:
color: blue
name: Mr. Whale
features:
-
type: musician
options:
instruments:
- Guitar
- Violin
私は本当に働いているものに似ています。
は、だから今は
type Config struct {
AnimalConfigs []*AnimalConfig `yaml:"animals"`
}
type AnimalConfig struct{
Type string
Options map[string]string // ????
Features []*FeatureConfig
}
type FeatureConfig struct{
Type string
Options ????
}
にこの設定をマーシャリングするために、いくつかの構造体を持っているので、ここでの問題は、動物の種類(クジラ、等。)、および機能(ミュージシャンなどが...)であるということです事前に決定されていない場合は、別々のモジュールとして追加することができ、それぞれ独自の構成を持つことができます。だから、誰かがこのライブラリを使っていて、自分の動物を追加したいと言っています。私はこの動物が何であるか、それが何の選択肢になるのか、その特徴は何かを知ることはできません。私はまた特徴の構造を知らない。私が知っているのは、type
のプロパティとoptions
のプロパティがあるということだけです。開発者がカスタムの動物や機能を追加できるようにしたいと思います。私のライブラリはちょうどYourAnimal.Create(yourConfig)
のようなことをすることができます。
私はgo-yamlライブラリを使用しています。 AnimalConfig構造体に見られるように、最初の考えはoptions
とfeatures
をちょうどmap[string]string
にしてから、カスタムモジュールをその構造体に非整列させましたが、例えばmusician
の機能では機能しませんでした。 instruments
はリストであり、文字列ではありません。ありがとう!
明確にFeatureConfig.Optionsは '' map [string] [] string''です。ここでそのようなタイプを使うのはどうですか? – Altenrion