#511·otto

多线程的时候会报错

Author: DokiDoki1103Created Nov 18, 2023Updated Nov 19, 2023

var vm = otto.New()

// func xx(){}
func TestJS(t *testing.T) {

	const numTasks = 10000
	const numWorkers = 2

	tasks := make(chan int, numTasks)
	results := make(chan int, numTasks)
	var wg sync.WaitGroup

	// 启动 goroutine 处理任务
	for i := 0; i < numWorkers; i++ {
		wg.Add(1)
		go worker(tasks, results, &wg)
	}

	// 提交任务到通道中
	go func() {
		for i := 0; i < numTasks; i++ {
			tasks <- i
		}
		close(tasks) // 关闭任务通道,告知所有的 worker 已经没有任务了
	}()

	// 处理结果,等待所有 worker 完成任务
	go func() {
		wg.Wait()      // 等待所有 worker 完成任务
		close(results) // 关闭结果通道
	}()

	// 读取结果
	for res := range results {
		fmt.Printf("结果 %d 完成\n", res)
	}

	fmt.Println("所有任务完成")

}

func worker(tasks <-chan int, results chan<- int, wg *sync.WaitGroup) {
	defer wg.Done()
	for task := range tasks {
		// 这里执行任务的逻辑,示例中只是打印任务号
		// fmt.Printf("完成任务 %d\n", task)
		vm.Run(`//这个是具体的加密函数 zstring魔改的压缩算法
function _0x56d97c(_0x8df421) {
  // console.log(_0x8df421)
  if (_0x8df421 == null) {
    return '';
  }

  var _0x3219b6 = "DGi0YA7BemWnQjCl4+bR3f8SKIF9tUz/xhr2oEOgPpac=61ZqwTudLkM5vHyNXsVJ";

  function _0x1637ab(_0x329955) {
    return _0x3219b6["charAt"](_0x329955);
  }

  if (_0x8df421 == null) {
    return '';
  }

  var _0x2ba560;

  var _0x1a3125;

  var _0x56a845 = {};
  var _0x568d8a = {};
  var _0x17ecc2 = '';
  var _0x4b03fb = '';
  var _0x127752 = '';
  var _0x55a847 = 2;
  var _0x48b33e = 3;
  var _0x318c3 = 2;
  var _0x24e447 = [];
  var _0x841ee6 = 0;
  var _0x25adf9 = 0;

  var _0x4afbc9;

  for (_0x4afbc9 = 0; _0x4afbc9 < _0x8df421["length"]; _0x4afbc9 += 1) {
    _0x17ecc2 = _0x8df421["charAt"](_0x4afbc9);

    if (!Object["prototype"]["hasOwnProperty"]["call"](_0x56a845, _0x17ecc2)) {
      _0x56a845[_0x17ecc2] = _0x48b33e++;
      _0x568d8a[_0x17ecc2] = true;
    }

    _0x4b03fb = _0x127752 + _0x17ecc2;

    if (Object["prototype"]["hasOwnProperty"]["call"](_0x56a845, _0x4b03fb)) {
      _0x127752 = _0x4b03fb;
    } else {
      if (Object["prototype"]["hasOwnProperty"]["call"](_0x568d8a, _0x127752)) {
        if (_0x127752["charCodeAt"](0) < 256) {
          for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
            _0x841ee6 = _0x841ee6 << 1;

            if (_0x25adf9 == 5) {
              _0x25adf9 = 0;

              _0x24e447["push"](_0x1637ab(_0x841ee6));

              _0x841ee6 = 0;
            } else {
              _0x25adf9++;
            }
          }

          _0x1a3125 = _0x127752["charCodeAt"](0);

          for (_0x2ba560 = 0; _0x2ba560 < 8; _0x2ba560++) {
            _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

            if (_0x25adf9 == 5) {
              _0x25adf9 = 0;

              _0x24e447["push"](_0x1637ab(_0x841ee6));

              _0x841ee6 = 0;
            } else {
              _0x25adf9++;
            }

            _0x1a3125 = _0x1a3125 >> 1;
          }
        } else {
          _0x1a3125 = 1;

          for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
            _0x841ee6 = _0x841ee6 << 1 | _0x1a3125;

            if (_0x25adf9 == 5) {
              _0x25adf9 = 0;

              _0x24e447["push"](_0x1637ab(_0x841ee6));

              _0x841ee6 = 0;
            } else {
              _0x25adf9++;
            }

            _0x1a3125 = 0;
          }

          _0x1a3125 = _0x127752["charCodeAt"](0);

          for (_0x2ba560 = 0; _0x2ba560 < 16; _0x2ba560++) {
            _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

            if (_0x25adf9 == 5) {
              _0x25adf9 = 0;

              _0x24e447["push"](_0x1637ab(_0x841ee6));

              _0x841ee6 = 0;
            } else {
              _0x25adf9++;
            }

            _0x1a3125 = _0x1a3125 >> 1;
          }
        }

        _0x55a847--;

        if (_0x55a847 == 0) {
          _0x55a847 = Math["pow"](2, _0x318c3);
          _0x318c3++;
        }

        delete _0x568d8a[_0x127752];
      } else {
        _0x1a3125 = _0x56a845[_0x127752];

        for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
          _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

          if (_0x25adf9 == 5) {
            _0x25adf9 = 0;

            _0x24e447["push"](_0x1637ab(_0x841ee6));

            _0x841ee6 = 0;
          } else {
            _0x25adf9++;
          }

          _0x1a3125 = _0x1a3125 >> 1;
        }
      }

      _0x55a847--;

      if (_0x55a847 == 0) {
        _0x55a847 = Math["pow"](2, _0x318c3);
        _0x318c3++;
      }

      _0x56a845[_0x4b03fb] = _0x48b33e++;
      _0x127752 = String(_0x17ecc2);
    }
  }

  if (_0x127752 !== '') {
    if (Object["prototype"]["hasOwnProperty"]["call"](_0x568d8a, _0x127752)) {
      if (_0x127752["charCodeAt"](0) < 256) {
        for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
          _0x841ee6 = _0x841ee6 << 1;

          if (_0x25adf9 == 5) {
            _0x25adf9 = 0;

            _0x24e447["push"](_0x1637ab(_0x841ee6));

            _0x841ee6 = 0;
          } else {
            _0x25adf9++;
          }
        }

        _0x1a3125 = _0x127752["charCodeAt"](0);

        for (_0x2ba560 = 0; _0x2ba560 < 8; _0x2ba560++) {
          _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

          if (_0x25adf9 == 5) {
            _0x25adf9 = 0;

            _0x24e447["push"](_0x1637ab(_0x841ee6));

            _0x841ee6 = 0;
          } else {
            _0x25adf9++;
          }

          _0x1a3125 = _0x1a3125 >> 1;
        }
      } else {
        _0x1a3125 = 1;

        for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
          _0x841ee6 = _0x841ee6 << 1 | _0x1a3125;

          if (_0x25adf9 == 5) {
            _0x25adf9 = 0;

            _0x24e447["push"](_0x1637ab(_0x841ee6));

            _0x841ee6 = 0;
          } else {
            _0x25adf9++;
          }

          _0x1a3125 = 0;
        }

        _0x1a3125 = _0x127752["charCodeAt"](0);

        for (_0x2ba560 = 0; _0x2ba560 < 16; _0x2ba560++) {
          _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

          if (_0x25adf9 == 5) {
            _0x25adf9 = 0;

            _0x24e447["push"](_0x1637ab(_0x841ee6));

            _0x841ee6 = 0;
          } else {
            _0x25adf9++;
          }

          _0x1a3125 = _0x1a3125 >> 1;
        }
      }

      _0x55a847--;

      if (_0x55a847 == 0) {
        _0x55a847 = Math["pow"](2, _0x318c3);
        _0x318c3++;
      }

      delete _0x568d8a[_0x127752];
    } else {
      _0x1a3125 = _0x56a845[_0x127752];

      for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
        _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

        if (_0x25adf9 == 5) {
          _0x25adf9 = 0;

          _0x24e447["push"](_0x1637ab(_0x841ee6));

          _0x841ee6 = 0;
        } else {
          _0x25adf9++;
        }

        _0x1a3125 = _0x1a3125 >> 1;
      }
    }

    _0x55a847--;

    if (_0x55a847 == 0) {
      _0x55a847 = Math["pow"](2, _0x318c3);
      _0x318c3++;
    }
  }

  _0x1a3125 = 2;

  for (_0x2ba560 = 0; _0x2ba560 < _0x318c3; _0x2ba560++) {
    _0x841ee6 = _0x841ee6 << 1 | _0x1a3125 & 1;

    if (_0x25adf9 == 5) {
      _0x25adf9 = 0;

      _0x24e447["push"](_0x1637ab(_0x841ee6));

      _0x841ee6 = 0;
    } else {
      _0x25adf9++;
    }

    _0x1a3125 = _0x1a3125 >> 1;
  }

  while (true) {
    _0x841ee6 = _0x841ee6 << 1;

    if (_0x25adf9 == 5) {
      _0x24e447["push"](_0x1637ab(_0x841ee6));

      break;
    } else {
      _0x25adf9++;
    }
  }

  return _0x24e447["join"]('');
}
//这个是压缩前置
function formatParams(base_url, data) {
  var sinData = base_url + data;
  sinData = encodeURIComponent(sinData);
  var _0x318558 = 0;
  for (var i = 0; i < sinData.length; i++) {
    var _0x44becc = sinData.charCodeAt(i);
    _0x318558 = (_0x318558 << 7) - _0x318558 + 398 + _0x44becc;
    _0x318558 |= _0x318558;
  }
  if ( !data) {
    return _0x318558 + "|0|" + new Date().getTime();
  }
  return _0x318558 + "|0|" + new Date().getTime() + "|1";
}
//n4Ah7KBKDIZG8FD/IG7D9D0gDmrXBzbDREbfbD
//n4Ah7KBKDIZG8FD/IG7D9D0gDmgIDRog+ddrfbD
(formatParams("https://wx.gzhotelgroup.com/api/MyReservation/query", "{\"start\":0,\"length\":1000,\"statuses\":[0,1,2]}"));
(_0x56d97c(formatParams("https://wx.gzhotelgroup.com/api/MyReservation/query", "{\"start\":0,\"length\":1000,\"statuses\":[0,1,2]}")));`)
		results <- task // 将任务号放入结果通道
	}
}

