Skip to content

Latest commit

 

History

History
85 lines (69 loc) · 15 KB

OPERATOR_FUNC_zh.md

File metadata and controls

85 lines (69 loc) · 15 KB

Arishem支持的操作符和内置函数

操作符

类型转换说明

Arishem另一个强大的特性就是根据操作符自动进行类型兼容,在基本操作符判断的时候,如果左值的类型和右值的类型不匹配,那么arishem将会以右值类型为标准对左值进行转换。

  • 基本操作符
运算符 中文名 说明 举例
== 等于 支持数字和字符串和布尔值 1==1 或者 "a"=="a",true/false和数字比较时将转换成0、1
!= 不等于 支持数字和字符串和布尔值 1!=2 或者 "a"!="b"
> 大于 支持数字和字符串和布尔值
>= 大于等于 支持数字和字符串和布尔值
< 小于 支持数字和字符串和布尔值
<= 小于等于 支持数字和字符串和布尔值
IS_NULL 是否为空 支持任意类型
  • 其他操作符

arishem在进行列表相关的操作时,会默认尝试对左值和右值进行列表类型转换,转换失败判断将会返回false。该列表下所有的操作符在前面加上'NOT '或者'!'表示取非的逻辑,如'LIST_IN'取非操作就表示为'NOT LIST_IN'或'!LIST_IN'。

运算符 中文名 说明 举例
LIST_IN list包含 支持数字和字符串和布尔值;真实含义是:在...中 A在[A,B,C]中
LIST_RETAIN list有交集 支持数字和字符串和布尔值;两个list校验是否有交集,在进行比较时,布尔值将被转换成1(true)和0(false)。 [A,B,C]跟[B,C,D]有交集
LIST_CONTAINS list包含 一个list包含某一项 [A,B,C]包含C
STRING_START_WITH 字符串以X开头 "app"以"a"开头
STRING_END_WITH 字符串以X结尾 "app"不以"b"开头
STRING_CONTAINS 字符串包含 效率很差,不建议用 "access"包含"e"
CONTAIN_REGULAR 字符串正则匹配 不建议大量使用,性能不佳 正则"你看不明白|看不懂吗|装不懂"与字符串"装不懂"匹配
SUB_LIST_IN 子序列(左值)包含于(右值) 支持数字和字符串;真实含义是:左值 是 右值的一个子列表(序列) [A,B][A,C]是[A,B,C]的一个子列表[A]是[A]的一个子列表[A,M]不是[A,B,C]的一个子列表
SUB_LIST_CONTAINS (左值)包含子序列(右值) 支持数字和字符串;真实含义是:左值 包含了 右值这个子列表(序列) [A,B,C]包含了[A,B]这个子列表[A,B]不包含[A,B,C]这个子列表[A,B]不包含[M,N]这个子列表
BETWEEN_ALL_CLOSE 左值在右值区间,左右闭 右值为数组类型,元素个数等于2,默认第一个元素为左区间元素,第二个为右区间元素,当右值数组元素大于2时,取第一个和第二个进行判断 1 在 [1,5] 之间,1 不在 [2,5] 之间
BETWEEN_ALL_OPEN 左值在右值区间,左右开 1 在 (0, 3) 之间1 不在 (1, 5) 之间
BETWEEN_LEFT_OPEN_RIGHT_CLOSE 左值在右值区间,左开右闭 1 在 (0, 3] 之间1 不在 (1, 3] 之间3 在 (1, 3] 之间
BETWEEN_LEFT_CLOSE_RIGHT_OPEN 左值在右值区间,左闭右开 1 在 [1, 3) 之间2 在 [1, 3) 之间3 不在 [1, 3) 之间

内置函数

arishem内置函数分为3类,不需要参数的func、参数为列表的func以及参数为map的func。

  • 不需要参数的func
funcName 返回值类型 函数说明 返回值示例
GetUnixSecond int 获取当前Unix时间戳,单位为秒 1680528585
RandomUUID string 获取一个随机的UUID d9564ecc-020a-1022-4894-2711ee18ded3
GetCurrentYear int64 获取当前的年份 2023
GetCurrentYearDay int64 获取当天为当前年的第几天 当前时间为1月4日,返回4
GetCurrentMonth int64 获取当前月份 1
GetCurrentMonthDay int64 获取当天为该月的第几天 当前时间为1月6日,返回6
GetCurrentWeekDay string 获取当天为星期几 可用枚举为:SundayMondayTuesdayWednesdayThursdayFridaySaturday
GetCurrentMinute int64 获取当前分钟 当前时间为10:24,返回24
GetCurrentSecond int64 获取当前的秒数 当前时间为10:25:23,返回23
GetCurrentLocation string 获取当前所在地区 LocalAsia/ShanghaiUTC
  • 参数为列表的func
funcName 参数说明 返回值类型 函数说明 返回值示例
MinFlatWithInt 参数为数组,每个元素类型为单个元素或者元素数组 int64 所有的参数打平求最小值,每个元素会先被转换成int64 [1, [3,4,5], 6, [0,1,2]] -> 0[1, [0], [2,4]] -> 0
MinFlatWithFloat 参数为数组,每个元素类型为单个元素或者元素数组 float64 所有的参数打平求最小值,每个元素会先被转换成float64 [1, [0.2, 2.3, 4], 0.1, [1,2]] -> 0.1
MaxFlatWithInt 参数为数组,每个元素类型为单个元素或者元素数组 int64 所有的参数打平求最大值,每个元素会先被转换成int64 [1, [3,4,5], 6, [0,1,2]] -> 6[1, [0], [2,4]] -> 4
MaxFlatWithFloat 参数为数组,每个元素类型为单个元素或者元素数组 float64 所有的参数打平求最大值,每个元素会先被转换成float64 [1, [0.2, 2.3, 4], 0.1, [1,2]] -> 4.0
ListFlatJoin 参数为数组,每个元素类型为单个元素或者元素数组 string 所有的参数打平连接,参数数组第一个为连接符号 ["-",1.23,"zhangsan",3,true] -> "1.23-zhangsan-3-true"[",",1.23,"zhangsan",3,true] -> "1.23,zhangsan,3,true"注:数组第一个元素为连接符
ListAdd 参数为数组,每个元素类型为单个元素或者元素数组 []interface{} 参数数组第一个参数默认为数组类型,然后与后面的参数相加 [[1, 2, 3],[1.0, 2.0]] -> [1, 2, 3, 1.0, 2.0]["zhangsan", [1, 2, 3], [1.0, 2.0, 3.1]] -> ["zhangsan", 1, 2, 3, 1, 2, 3.1]
ListRemove 参数为数组,每个元素类型为单个元素或者元素数组 []interface{} 参数数组第一个参数默认为数组类型,然后与后面的参数相减注:Number类型会统一转换成uint64/int64/float64类型,然后做差,不同类型数据无法做差 [[1, 2, 3],[1.0, 2.0]] -> [3.0][[1, 2, 3],[1.0, 2.0,3.1]] -> [3.0][["zhangsan"], [1,2,3]] -> ["zhangsan"]
ListUnion 参数为数组,每个元素类型为单个元素或者元素数组 []interface{} 数组求并集注:Number类型会统一转换成uint64/int64/float64类型,然后做同值判断,指针和结构体类型会通过序列化成string类型做同值判断,Number类型和string类型/指针/结构体之间无法比较。 [[1, 2, 3],[1.0, 2.0]] -> [1.0,2.0,3.0][[1, 2, 3],[1.0, 2.0, 3.1]] -> [1.0,2.0,3.0,3.1][[1, 2, 3],[1.0, 2.0, 3.1],["zhang","san"]] -> [1.0,2.0,3.0,3.1,"zhang","san"]
ListIntersect 参数为数组,每个元素类型为单个元素或者元素数组 []interface{} 数组求交集注:Number类型会统一转换成uint64/int64/float64类型,然后做同值判断,指针和结构体类型会通过序列化成string类型做同值判断,Number类型和string类型/指针/结构体之间无法比较。 [[1, 2, 3],[1.0, 2.0]] -> [1.0, 2.0][[1, 2, 3],[1.0, 2.0, 3.1]] -> [1.0, 2.0][[1, 2, 3],[1.0, 2.0, 3.1],["1", "zhang", "san"]] -> [] (返回一个空数组,因为三个数组之间没有交集,Number与string类型之间无法比较)["1", "zhang", "san"], ["1", "zhang", "gou"]] -> ["1", "zhang"][]*nameAge{{Name: "zhangsan", Age: 18}, {Name: "lisi", Age: 20}} 和 []*nameAge{{Name: "wangwu", Age: 18}, {Name: "lisi", Age: 20}}求交集,会返回一个string数组,每个元素为结构体序列化后的值,如当前例子返回["{"Name":"lisi","Age":20}"]
MapUnion 参数为数组类型,每个元素为map[string]interface{}类型 map[string]interface{} map求并集,key值的同值判断与上述数组求并/交集一致 [{"name": "1"},{"name": "3"},{"name": "10", "age": 18}] -> {"name":"10","age":18}
MapIntersect map[string]interface{} map求交集,key值的同值判断与上述数组求并/交集一致 [{"name": "1"},{"name": "3"},{"name": "10", "age": 18}] -> {"name":"1"}
  • 参数为Map的func
