避免使用来自不同结构类型的相同值的重复函数

我有一个方法,应该得到不同的类型,建议如何解决这个问题,而不是重复的函数,基本上做同样的事情...(我想避免创建包装结构....)


type A1 struct {

    Spec              A1Spec    `json:"spec,omitempty"`

    Status            A1Status `json:"status,omitempty"`

    metav1.TypeMeta   `json:",inline"`

    metav1.ObjectMeta `json:"metadata,omitempty"`

}


type B1 struct {

    Spec               B1Spec   `json:"spec,omitempty"`

    Status            B1Status `json:"status,omitempty"`

    metav1.TypeMeta   `json:",inline"`

    metav1.ObjectMeta `json:"metadata,omitempty"`

}


func ExecuteA1(ctx context.Context, a1 A1, Client client.Client) error {


if a1.Spec.Type == "test" {….



}}



func ExecuteB1(ctx context.Context, b1 B1, Client client.Client) error {


if  b1.Spec.Type == "test" {….


}

….}

两个函数都做着一样,但类型不同,我想避免创建两个函数,它建议如何解决这个问题?


https://play.golang.org/p/kV7s3LRd-eh


猛跑小猪
浏览 82回答 1
1回答

慕容708150

通过使用接口。两者兼而有之,并实现一个接口,该接口具有获取(返回)类型的方法。那么你只需要一个需要这个接口类型值的函数,就可以调用接口定义的方法。然后,您可以传递 值 或 ,或者实现该接口的任何其他类型。A1B1Execute()A1B1例如:type HasType interface {    GetType() string}func (a A1) GetType() string {    return a.Spec.Type }func (b B1) GetType() string {    return b.Spec.Type}func Execute(ctx context.Context, foo HasType, Client client.Client) error {    if foo.GetType() == "test" {    }}你可以这样称呼它:var a A1 = ...var b B1 = ...Execute(ctx, a, client)Execute(ctx, b, client)请参阅为什么 Golang 中需要接口?另请注意,在此特定示例中,您可以只传递类型而不是 and ,因此可以省略接口和方法声明。A1B1例如,你可以这样创建:Execute()func Execute(ctx context.Context, typ string, Client client.Client) error {    if typ == "test" {    }}并这样称呼它:var a A1 = ...var b B1 = ...Execute(ctx, a.Spec.Type, client)Execute(ctx, b.Spec.Type, client)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go