Skip to content

语法参考 ​

SSS-RUN脚本引擎支持 JavaScript(Goja)和 Go(Yaegi)两种语言。

JavaScript 语法 ​

脚本基于 ES5 标准(Goja 引擎),以下为常用语法模式。

变量声明 ​

javascript
var name = "张三"
var age = 25
var list = [1, 2, 3]
var obj = { key: "value" }

条件判断 ​

javascript
if (age > 18) {
    // 成年
} else if (age > 12) {
    // 青少年
} else {
    // 儿童
}

循环 ​

javascript
// for 循环
for (var i = 0; i < 10; i++) {
    console.log(i)
}

// 数组遍历
var list = [1, 2, 3]
for (var i = 0; i < list.length; i++) {
    console.log(list[i])
}

// forEach
list.forEach(function(item) {
    console.log(item)
})

函数定义 ​

javascript
function add(a, b) {
    return a + b
}

var result = add(1, 2)

对象操作 ​

javascript
var user = { name: "张三", age: 25 }

// 读取属性
var name = user.name
var name2 = user["name"]

// 设置属性
user.email = "zhangsan@example.com"

字符串操作 ​

javascript
var str = "Hello World"

str.length          // 11
str.indexOf("World") // 6
str.substring(0, 5)  // "Hello"
str.toUpperCase()    // "HELLO WORLD"
str.split(" ")       // ["Hello", "World"]
str.replace("World", "SSS-RUN") // "Hello SSS-RUN"

JSON 操作 ​

javascript
var obj = { name: "张三", age: 25 }
var json = JSON.stringify(obj)    // 转为 JSON 字符串
var parsed = JSON.parse(json)     // 解析 JSON 字符串

模块引入 ​

javascript
var db = require("db")
var http = require("http")
var log = require("log")
var redis = require("redis")

// 引入函数
var myFunc = require("@myFunction")

脚本返回值 ​

脚本最后一行或 return 语句的值将作为接口响应返回:

javascript
var users = db.Select("SELECT * FROM users")
return users

Go 脚本语法 ​

Go 脚本基于 Yaegi 解释器,需定义 module 入口函数。

入口函数 ​

go
func module(req map[string]any) (any, error) {
    // req 为传入参数
    return result, nil
}

导入包 ​

go
import (
    "fmt"
    "time"
    "strings"
)

使用 addons 扩展包 ​

将第三方 Go 包放入 addons 目录,即可在脚本中导入使用:

go
import (
    "github.com/your-package/xxx"
)

func module(req map[string]any) (any, error) {
    result := xxx.DoSomething()
    return result, nil
}

完整示例 ​

go
import (
    "fmt"
    "time"
)

func module(req map[string]any) (any, error) {
    name := "World"
    if v, ok := req["name"].(string); ok {
        name = v
    }

    now := time.Now().Format("2006-01-02 15:04:05")
    message := fmt.Sprintf("Hello, %s! Current time: %s", name, now)

    return map[string]any{
        "message": message,
        "time":    now,
    }, nil
}

注意事项 ​

  • JavaScript 引擎为 Goja,仅支持 ES5 语法,不支持 ES6+(如 let/const/箭头函数/Promise/async-await)
  • Go 脚本中 import 必须在 func module 之前声明
  • Go 脚本的 req 参数类型为 map[string]any
  • Go 脚本返回 (any, error),第二个返回值为错误信息

版权所有.