为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
互换的青春 2022-10-24 15:49:31
如何将相同的逻辑应用于不同的结构?例如,更新结构的字段。我想UpdateName为结构 A 和 B 共享相同的逻辑A 和 B 来自不同的包。// model/A.gotype A struct {   name  string   total int64   date  time.Time}// model/B.gotype B struct {   name  string   price float64   total int64   date  time.Time}希望将重复的逻辑合二为一。// service/a.gofunc UpdateName(data *A) {   data.Name = "NEW"}// service/b.gofunc UpdateName(data *B) {   data.Name = "NEW"}我想使用一个接口进行解耦。此外,如何将接口解析为参数。type DataSetter() interface {    SetName(name string)    SetTotal(total int64)}感谢您帮助我解决这个基本问题。
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

对于像您展示的简单值分配,最好简单地公开该字段:


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.


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信