go - 为不同的go结构创建构造函数

标签 go

我有一个结构,我在以下过程中启动它,它按预期工作。

这是特定的运行者

type TestRunner struct {
    path string
    name string
}

func NewRunner(p string, n string) *TestRunner {
    return &TestRunner{
        path: p,
        name: n,
    }
}

现在我想在同一个包中创建另一个运行者,所以我这样做,例如

也是特定的运行者

type TestRunner2 struct {
    path string
    name string
}

func NewRunner(p string, n string) *TestRunner2 {
    return &TestRunner2{
        path: p,
        name: n,
    }
}

现在我收到错误消息,提示 func NewRunner 存在

我有另一个包含接口(interface)的文件(在同一个包中)

这是通用实现(同一包中的不同文件)

type Runner interface {
    Run(path string) error         
    ChangePath(newPath string) 
}

所以也许 NewRunner 应该在那里,建议把新对象放在哪里?

显然,我可以在文件中创建 NewRunner1NewRunner2 方法,但我不确定是否推荐这样做

最佳答案

首先,您应该根据运行者的功能而不是数字来命名运行者。 FastRunnerSlowRunnerLocalRunnerRemoteRunner。你明白了。然后你应该为每个人创建一个结构:

func NewFastRunner( ... ) *FastRunner {
    return &FastRunner{ ... }
}

func NewSlowRunner( ... ) *SlowRunner {
    return &SlowRunner{ ... }
}

这是标准做法,可以生成非常可读、明确的代码。

关于go - 为不同的go结构创建构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48806363/

相关文章:

go - 测试函数以获得 100% 的覆盖率

go - 无法将功能添加到接口(interface)

go - 将原始 []byte 视频传输到 ffmpeg - Go

json - 如何在Go中解析字段名称为值的JSON?

winapi - Golang : using Windows 10 API/UWP/System. Windows 运行时?

Golang 工厂方法

concurrency - 使用并发的 Golang 流水线

go - 在 go 中使用静态类型构造函数有什么明显的缺点吗?

go - 如何保证结构字段的存在,就像接口(interface)对方法所做的那样?

javascript - 如何使用 Google Cloud Storage JSON API 获取可恢复上传的上传进度信息?