我使用了 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)
...
- 1 回答
- 0 关注
- 95 浏览
添加回答
举报
0/150
提交
取消