首页  >  文章  >  后端开发  >  如何实现具有公共字段的 Go 结构体的共享方法?

如何实现具有公共字段的 Go 结构体的共享方法?

Linda Hamilton
Linda Hamilton原创
2024-11-21 07:47:09638浏览

How to Implement Shared Methods for Go Structs with Common Fields?

如何在 Go 中实现具有公共字段的结构体的共享方法

当处理共享公共字段的多个结构体时,经常需要为这些结构实现一个通用方法。虽然继承或混合看起来像是可行的方法,但它们在 Go 中面临局限性。

一种方法是定义一个指定所需方法的接口,如下所示:

type Savable interface {
  Save()
}

// Satisfy Savable for ModelA
func (m ModelA) Save() {
  // Implement Save() for ModelA
}

var i Savable
i = SomeMethodThatReturnsMyModel()
i.Save()  // Call Save() on the implementing type
SomeOtherMethodThatAcceptsASavableAndCallsSave(i)

或者,嵌入可用于实现代码重用。然而,这需要仔细考虑,因为嵌入字段在调用 o.Insert(this) 时不会被插入,除非它们也在嵌入类型中定义。

type ModelC struct {
  Guid string `orm:"pk"`
}

func (m ModelC) Save() {
  // Implement Save() for ModelC
}

type ModelA struct {
  ModelC
  FiledA string
}

type ModelB struct {
  ModelC
  FiledB string
}

重要的是要记住嵌入并不支持基于继承的方法重写。在嵌入结构中重新定义 Save() 并在重新定义中调用基类的方法在 Go 中并不被认为是一个好的做法。

在考虑两种方法之间时,必须评估具体要求和权衡涉及。接口方法提供了更大的灵活性,而嵌入可以提供性能优势,但需要仔细考虑嵌入字段的行为。

以上是如何实现具有公共字段的 Go 结构体的共享方法?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn