亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這個接口和私有數據類型模式的概念是什么

這個接口和私有數據類型模式的概念是什么

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 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號