【问题标题】:How do you return a non primitive type variable in golang你如何在golang中返回一个非原始类型变量
【发布时间】:2018-10-29 15:26:32
【问题描述】:

如何在golang中返回一个非原始类型变量

【问题讨论】:

  • 你想把一些代码放到一个函数中。好的。去做就对了。哪里有问题?你是不是想多了?不要以“DRY”(或任何其他无意义的首字母缩写词)为借口做“通用”的事情。
  • 这不是问题所在。正如我所说,我只想知道“如何返回这个”这就是我如何从另一个包库(例如 bigquery.NewClient())返回非原始类型。为了做到这一点,我需要指定什么作为函数的返回类型。如果您误会了,请见谅。
  • “原始类型”和其他类型之间没有no 区别。我建议参加 Tour of Go。
  • 再说一次,不是我要的,但谢谢

标签: go interface dry


【解决方案1】:

看起来bigquery.NewClient 返回一个(*Client, error),所以如果你想封装它,你可能只需要编写一个返回*bigquery.Client的函数

【讨论】:

  • 哦,所以你必须包含一个指向包名和它引用的结构的指针。这完美地回答了它。谢谢亚当,这就是我要找的东西
  • @fjson01 不,您必须提供要返回的类型。在这种情况下,由于您指的是bigquery.NewClient,因此很明显Client 在您的上下文中被命名为bigquery.Client。由于NewClient 返回指向Client 的指针,因此您也必须返回一个指针(或在包装函数中解析该指针,但这似乎很糟糕。
  • 不管怎样,我同意沃尔克的观点,即你应该参加围棋巡回赛。您似乎误解了该语言的一些基本方面。
【解决方案2】:

理想情况下,您希望将辅助 go 文件实例化为 OOPS 术语中的单例。

package somehelper

type SomeData struct {
    SubData1 SubDataType1
    SubData2 SubDataType2
}

var singleton *SomeData
var once sync.Once

func Createsingleton(data1 SubDataType1, data2 SubDataType2) {
    once.Do(func() {
        singleton = &SomeData{SubData1:data1, SubData2: data2}
    })
}

func GetSingleton() *SomeData {
    if singleton == nil {
        panic("SomeDataHelper needs to be instantiated!!!")
    }
    return singleton
}


func (i *SomeData) GetSubData1() SubData1{
    return i.SubData1
}

【讨论】:

    猜你喜欢
    • 2019-05-08
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2018-02-20
    • 2021-09-02
    相关资源
    最近更新 更多