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

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

是否可以使用較大結(jié)構(gòu)項(xiàng)目的子集作為函數(shù)的參數(shù)(映射到較小的結(jié)構(gòu))?

是否可以使用較大結(jié)構(gòu)項(xiàng)目的子集作為函數(shù)的參數(shù)(映射到較小的結(jié)構(gòu))?

Go
UYOU 2022-05-23 17:25:27
說(shuō)我有以下結(jié)構(gòu)package foobartype Foo struct{}type Bar struct{}func (*Bar) Read(p []byte) (n int, err error) {     return 0, nil }在我的應(yīng)用程序的某個(gè)地方,我打算像這樣使用這些結(jié)構(gòu)之一package consumertype DoOptions struct {    bar io.Reader}func Do(opts *DoOptions) {    fmt.Println(opts)}我的目標(biāo)是擁有一個(gè)通用的依賴(lài)容器,并讓客戶(hù)規(guī)定他們希望從中獲取哪些依賴(lài)。package maintype dependencyContainer struct {    foo *Foo    bar *Bar}func main() {    s := &dependencyContainer{        foo: &foobar.Foo{},        bar: &foobar.Bar{},    }    consumer.Do(s)}但當(dāng)然這不起作用:cannot use s (variable of type *dependencyContainer) as *DoOptions value in argument to consumer我有什么辦法可以做到這一點(diǎn)嗎?尋找替代品,它們都很笨拙。接口中只能有方法context.Context意味著大量不必要的強(qiáng)制轉(zhuǎn)換,并且函數(shù)的 API 變得混亂當(dāng)您在依賴(lài)關(guān)系圖中鉆取屬性時(shí),擁有多個(gè)函數(shù)參數(shù)可以通過(guò)導(dǎo)入順序和重復(fù)進(jìn)行高度維護(hù)
查看完整描述

2 回答

?
慕的地10843

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

您想要的看起來(lái)與功能選項(xiàng)模式非常相似。請(qǐng)記住,函數(shù)是 Go 中的一等公民,因此您可以通過(guò)函數(shù)(或struct帶有 " apply" 方法的函子)傳遞數(shù)據(jù)。


例如:


package main


import "fmt"


type do struct{}


type DoOption func(*do)


func Do(opts ...DoOption) {

    do := do{}

    for _, opt := range opts {

        opt(&do)

    } // "apply" the options

    // use the values...

}


type Foo struct{ value string }


type Bar struct{ value string }


func WithFoo(x Foo) func(*do) {

    return func(*do) { fmt.Println(x.value) }

}


func WithBar(x Bar) func(*do) {

    return func(*do) { fmt.Println(x.value) }

}


type dependencyContainer struct {

    foo Foo

    bar Bar

}


func main() {

    s := dependencyContainer{Foo{"foo"}, Bar{"bar"}}

    Do(WithFoo(s.foo), WithBar(s.bar))

}

https://play.golang.org/p/48rCTwn1f9C


此外,許多人認(rèn)為顯式依賴(lài)注入(即通過(guò)構(gòu)造函數(shù)公開(kāi)所有依賴(lài)項(xiàng),而不是將它們隱藏在消費(fèi)者代碼中)會(huì)導(dǎo)致更好的可維護(hù)代碼。


查看完整回答
反對(duì) 回復(fù) 2022-05-23
?
白衣染霜花

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

我有什么辦法可以做到這一點(diǎn)嗎?

不,重新設(shè)計(jì)。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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