当前位置: 首页 > 知识库问答 >
问题:

如何在Go结构中设置默认值

蔡晨
2023-03-14

以下问题有多种答案/技巧:

  1. 如何为golang结构设置默认值?
  2. 如何在 golang 中初始化结构

我有几个答案,但需要进一步讨论。

共有3个答案

漆雕稳
2023-03-14

Victor Zamanian回答的选项1的一个问题是,如果类型没有被导出,那么您的包的用户不能将其声明为函数参数等的类型。解决这个问题的一种方法是导出一个接口而不是结构

package candidate
// Exporting interface instead of struct
type Candidate interface {}
// Struct is not exported
type candidate struct {
    Name string
    Votes uint32 // Defaults to 0
}
// We are forced to call the constructor to get an instance of candidate
func New(name string) Candidate {
    return candidate{name, 0}  // enforce the default value here
}

这让我们可以使用导出的候选接口声明函数参数类型。我从这个解决方案中看到的唯一缺点是,我们所有的方法都需要在接口定义中声明,但是你可以认为这是一个好的实践。

爱乐邦
2023-03-14

>

  • 强制一个方法获取结构(构造函数方式)。

    从这个帖子:

    一个好的设计是使您的类型不导出,但提供一个导出的构造函数,如NewMyType(),您可以在其中正确初始化您的结构/类型。还返回一个接口类型而不是具体类型,接口应该包含其他人想对您的值做的所有事情。当然,您的具体类型必须实现该接口。

    这可以通过简单地使类型本身不导出来完成。您可以导出函数NewSomething,甚至是字段Text和DefaultText,但不要导出结构类型。

    另一种为您自己的模块自定义它的方法是使用Config结构设置默认值(链接中的选项5)。虽然不是一个好方法。

  • 宋望
    2023-03-14

    一种可能的想法是编写单独的构造函数

    //Something is the structure we work with
    type Something struct {
         Text string 
         DefaultText string 
    } 
    // NewSomething create new instance of Something
    func NewSomething(text string) Something {
       something := Something{}
       something.Text = text
       something.DefaultText = "default text"
       return something
    }
    
     类似资料:
    • 问题内容: 以下问题有多种答案/技术: 如何为golang结构设置默认值? 如何在Golang中初始化结构 我有几个答案,但需要进一步讨论。 问题答案: 强制方法获取结构(构造方法)。 一个好的设计是使您的类型不导出,但提供一个类似NewMyType()的导出构造函数,您可以在其中正确初始化struct / type。还返回接口类型而不是具体类型,并且该接口应包含其他人希望对您的值进行的操作。当然

    • 问题内容: 我发现在hibernate配置文件中,我们可以设置参数: 现在,我正在使用JPA,我也想这样做。否则,我必须将参数添加到每个@Table注释中,例如: 据我了解,此参数应该在配置的这一部分中: …但是我在Google中找不到它的名字。有任何想法吗? 问题答案: 也不知道为此的JPA属性。但是,您可以仅将Hibernate属性(假设您使用Hibernate作为提供程序)添加为 hiber

    • 问题内容: 我在使用react-select时遇到问题。我使用redux表单,并且使我的react-select组件与redux表单兼容。这是代码: 这里是我如何渲染它: 但是问题是我的下拉菜单没有我希望的默认值。我做错了什么?有任何想法吗? 问题答案: 我猜你需要这样的东西:

    • 问题内容: 我可以在angularjs中使用默认值设置一个下拉列表, 如何使用来达到相同的效果?我胆战心惊, 但是没用。样品小提琴在这里 问题答案: 使用 为设定的默认值。 这是: 演示

    • 问题内容: 我在同一包中有2个班级。这两个类都具有main方法。现在,我想构建一个jar文件。我想建立2个jar文件,这些文件使用不同的主要功能作为默认主要功能。 例如 如何在NetBeans IDE中进行操作? 我找到了答案。您可以在netbeans中轻松地做到这一点:1)右键单击项目>属性>运行>选择类frm并下拉列表。在netbeans中是如此简单。Netbeans摇摇欲坠! 问题答案: 在

    • 问题内容: 要编译我的golang程序包,使其生成静态链接的可执行文件,我必须说: 另外,我现在意识到在没有gcc的系统上,我必须: 如果您一直在输入此内容,那就不好了。我已经设置了别名,所以可以减少键入,但是是否存在将“ -tags netgo”设置为某种默认值的“ nicer”或“ proper”方式?理想情况下,作为我的软件包本身的一部分,所以一个陌生人尝试与我的软件包一起使用时不会错过-t