methods - 在函数内部定义结构的方法

标签 methods struct go dependency-injection

我有这个代码

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))。

我可以在外部创建结构,但在本地声明结构以减少命名空间困惑似乎更合乎逻辑,尤其是当这些模拟对象只使用一次时。我在这里错过了什么吗?在测试函数之外定义它是不是更好的做法,这样它就不长了?我应该在这里做什么?

最佳答案

惯用的 Go 将使用 package 作为命名空间。

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/

相关文章:

c - 我不明白为什么我不能像这样在末尾添加节点

c - 结构中的枚举; c的新手

azure - 格式化 Azure SDK 的 golang 时间

struct - 如何从函数访问结构的实例字段?

go - 如何通过 HTTPS 提供静态文件

c# - 命名复杂的方法

c++ - ACE C++ - 如何实现函数调用超时?

Java 在对象上同步

java - 删除重复的 try/catch 代码

c - C 中的递归 - 冒泡排序?