请使用golang beego 优化下面代码以实现抽象封装sig作为一个函数来控制数据分发的功能代码如下:func HandelModelDataframes int32 coefl float32 token string commonInfo string seq int var finish bool = true var sig chan int var ok bool drive
可以将上述代码进行抽象封装,将sig作为一个函数传入,用于控制数据分发的功能。具体代码如下:
func HandleModelData(frames [][]int32, coefl float32, token string, commonInfo string, seq int, sig func() bool) {
var finish bool = true
// ...
Loop:
for i := 0; i < len(frames); i++ {
frame := make([]float32, 61)
for j := 0; j < 51; j++ {
frame[j] = float32(frames[i][j]) / coefl
}
select {
case <-sig():
logs.Info("%s, recv quit sig, quit now", commonInfo)
finish = false
break Loop
default:
data := MakeBSFrame(frame)
var nsent = 0
for nsent < len(data) {
n, err := socket.Write(data[nsent:])
if err != nil {
fmt.Println("send, err =", err)
}
nsent += n
}
time.Sleep(15 * time.Millisecond)
}
}
// ...
}
调用该函数时,可以将原来的sig逻辑替换为一个返回bool类型的函数,该函数用于判断是否收到退出信号。示例代码如下:
func main() {
// ...
sig := make(chan int, 1)
go func() {
for {
select {
case <-sig:
return false // 收到退出信号
default:
time.Sleep(time.Millisecond)
}
}
}()
HandelModelData(frames, coefl, token, commonInfo, seq, func() bool {
select {
case <-sig:
return true // 收到退出信号
default:
return false // 未收到退出信号
}
})
// ...
}
这样,我们通过将sig从全局变量改为函数的方式,实现了对数据分发的控制
原文地址: http://www.cveoy.top/t/topic/h9HF 著作权归作者所有。请勿转载和采集!