gpt4 book ai didi

golang 公共(public)方法到私有(private)结构 - 这有任何用例吗

转载 作者:IT王子 更新时间:2023-10-29 01:16:30 32 4
gpt4 key购买 nike

我是新来的。我注意到在一些库中有私有(private)结构的公共(public)方法。参见示例 https://github.com/btcsuite/btcd/blob/master/txscript/stack.go

这有实际用例吗?如果我也无法访问它们所属的结构,我无法想象我将如何使用公共(public)方法。

如以下问题 - 有什么方法可以克服结构的私有(private)声明吗?例如,我想在我的包中使用指向文件中的结构堆栈。

最佳答案

因此,主要用例是您可以从包函数返回未导出的类型。任何导出的方法都可以用于此类型,即使其他包实际上不能首先创建该类型(除了从您的包接收它作为返回值)。

package foobar

type foo struct {}
func (f foo) Bar() {}
func Newfoo() foo {
return foo{}
}
----
package main
func main() {
f := foobar.Newfoo()
f.Bar()

foobar.NewFoo().Bar()
}

另一个主要用例是包级接口(interface)。我倾向于使用一个相当标准的模式,其中一个包定义一个导出的接口(interface),如下所示:

type Doer interface {
Do()
}

然后定义一些实现该接口(interface)的私有(private)类型:

type stringDoer struct {}

func (s *stringDoer) Do() {}

func NewStringDoer() Doer {
return &stringDoer{}
}

这样,外部包就可以使用我的类型作为接口(interface),而不必弄乱具体类型,并且由于我的包公开的数据类型完全是接口(interface),所以它会对我的包进行模拟或 stub 调用(例如,用于测试)难以置信的简单。

要使这种类型的系统正常工作,必须导出结构上的方法(在本例中为 stringDoer),即使结构本身不是。

关于golang 公共(public)方法到私有(private)结构 - 这有任何用例吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952354/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com