From a4a1649fe0238f8c6751e6ff26bf19c826d0a084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=A5=E7=BE=8A?= Date: Sat, 26 Aug 2023 17:10:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Golang/utils/jsRun.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Golang/utils/jsRun.go b/Golang/utils/jsRun.go index 5ae125f..2cb1cdf 100644 --- a/Golang/utils/jsRun.go +++ b/Golang/utils/jsRun.go @@ -10,12 +10,31 @@ package utils import ( "fmt" js "github.com/dop251/goja" + "sync" ) -type JsUtil struct{} +type JsUtil struct { + pool sync.Pool +} + +func (j *JsUtil) getVm() *js.Runtime { + v := j.pool.Get() + if v != nil { + vm := v.(*js.Runtime) + vm.Set("global", vm.NewObject()) // 重置或清理全局对象 + return vm + } + return js.New() +} + +func (j *JsUtil) putVm(vm *js.Runtime) { + vm.Set("global", nil) // 清除全局对象 + j.pool.Put(vm) +} func (j *JsUtil) JsRun(funcContent []string, params ...any) any { - vm := js.New() + vm := j.getVm() + defer j.putVm(vm) _, err := vm.RunString(funcContent[0]) if err != nil { return err