有没有办法在 Golang 中使用未导出的类型作为参数来创建函数?

Mr.*_*mes 0 go

在我的应用程序中,我有一个结构体,我为其定义了一个New函数来创建实例,因为字段的零值没有意义。另外,我没有导出结构。所以创建的唯一方法是通过New.

var goodPerson = person.New("James", "Tran")

goodPerson.PrintFullName()
Run Code Online (Sandbox Code Playgroud)

在调用方,我不知道如何创建一个将未导出类型作为参数的函数,以便我仍然可以访问这种类型的导出方法。

func doBadThingToGoodPeople(goodPerson <???>) {
   goodPerson.PrintFullName()
}
Run Code Online (Sandbox Code Playgroud)

如果你能指出我的方向,我将不胜感激。

Bur*_*dar 7

您可以使用一个接口:

type FullNameSupport interface {
  PrintFullName()
}

func doBadThingToGoodPeople(goodPerson FullNameSupport) {
   goodPerson.PrintFullName()
}
Run Code Online (Sandbox Code Playgroud)

这样就不必导出类型。