Go 传入调用另一个func的函数
您好,我有两个类似的函数,我想创建一个通用函数。我的问题是:我不确定如何通过另一个func:Go 传入调用另一个func的函数,go,Go,您好,我有两个类似的函数,我想创建一个通用函数。我的问题是:我不确定如何通过另一个func: func (b *Business) StreamHandler1(sm streams.Stream, p []*types.People) { guard := make(chan struct{}, b.maxManifestGoRoutines) for _, person := range p { guard <- struct{}{} // would
func (b *Business) StreamHandler1(sm streams.Stream, p []*types.People) {
guard := make(chan struct{}, b.maxManifestGoRoutines)
for _, person := range p {
guard <- struct{}{} // would block if guard channel is already filled
go func(n *types.People) {
b.PeopleHandler(sm, n)
<-guard
}(person)
}
}
func (b *Business) StreamHandler2(sm streams.Stream, pi []*types.PeopleInfo) {
guard := make(chan struct{}, b.maxManifestGoRoutines)
for _, personInfo := range pi {
guard <- struct{}{} // would block if guard channel is already filled
go func(n *types.PeopleInfo) {
b.PeopleInfoHandler(sm, n)
<-guard
}(personInfo)
}
}
但这似乎不起作用。关于如何使其通用化,您有什么想法吗?您可以为所传递的类型创建抽象,并定义特定的接口类型 我使用Peopler接口获取People或PeopleInfo,基于我定义并传递给新StreamHandler的处理程序。如果需要*业务的任何字段/方法,也可以在处理程序中传递*业务 但正如塞尔吉奥所说,如果这个方法只有5行长,即使基本上是一样的,也可能不值得 对于具有guard结构的模式,可以使用更适合的sync.WaitGroup 包干管 进口 fmt 时间 func b*业务流程HandlerSM streamsStream,p[]人员,处理程序funcstreamsStream,人员{ guard:=makechan结构{},b.maxManifestGoRoutines 对于u,人员:=范围p{
guard如果可能,您可以使用依赖项反转来利用接口。类型和函数之间的关联几乎就是方法的定义。因此,使用接口来指定方法定义,并将业务传递给该方法 该接口将是必要的,以防止导入循环,同时使代码更为宽松 通常使用依赖项反转,处理程序将显式地在与业务相同的包中实现接口,但这在Go中都是隐式的 例如: 类型处理程序接口{ 处理业务,流,流 } func b*业务StreamHandler1sm streams.Stream,hs[]处理程序{ guard:=makechan结构{},b.maxManifestGoRoutines 对于u,h:=范围hs{
guard Go没有泛型。接口{}也不是穷人的替代品。因此,只有两个函数更好吗?有没有办法使其泛型?或者不建议使用@SergioTulentsev?
func (b *Business) StreamHandler1(f func(streams.Stream, interface{}), sm streams.Stream, p []*interface{}) {