第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用子包構(gòu)建 go 接口

使用子包構(gòu)建 go 接口

Go
皈依舞 2022-12-05 16:48:56
我正在開發(fā)我的第一個(gè)真正的 go 應(yīng)用程序,并試圖將我的手放在應(yīng)該結(jié)構(gòu)化的代碼文件上。我的代碼的主要部分將是一些類型,它們都實(shí)現(xiàn)了一個(gè)公共接口。type Runner interface {   Run() string}他們將被打包。由于接口實(shí)現(xiàn)的數(shù)量將非常大,我想將它們(語義上)拆分為幾個(gè)子包。runner/   blue/   red/該Runner實(shí)現(xiàn)需要訪問在我的應(yīng)用程序中別處定義的幾個(gè)其他接口(例如,Cache和Secret)。這些目前在單獨(dú)的包中定義和實(shí)現(xiàn)。我的計(jì)劃是使用一個(gè)Config結(jié)構(gòu),它包含所有這些實(shí)用程序接口并將其傳遞給Runner實(shí)現(xiàn)。我不確定如何最好地處理這些子包以及在哪里放置Config和接口聲明。我的直覺方法是在包中同時(shí)定義Config結(jié)構(gòu)和Runner接口,runner并且只從那里返回一個(gè)[]Runner集合,但這違反了這個(gè)建議。此外,所需的導(dǎo)入數(shù)量和遇到被禁止的循環(huán)引用的危險(xiǎn)讓我覺得,我的解決方案違背了最佳實(shí)踐。有什么建議可以改進(jìn)我的代碼結(jié)構(gòu)嗎?添加一個(gè)common包含我所有接口定義和Config結(jié)構(gòu)的包是否可???
查看完整描述

1 回答

?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊


我最終創(chuàng)建了一個(gè)domain包含接口和定義的包Config。


所以domain/domain.go我有


package domain



type Config struct {

    Cache

}


type Runner interface {

  Run() string

}


type Cache interface {

  // ...

}

如上所述,跑步者在子包中構(gòu)建。我不導(dǎo)出類型,而是在每個(gè)包中都有一個(gè)函數(shù)收集所有類型并將它們作為接口返回。


runner/blue/blue.go:


package blue


import "my/domain"


func All(config domain.Config) (list []domain.Runner) {

    list = append(list, fooRunner{Config: config})

    list = append(list, barRunner{Config: config})

    return

}

runner/runner.go:


package runner


import ( 

  "my/runner/blue"

  "my/runner/red"

  "my/runner/domain"

)


func All(config domain.Config) (list []domain.Runner) {

    list = append(list, blue.All(config)...)

    list = append(list, red.All(config)...)

    return

}


查看完整回答
反對(duì) 回復(fù) 2022-12-05
  • 1 回答
  • 0 關(guān)注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)