登录
首页 >  Golang >  Go问答

正确确定变量范围的方式是什么?

来源:stackoverflow

时间:2024-03-02 12:24:23 164浏览 收藏

大家好,今天本人给大家带来文章《正确确定变量范围的方式是什么?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我的代码位于不断扩展的 switch 语句中。不过我想让它成为一个循环。知道如何将其更改为循环吗,因为这通常是相同的代码?

switch key {
    case types.create_new_buckets_interval_key:
        b.ongoingcreatenewbucketsinterval.correlationid = correlationid //notice how this is repeating
        b.ongoingcreatenewbucketsinterval.task = m[types.task]
        b.ongoingcreatenewbucketsinterval.executetime = executetime

    case types.bucket_sweep_key:
        b.ongoingbucketsweep.correlationid = correlationid
        b.ongoingbucketsweep.task = m[types.task]
        b.ongoingbucketsweep.executetime = executetime

    case types.send_status_on_finished_key:
        b.ongoingsendstatusonfished.correlationid = correlationid
        b.ongoingsendstatusonfished.task = m[types.task]
        b.ongoingsendstatusonfished.executetime = executetime

}

有没有办法只循环变量?

这些都是 scheduledtask 类型,如下所示:

type ScheduleTask struct {
    Task             string `json:"task"`
    ExecuteTime      int64  `json:"execute_time"`
    CorrelationID    int64  `json:"correlation_id"`
}

解决方案


使用函数来捆绑重复的逻辑:

set := func(t *scheduletask) {
    t.correlationid = correlationid
    t.task = m[types.task]
    t.executetime = executetime

}

switch key {
case types.create_new_buckets_interval_key:
    set(&b.ongoingcreatenewbucketsinterval)
case types.bucket_sweep_key:
    set(&b.ongoingbucketsweep)
case types.send_status_on_finished_key:
    set(&b.ongoingsendstatusonfished)
}

另一个选项是使用该指针获取指向计划任务和字段的指针:

var t *ScheduleTask
switch key {
case types.CREATE_NEW_BUCKETS_INTERVAL_KEY:
    t = &b.OngoingCreateNewBucketsInterval
case types.BUCKET_SWEEP_KEY:
    t = &b.OngoingBucketSweep
case types.SEND_STATUS_ON_FINISHED_KEY:
    t = &b.OngoingSendStatusOnFished
}

t.CorrelationID = correlationID
t.Task = m[types.TASK]
t.ExecuteTime = executeTime

好了,本文到此结束,带大家了解了《正确确定变量范围的方式是什么?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>