猿问

Golang:如何对不同的结构使用相同的方法

如何将相同的逻辑应用于不同的结构?


例如,更新结构的字段。我想UpdateName为结构 A 和 B 共享相同的逻辑


A 和 B 来自不同的包。


// model/A.go

type A struct {

   name  string

   total int64

   date  time.Time

}

// model/B.go

type B struct {

   name  string

   price float64

   total int64

   date  time.Time

}

希望将重复的逻辑合二为一。


// service/a.go

func UpdateName(data *A) {

   data.Name = "NEW"

}


// service/b.go

func UpdateName(data *B) {

   data.Name = "NEW"

}

我想使用一个接口进行解耦。

此外,如何将接口解析为参数。


type DataSetter() interface {

    SetName(name string)

    SetTotal(total int64)

}

感谢您帮助我解决这个基本问题。


互换的青春
浏览 95回答 1
1回答

ibeautiful

对于像您展示的简单值分配,最好简单地公开该字段:type A struct {   Name string   ...}...func f(a *A) {   a.Name="x"}您可能会考虑嵌入一个通用结构:type Common struct {   Name string}func (c *Common) SetName(s string) {   c.Name=s}type A struct {   Common   ...}type B struct {   Common   ...}func f(a *A) {   a.SetName("x")}您可以使用表示通用类型功能的接口:type WithName interface {   SetName(string)}func f(x WithName) {   x.SetName("x")}func g(a *A) {   f(a)}func h(b *B) {   f(b)}但是您不会只想为SetName.
随时随地看视频慕课网APP

相关分类

Go
我要回答