公開パッケージと内部パッケージがあるようなGoファイルをいくつか作成しようとしています。インポートされた構造体を匿名フィールドとして使用する
公開パッケージでは、内部構造体とほぼ同じ(1つのフィールドがない)構造体があります。
私は内部構造体に匿名フィールドを使用すると考えましたが、うまくいきません。
例:
パブリック/ public.go:
package public
type PublicStruct struct {
Field1 bool `json:"fetchStats"`
}
データ/ data.go
package data
import publicData "public"
type InternalStruct struct {
publicData.PublicStruct
Field2 bool `json:"includeHidden:`
}
フィルタ/ filter.go:
package filter
import "data"
func test() {
tmp := data.InternalStruct{Field1: true, Field2: false}
}
main.go:期待
package main
import "filter"
import "data"
func main() {
var tmp data.InternalStruct
tmp.Field1 = true
tmp.Field2 = true
filter.Test()
}
:問題なく
結果:filter/filter.go:6: unknown data.InternalStruct field 'Field1' in struct literal
なぜこれが動作しないと私はそれを動作させるために何をすべき(I両方の構造体で重複パラメータを使用していますか?)
PS:これは複数のファイルが含まれているため、私はこのことを再生画面でどのようにテストするのか分かりません。
'.'インポートは使用しないでください。テスト以外では悪い習慣とみなされます。また、 'internal'は制限されたインポートパスであり、外部パッケージがそれをインポートするのを防ぎます(これはあなたの意図であるかもしれません)。 – JimB
私は' importを取得します。 '悪い習慣ですが、匿名の構造体をできるだけ密接に動作させるために私が知っている唯一の方法でした。 前に 'import public'を使っていましたが、匿名フィールドは' public.PublicStruct'でしたが、どちらもうまくいきませんでした。 –
あなたが何を参照しているか分かりません。構造体埋め込みのセマンティクスは変更されません。 – JimB