我有一个较大的结构,直到现在我才用struct literal语法进行实例化,例如:
Thing{
"the name",
...
}
我刚刚在Thing
结构中添加了一个未导出的字段,现在Go正在抱怨:implicit assignment of unexported field 'config' in Thing literal
。
有没有办法可以继续使用文字语法,即使现在结构上有一个未导出的字段?
答案 0 :(得分:9)
如果在文字中使用键值,则只能使用composite literals创建另一个包中定义的结构类型的值,因为这样就不需要为所有文件提供初始值字段,因此您可以省略未导出的字段(只有声明包可以设置/更改)。
如果在同一个包中声明了类型,您也可以设置未导出的字段:
t := Thing{
Name: "the name",
someUnexported: 23,
}
但是如果在另一个包中声明了类型,那么你只能为导出的字段提供初始值,我猜这不足为奇:
t := otherpackage.Thing{
Name: "the name",
// someUnexported will implicitly be its zero value
}
如果你需要struct的值,其中未导出的字段的值不是其类型的零值,那么包本身必须导出某种构造函数或初始化器(或setter方法),因为从包的外部),您无法更改/设置未导出的字段。
答案 1 :(得分:6)
还要补充一点。结构的所有属性都应以大写字母开头,例如:
def keepDate(dates: List[String], component: DateComponent = DateComponent.YYYYMMDD) = {
rdd.filter(r => dates.contains(ExtractDate(r.getCrawlDate, component)))
}