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
}
这让我们可以使用导出的候选接口声明函数参数类型。我从这个解决方案中看到的唯一缺点是,我们所有的方法都需要在接口定义中声明,但是你可以认为这是一个好的实践。
>
强制一个方法获取结构(构造函数方式)。
从这个帖子:
一个好的设计是使您的类型不导出,但提供一个导出的构造函数,如NewMyType()
,您可以在其中正确初始化您的结构/类型。还返回一个接口类型而不是具体类型,接口应该包含其他人想对您的值做的所有事情。当然,您的具体类型必须实现该接口。
这可以通过简单地使类型本身不导出来完成。您可以导出函数NewSomething,甚至是字段Text和DefaultText,但不要导出结构类型。
另一种为您自己的模块自定义它的方法是使用Config结构设置默认值(链接中的选项5)。虽然不是一个好方法。
一种可能的想法是编写单独的构造函数
//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