当前位置: 首页 > 面试题库 >

具有未导出字段的Golang结构文字语法

谭京
2023-03-14
问题内容

我有一个比较大的结构,直到现在我仍在使用结构文字语法实例化,例如:

Thing{
  "the name",
  ...
}

我刚刚在Thing结构中添加了一个未导出的字段,现在Go在抱怨:implicit assignment of unexported field 'config' in Thing literal

即使结构上现在有未导出的字段,有什么办法可以继续使用文字语法?


问题答案:

如果您在文字中使用 键值
,则只能使用复合文字来创建在另一个包中定义的结构类型的
,因为这样就不需要为所有字段提供初始值,因此可以省去未导出的字段(仅声明包可以设置/更改)。

如果在同一程序包中声明了类型,则也可以设置未导出的字段:

t := Thing{
    Name:           "the name",
    someUnexported: 23,
}

但是,如果类型是在另一个包中声明的,则只能为导出的字段提供初始值,我想这并不奇怪:

t := otherpackage.Thing{
    Name: "the name",
    // someUnexported will implicitly be its zero value
}

如果您需要未导出字段具有其类型的零值以外的值的struct值,则包本身必须导出某种构造函数或初始化程序(或setter方法),因为从外部(包)无法更改/设置未导出的字段。



 类似资料:
  • 问题内容: 如果我将类型定义为: 那我该如何克隆这种类型的对象呢?如果我做一个简单的任务: 然后,对受影响的两个对象所做的任何更改。由于未导出,因此即使使用反射提取,也无法显式复制。 我目前在类型本身的包中提供一个方法。但这对其他软件包中的类似类型没有帮助。还有另一种方法吗? 问题答案: 你不能 这就是未导出字段的意义:只有声明包才能修改它们。 请注意,如果在另一个包中声明了该类型,则您甚至无法编

  • 我想从我的api发送一个响应,所有响应都有一个统一的结构 我希望数据能够成为不同的结构,而不仅仅是单个数据结构。我可以说我没有正确使用这种模式。完成这种事情的正确方法是什么?有没有办法让结构字段能够成为具有相同键的任何类型?

  • 问题内容: 我正在尝试运行以下代码: 但我得到这个错误: 问题答案: 要初始化嵌入式sql.NullInt64,您必须编写: 或者,如果您的NullInt64结构包含不想显式初始化的其他字段,则可以使用其类型访问嵌入的字段:

  • 问题内容: 是否存在技术原因,为什么编码/ json不包含未导出的字段?如果不是这样,这是一个任意决定,即使未导出,是否还会有其他后门选项(例如“ +”)包括在内? 要求导出客户端代码来获得此功能感到很不幸,尤其是在小写形式提供封装或封送结构的决定比其设计晚得多的情况下。 人们如何处理这个问题?只是出口一切? 另外,不导出字段名称会使遵循建议的惯用法变得困难。我认为,如果结构X具有字段Y,则不能具

  • 问题内容: 我有一个在呼包 并在即时通讯中尝试将此帐户结构嵌入到另一个结构中 用户包已正确导入,然后尝试嵌入,我已成功使用它 最终,我正在获取用户帐户并制作功能图并从中返回,这是我的功能 但是此代码不会在这里编译是错误消息 一切似乎都非常简单明了,我无法弄清楚为什么会出现此错误,并且我需要达到Account结构的所有成员都已导出 我需要此字段的原因是我想通过api发送访问令牌给客户端,而不是秘密,

  • 问题内容: 我对结构字段有疑问。 我已经创建了一个类与一种方法即增加或减少对象变量通过。另一种方法用于输出结果。 在一个新的实例与默认创建和,然后我打电话和。我希望在期间更改的值并产生,但它显示的是: 我的代码有什么问题? 问题答案: 您需要在此处使用指针,否则每次都仅更改原始对象的副本。一切都通过价值传递。