From e1937e9f153a5ded2d4395c120ad6ffe21e4e9bd Mon Sep 17 00:00:00 2001 From: wdvxdr Date: Wed, 9 Feb 2022 15:01:38 +0800 Subject: [PATCH] docs: document default env placeholder --- docs/config.md | 2 +- modules/config/config.go | 8 ++++---- modules/config/config_test.go | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/docs/config.md b/docs/config.md index 93a299b..3bd1369 100644 --- a/docs/config.md +++ b/docs/config.md @@ -174,7 +174,7 @@ go-cqhttp 配置文件可以使用占位符来读取**环境变量**的值。 ```yaml account: # 账号相关 uin: ${CQ_UIN} # 读取环境变量 CQ_UIN - password: ${CQ_PASSWORD} # 读取环境变量 CQ_UIN + password: ${CQ_PWD:123456} # 当 CQ_PWD 为空时使用默认值 123456 ``` ## 在线状态 diff --git a/modules/config/config.go b/modules/config/config.go index 77a0b99..c9ccc9d 100644 --- a/modules/config/config.go +++ b/modules/config/config.go @@ -152,14 +152,14 @@ func generateConfig() { // os.ExpandEnv 字符 $ 无法逃逸 // https://github.com/golang/go/issues/43482 func expand(s string, mapping func(string) string) string { - r := regexp.MustCompile(`\${([a-zA-Z_]+[a-zA-Z0-9_:]*)}`) + r := regexp.MustCompile(`\${([a-zA-Z_]+[a-zA-Z0-9_:/.]*)}`) return r.ReplaceAllStringFunc(s, func(s string) string { s = strings.Trim(s, "${}") // todo: use strings.Cut once go1.18 is released - placeholder, default_, ok := cut(s, ":") - m := mapping(placeholder) + before, after, ok := cut(s, ":") + m := mapping(before) if ok && m == "" { - return default_ + return after } return m }) diff --git a/modules/config/config_test.go b/modules/config/config_test.go index 8e6f5da..ae44b8e 100644 --- a/modules/config/config_test.go +++ b/modules/config/config_test.go @@ -6,6 +6,9 @@ import ( ) func Test_expand(t *testing.T) { + nullStringMapping := func(_ string) string { + return "" + } tests := []struct { src string mapping func(string) string @@ -23,9 +26,19 @@ func Test_expand(t *testing.T) { }, { src: "foo: ${bar:123456}", - mapping: func(s string) string { return "" }, + mapping: nullStringMapping, expected: "foo: 123456", }, + { + src: "foo: ${bar:127.0.0.1:5700}", + mapping: nullStringMapping, + expected: "foo: 127.0.0.1:5700", + }, + { + src: "foo: ${bar:ws//localhost:9999/ws}", + mapping: nullStringMapping, + expected: "foo: ws//localhost:9999/ws", + }, } for i, tt := range tests { if got := expand(tt.src, tt.mapping); got != tt.expected {