【问题标题】:Is there a way to create a function using unexported type as parameter in Golang?有没有办法在 Golang 中使用未导出的类型作为参数来创建函数?
【发布时间】: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


【解决方案1】:

你可以使用接口:

type FullNameSupport interface {
  PrintFullName()
}

func doBadThingToGoodPeople(goodPerson FullNameSupport) {
   goodPerson.PrintFullName()
}

这样就不用导出类型了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2018-06-18
    • 1970-01-01
    • 2019-06-03
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多