funcName 参数说明 返回值类型 函数说明 返回值示例 备注
ListLength 传入两个参数,分别为list和filter_null(可选),list为数组类型,filter_null为bool类型,默认不传为false,表示是否过滤数组中的null元素 int 计算targetList的长度,当filterNull为true时,过滤数组中的空元素 list:"zhangsan" -> 0[1,2,3,4] -> 4["1","2",null,"4"],filter_null为true时 -> 3filterNull不传或者为false时->4
DateToUnix 四个参数:
1.date:格式为yyy-MM-dd HH:mm:ss的日期字符串
2. precision:表示日期字符串的精度,和date格式有关,当date格式精准到秒时,填sec,以此类推,可选的有:day、min、sec、milli
3. zone(可选):时间区域,不传默认为local,剩下可传的为utc、shanghai,或者自行传入符合golang语言的区域格式,如:Asia/Shanghai、Europe/Berlin
4. unit(可选):unix时间戳返回的单位,默认为秒,其余可选的为:sec、milli、micro、nano
int64 在参数map中,传入日期格式的字符串datedate的格式与precision保持一致,函数会将该date转换成日期,并返回该日期的unix时间戳,可以通过传入zone改变date转换成日期时的时区,不传默认为local,返回的时间戳单位可通过传入unit参数来改变。 date:"2023-01-02" precision: "day" -> 1672588800date:"2023-01-02" precision: "day" zone: "utc" -> 1672617600
UnixToDate 两个参数:date:unix时间戳,单位为秒format(可选,不传默认精确到秒): 格式化后的日志格式,由于golang语言限制,注意模版为:2006-01-02 15:04:05 string 将参数date所表示的unix时间戳转换成日期,再转换成日期字符串 date: "1672655888", format: "2006-01-02", -> 2023-01-02date: "1672655888", format: "2006-01-02 15:04:05", -> 2023-01-02 18:38:08
ListJoin 两个参数:list:数组元素,sep分隔符 string 将list中的元素通过sep拼接成一个字符串 "list": [1.23, 2.45], "sep": ",", -> "1.23,2.45""list": [1.23, 2.45], "sep": "-", -> "1.23-2.45"
RandomUUIDWithReplacer 一个参数:**replacer(可选):**将替换原有UUID自带的分隔符"-" string 将UUID自带的"-"分隔符用replacer进行替换,返回新连接符的UUID replacer:"" 8e1d6b823f6f38bb3eb7c7b3556286c3replacer: "#" c804d25d#b6d0#8e31#1e30#e72188745f42
MarshalString 两个参数:
1.target:要encoding的对象
2. escape_html:是否转移html特殊字符
string target可以为任意类型