我有这个代码

func baz() {
    type mockDatabase struct{}

    //
    //  More code
    //
}

我想定义一个mockDatabase的方法,因此完整的代码如下所示:
func baz() {
    type mockDatabase struct{}

    func (m *mockDatabase) Foo() {
        // Implement function here
    }

    //
    //  More code
    //
}

我要执行此操作的原因是我将一个依赖项注入(inject)到函数中,并且我想创建一个“模拟对象”以注入(inject)到函数中(该函数将接口(interface)作为参数,而模拟对象将实现该接口(interface))。

我可以在外部创建该结构,但是在本地声明该结构以减少 namespace 的困惑似乎更合乎逻辑,尤其是当这些模拟对象仅使用一次时。我在这里想念什么吗?在测试函数之外定义它是更好的做法,所以它不会很长?我在这里该怎么办?

最佳答案

惯用的Go语言是使用软件包进行命名间隔。

package mock

type MockDatabase struct {}

func (m *mockDatabase) Foo() {}

在主代码中,您可以从包中调用
package main

import (
        "path/to/mock"
)

var m = New(mock.MockDatabase)

func baz() {
        m.Foo()
}

关于methods - 定义函数内部结构的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32030169/

10-11 18:03