有没有办法在Go中为结构创建方法钩子?

有没有办法在Go中为结构创建方法钩子?,go,Go,我想为我的Go结构创建save之前和save之后的方法钩子,如何实现这一点 type Person struct { FirstName string LastName string } func (p *Person) Save() { // call beforeSave() // Save person data // call afterSave() } func

我想为我的Go结构创建save之前和save之后的方法钩子,如何实现这一点

    type Person struct {
        FirstName string
        LastName string
    }

    func (p *Person) Save() {
        // call beforeSave()
        // Save person data
        // call afterSave()
    }

    func (p *Person) Update() {
        // call beforeUpdate()
        // Update person data
        // call afterUpdate()
    }

    type Order struct {
        Number bson.ObjectId
        Items []Item
    }

    func (o *Order) Save() {
        // call beforeSave()
        // Save order data
        // call afterSave()
    }

    func (o *Order) Update() {
        // call beforeUpdate()
        // Update order data
        // call afterUpdate()
    }
对于我创建为模型的任何结构,我希望它自动调用beforeSave()和afterSave()钩子,并能够在必要时进一步重写。

像这样的包大量使用回调钩子。但是,如果您正在编写自己的引擎(用于某些特定逻辑),那么使用接口将非常有帮助()

我只想在上面的那篇文章中补充一点,我认为这很好地回答了您的问题,即您可以进一步使用管道(返回绑定到的相关变量的方法)。在上面的文章中,它特别有趣,因为它涉及到能够在两个进程之间插入任何东西,您可以使用它来创建TEE和日志记录/日志系统,它可以在很大程度上补偿go中的原始错误处理


我设计了许多相关的字节片处理库,这些库可以轻松链接,而无需断开一行,尽管很明显,一行中超过3-4行可能会让人困惑,你可能会发现自己想要以DAG样式的模式传递内容,在这一点上,我认为频道是有意义的。

一个描述性的示例将帮助其他人更好地理解您的问题。结构本身是否在其他地方使用?或者结构的接口是唯一重要的东西?您可以在上提供一个工作示例。我已经用一个示例更新了问题,说明了我正在尝试做什么。您已经在问题中编写了代码,注释掉了。问题是什么?问题是我需要某种方法来自动调用这些函数,而不必在每个结构中写入beforeSave()和afterSave()。