所以我试图写一些Go文件,以便有一个面向公众的包和一个内部包。
在面向公众的包中,有一个与内部结构几乎相同(缺少一个字段)的结构。
我想在内部结构中使用匿名字段,但它似乎没有很好地发挥。
示例:
公共/ 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
为什么这不起作用,我该怎么做才能使它工作(我目前在两种结构方法中使用重复参数)?
PS:我不知道如何在游乐场测试这个,因为它涉及多个文件。
答案 0 :(得分:3)
问题是field1
不会被公共包导出,因为它的名称较低。如果它是Field1
,那么您可以在内部包中访问它,例如MyInternalStructInstance.Field1
编辑 - 解决OP的更新;
您在主体中用于启动的语法是错误的。它应该是:
tmp := InternalStruct{PublicStruct: PublicStruct{Field1: true}, Field2: false}
它与包或导入与导出无关。它可以在操场上轻松测试,这里有一个完整的例子; https://play.golang.org/p/tbCqFeNStd