为了账号安全,请及时绑定邮箱和手机立即绑定

这个接口和私有数据类型模式的概念是什么

这个接口和私有数据类型模式的概念是什么

Go
慕桂英3389331 2023-08-07 11:15:11
我使用了 github.com/hooklift/gowsdl/soap ,并使用此模式生成了代码package funkyimport (    "fmt")type Place struct {    Text string}type RandomFunky interface {    Buggy(b int)(int)}type randomFunky struct {    place *Place}func NewFunky(p *Place) RandomFunky {    return &randomFunky{        place: p,    }    return nil  }func (rf * randomFunky) Buggy(b int)(int) {    fmt.Println(rf.place.Text)    return b}package mainimport (    "fmt"    "funky")func main() {    p := funky.Place{}    p.Text = "o jee"    f := funky.NewFunky(&p)    fmt.Printf("%T\n",f) // type of "*funky.randomFunky"    // var f *funky.randomFunky !!!  cannot refer to unexported name funky.randomFunky    f.Buggy(1)  }“f” - 我可以通过这种方式获得这种类型,但我无法创建这种类型的变量!如果我想将 *funky.randomFunky var 存储在 struct 中怎么办?或者将其传递给函数?这是否意味着每次我想调用 Buggy 方法时都必须重新创建 NewFunky ?(假设 Buggy 在多个地方调用和/或接口有更多方法)或者我应该修改代码并公开 *funky.randomFunky 吗?要不然?
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

所以这个想法是,任何以小写字母开头的变量/函数/类型/方法都是局部的,而以大写字母开头的是全局的。本地的东西只能在同一个包内直接使用。


因此,在您的情况下,RandomFunky是一个具有单个方法的全局接口Buggy,而 arandomFunky是一个本地结构,实现,因为它具有具有相同参数的RandomFunky方法。Buggy


事实上,NewFunky返回一个封装在接口中的结构。所以不能randomFunky在包外使用funky,但是可以使用funky.RandomFunky。


在你的情况下,你可以创建一个这种类型的变量


...

var f funky.RandomFunky

f = funky.NewFunky(&p)

...


查看完整回答
反对 回复 2023-08-07
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信