所以这是我在stackoverflow中的第一个问题。 :)
我们在org包中定义了一个结构,如下所示:
type Employee struct {
FirstName, LastName string
salary int
}
然后在main.go文件中,我们初始化如下的结构:
func main() {
ross := Employee {
FirstName: "Ross",
LastName: "Geller",
}
fmt.Println(ross)
}
输出如下:
{Ross Geller 0}
由于薪水字段不是从Employee结构类型导出的,因此它显示int的零值。最终用户将假定此员工的薪水为0。
答案 0 :(得分:1)
如果您真的很担心,可以覆盖Employee的std::map<std::string,int> mymap;
mymap["playerhealth"]=20;
while(1)
{
//...
if(...) break;
}
std::string string;
std::cout<<"Enter command: ";
std::cin>>string;
std::string vartobechanged=string.substr(0,string.find("="));
mymap[vartobechanged]=atoi(string.substr(string.find("=")+1,string.length()-string.find("=")-1).c_str());
:
https://play.golang.org/p/PncEOGVP2HP
.String
但是实际上,他们会在程序控制台中看到输出吗?这很可能是非问题。
答案 1 :(得分:0)
好吧,如果要初始化字段,则可以始终编写导出的函数或方法来实现,例如
func New(first,last,salary string) Employee{
//...
}
之所以可以具有未导出的类型,是为了能够创建称为不透明类型的东西。
您可以在数据设置器和获取器上使用方法,并执行复杂的操作,而不必担心用户会破坏数据的内部状态。
想象一下,您正在编写绘图应用程序,并且有一个画家Struct,它可以跟踪光标以及当前的颜色和内容。您确实不希望您的用户能够手动与您的画家打交道。那会破坏一切。
因此,用户通过初始化程序创建了painter,并将其作为Painter类型传递,并使用moveTo
,lineTo
之类的方法在内部更新状态。