You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中如何随机选择函数执行?优化现有Switch实现方案

优化Go语言随机执行函数的实现

原switch写法维护成本极高,增删函数时需手动调整随机数范围与case分支编号,改用函数切片的方式可彻底解决该问题:

实现思路

  1. 将所有待随机执行的函数存入同类型切片
  2. 利用切片长度自动生成合法随机索引
  3. 通过索引直接调用选中的函数

完整代码示例

import "math/rand"
import "time"

// 程序启动时初始化随机数种子(仅需执行一次)
func init() {
    rand.Seed(time.Now().UnixNano())
}

// 自定义的目标函数
func function1() { /* 函数逻辑 */ }
func function2() { /* 函数逻辑 */ }
func function3() { /* 函数逻辑 */ }
func function4() { /* 函数逻辑 */ }
func function5() { /* 函数逻辑 */ }

// 随机执行函数的核心逻辑
func runRandomFunction() {
    // 增删函数仅需修改此切片
    functions := []func(){
        function1,
        function2,
        function3,
        function4,
        function5,
    }
    // 生成适配切片长度的随机索引
    idx := rand.Intn(len(functions))
    // 执行选中的函数
    functions[idx]()
}

核心优势

  • 新增函数:直接在切片中添加对应函数引用即可,无需修改其他代码
  • 删除函数:直接移除切片中对应行,无需调整后续编号
  • 索引自动适配:len(functions)自动跟随切片长度变化,避免手动维护数字导致的越界问题

如果你的函数带有参数或返回值,只需修改切片的函数类型即可。例如函数为func(int) string时,切片定义为[]func(int) string,调用时传入对应参数即可。

内容的提问来源于stack exchange,提问作者user12206486

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 17:17:05