我有以下通用接口type Worker[input any, output any] interface { Process(input) output}我正在嘗試使用以下方法實(shí)現(xiàn)接口type IntWorker[i int, o int] struct{}func (w *IntWorker[i, o]) Process(input i) o { fmt.Println("running i") return 1}當(dāng)我嘗試使用它時(shí),出現(xiàn)以下錯(cuò)誤mgr := internal.NewWorkManager()iwkr := &IntWorker[int, int]{}mgr.RegisterWorker(iwkr)cannot use iwkr (variable of type *IntWorker[int, int]) as internal.Worker[any, any] value in argument to : *IntWorker[int, int] does not implement internal.Worker[any, any] (wrong type for method Process) have Process(input int) int want Process(any) any注意最后一段,它說 want anybut have int。我不確定如何解決這個(gè)問題,因?yàn)槲业挠∠笫悄憧梢詫⑷魏螙|西傳遞給any變量被傳遞給這個(gè)函數(shù):func (m *WorkManager) RegisterWorker(f Worker[any, any]) uuid.UUID
1 回答

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
任何應(yīng)該采用Worker
接口的通用變體的函數(shù)本身必須是通用函數(shù)。
func TakesAnyWorker[input any, output any](w Worker[input, output]) { ... }
該類型Worker[any, any]
不是通用類型,并且僅與實(shí)現(xiàn)的值兼容,Process(any) any
因?yàn)檫@是您的接口定義所指示的。
在您的示例中,該函數(shù)是一種方法,在 Go 1.19 中不能采用類型參數(shù)。如果 singleWorkManager
總是采用Worker
相同類型的 s ,那么您可以WorkManager
像這樣使 the 成為一個(gè)一致的泛型類型:
type WorkManager[input any, output any] struct { ... } func (m *WorkManager[input, output]) RegisterWorker(f Worker[input, output]) uuid.UUID
如果您的單身人士WorkManager
需要采用Worker
不同類型的 s,那么恐怕您遇到的問題比泛型可以解決的問題更大,您將被迫使用常規(guī)接口和reflect
.
- 1 回答
- 0 關(guān)注
- 95 瀏覽
添加回答
舉報(bào)
0/150
提交
取消