这是报错日志

fatal error: concurrent map read and map write

goroutine 42 [running]:
github.com/robertkrimen/otto.(*_dclStash).getBinding(0x140001395c0, {0x14000119a6c, 0x7}, 0x0)
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/stash.go:203 +0x50
github.com/robertkrimen/otto.(*_stashReference).getValue(0x140001fe300?)
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/type_reference.go:68 +0x34
github.com/robertkrimen/otto.Value.resolve(...)
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/value.go:483
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeDotExpression(0x140001fe300, 0x14000138ea0)
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_expression.go:253 +0x70
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeExpression(0x140001fe300, {0x100fdf098?, 0x14000138ea0})
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_expression.go:49 +0x19c
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeBinaryExpression_comparison(0x1483543f8?, 0x14000138ed0)
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_expression.go:159 +0x94
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeExpression(0x140001fe300, {0x100fdeff8?, 0x14000138ed0})
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_expression.go:34 +0xec
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeForStatement(0x140001fe300, 0x140000daa50?)
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_statement.go:251 +0x17c
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeStatement(0x140001fe300, {0x100fdee78?, 0x140000daa50})
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_statement.go:67 +0x458
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeStatementList(0x100d54d77?, {0x140001b21e0?, 0x6, 0x100fdea78?})
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_statement.go:119 +0x90
github.com/robertkrimen/otto.(*_runtime).cmpl_evaluate_nodeStatement(0x140001fe300, {0x100fded98?, 0x14000136d38})
	/Users/zhangxiaoyuan/go/pkg/mod/github.com/robertkrimen/[email protected]/cmpl_evaluate_statement.go:29 +0xe4
github.com/robertkrimen/otto.(*_runtime).cmpl_call_nodeFunction(0x140001fe300, 0x1400013e120, 0x140001395c0, 0x14000584800, {0x100fbb680?, {0x14000102480?, 0x1400012d378?}}, {0x14000139590, 0x2, 0x30?})