【发布时间】:2021-07-13 02:03:49
【问题描述】:
在我的应用程序中,我有一个结构,我为它定义了一个 New 函数来创建实例,因为字段的零值没有意义。另外,我没有导出结构。所以创建的唯一方法是通过New。
var goodPerson = person.New("James", "Tran")
goodPerson.PrintFullName()
在调用方方面,我不知道如何创建一个将未导出类型作为参数接收的函数,以便我仍然可以访问此类型的导出方法。
func doBadThingToGoodPeople(goodPerson <???>) {
goodPerson.PrintFullName()
}
如果您能给我指明一个方向,我将不胜感激。
【问题讨论】:
-
您不能在另一个包中命名未导出的类型。您必须重构 something -- 导出名称、将函数移动到同一个包、使用接口等。
-
只要将类型导出即可。如果有一个“新”函数来生成它,任何对 Go API (如标准库)有一些基本了解的人都可能知道你不应该使用未初始化的值,因为这是一个常见的约定。如果您不希望创建直接结构类型的变量/字段(这将是未初始化的),也可以让
New返回一个指针类型。
标签: go