私はこれらのタイプがあります:
type Value interface{}
type NamedValue struct {
Name string
Value Value
}
type ErrorValue struct {
NamedValue
Error error
}
Use v := NamedValue{Name: "fine", Value: 33}
を使用できますが、私はnotを使用できますe := ErrorValue{Name: "alpha", Value: 123, Error: err}
埋め込み構文は問題ないようですが、それを使用しても機能しませんか?
埋め込み型は(名前のない)フィールドであり、非修飾型名によって参照されます。
型で宣言されているが明示的なフィールド名がないフィールドは、anonymous fieldであり、embeddedフィールドまたは埋め込み構造体を入力します。埋め込み型は、型名
T
または非インターフェイス型名*T
へのポインタとして指定する必要があり、T
自体はポインタ型ではない場合があります。 非修飾型名はフィールド名として機能します。
だから試してください:
e := ErrorValue{NamedValue: NamedValue{Name: "fine", Value: 33}, Error: err}
複合リテラルでフィールド名を省略した場合にも機能します。
e := ErrorValue{NamedValue{"fine", 33}, err}
Go Playground の例を試してください。
Iczaによるすばらしい答えに加えて。
あなたはこれを簡単に行うことができます:
v := NamedValue{Name: "fine", Value: 33}
e := ErrorValue{NamedValue:v, Error: err}
そしてそれはうまく動作します。例を確認してください Here