要将接口指针传递给线程,您可以使用以下步骤:
以下是一个简单的示例,演示了如何将接口指针传递给线程:
package main
import (
"fmt"
"sync"
)
// MyInterface 是一个接口,定义了线程所需的方法
type MyInterface interface {
DoSomething()
}
// MyImplementation 是 MyInterface 的实现
type MyImplementation struct{}
// DoSomething 是 MyImplementation 的方法
func (m *MyImplementation) DoSomething() {
fmt.Println("Doing something...")
}
// MyThread 是一个线程,它接受一个 MyInterface 类型的指针
type MyThread struct {
wg *sync.WaitGroup
myInterface MyInterface
}
// NewMyThread 创建一个新的 MyThread 实例
func NewMyThread(wg *sync.WaitGroup, myInterface MyInterface) *MyThread {
return &MyThread{
wg: wg,
myInterface: myInterface,
}
}
// Start 启动线程
func (t *MyThread) Start() {
t.wg.Add(1)
go func() {
defer t.wg.Done()
t.myInterface.DoSomething()
}()
}
func main() {
// 创建一个 WaitGroup,以便等待所有线程完成
var wg sync.WaitGroup
// 创建一个 MyImplementation 实例
myImpl := &MyImplementation{}
// 创建一个 MyThread 实例,并传递 MyImplementation 实例的指针
myThread := NewMyThread(&wg, myImpl)
// 启动线程
myThread.Start()
// 等待所有线程完成
wg.Wait()
}
在这个示例中,我们定义了一个名为 MyInterface
的接口,并创建了一个名为 MyImplementation
的类来实现它。我们还创建了一个名为 MyThread
的线程类,它接受一个 MyInterface
类型的指针。在 main
函数中,我们创建了一个 MyImplementation
实例,并将其指针传递给 MyThread
实例。然后我们启动线程,并等待所有线程完成。在线程内部,我们使用接口指针调用 MyImplementation
的 DoSomething
方法。
领取专属 10元无门槛券
手把手带您无忧上云