可以将上述代码进行抽象封装,将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从全局变量改为函数的方式,实现了对数据分发的控制

请使用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

原文地址: http://www.cveoy.top/t/topic/h9HF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录