Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/goexl/mengpo
Golang default value set library,Go语言默认值配置框架,支持功能:1、设置默认值;2、支持所有Golang内置类型;3、支持JSON配置默认值;4、支持环境变量;5、支持自定义类型;6、支持复杂类型
https://github.com/goexl/mengpo
default default-value defaults framework go golang setup
Last synced: 29 days ago
JSON representation
Golang default value set library,Go语言默认值配置框架,支持功能:1、设置默认值;2、支持所有Golang内置类型;3、支持JSON配置默认值;4、支持环境变量;5、支持自定义类型;6、支持复杂类型
- Host: GitHub
- URL: https://github.com/goexl/mengpo
- Owner: goexl
- License: apache-2.0
- Created: 2021-11-11T08:32:06.000Z (about 3 years ago)
- Default Branch: master
- Last Pushed: 2024-06-03T07:15:43.000Z (6 months ago)
- Last Synced: 2024-08-03T23:26:56.914Z (4 months ago)
- Topics: default, default-value, defaults, framework, go, golang, setup
- Language: Go
- Homepage:
- Size: 111 KB
- Stars: 8
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-golang-repositories - mengpo
README
# mengpo(孟婆)
Golang默认值设置工具,支持功能
- 支持近乎所有的内置类型
- `int`
- `int8`
- `int32`
- `int64`
- `uint`
- `uint8`
- `uint32`
- `uint64`
- `bool`
- `float32`
- `float64`
- 支持复杂类型
- `slice`
- `map`
- `struct`
- 支持配置
- 配置所使用的`tag`名称
- 支持复杂结构初始化值
- 支持`json`初始化值设置
- 支持更易于书写的初始化值
- 支持类型别名
- 支持指针类型
- 默认支持`环境变量`
- 内置支持`环境变量`语法
- 增强型`环境变量`(Substitution)
- 默认值
- 字符串操作
- 长度支持
- 支持完整的生命周期方法
- `Before`## 为什么要叫孟婆
按照本人的一惯作风,所有项目都在`中国古代神话人物或者历史名人`寻找和项目`意义相近`的`神话人物或者历史人`来做作为项目的名称,原因
- 去TMD`崇洋媚外`
- 致敬`中华民族的先贤``孟婆`作为阴司掌管生死轮回的大神,有将一切人物还原到最被的状态,这和`设置默认值`不谋而和,故而使用`孟婆`来命名项目是合适的
>
鸿蒙初开,世间分为天地人三界,天界最大掌管一切,人间即所谓的阳世人界,地即为阴曹地府。三界划定,无论天上地下,神仙阴官,俱都各司其职。孟婆从三界分开时便已在世上,她本为天界的一个散官。后因看到世人恩怨情仇无数,即便死了也不肯放下,就来到了阴曹地府的忘川河边,在奈何桥的桥头立起一口大锅,将世人放不下的思绪炼化成了孟婆汤让阴魂喝下,便忘记了生前的爱恨情仇,卸下了生前的包袱,走入下一个轮回。颇有中国传统思想中“人死如云散”,“一死百了”,“莫记已死之人恩怨”之类的意味。## 使用方法
### 安装
安装非常简单,推荐使用`go.mod`来使用`孟婆`
```go
package mainimport `github.com/storezhang/mengpo`
func main() {
// xxx
}
```或者
```shell
go get github.com/storezhang/mengpo
```### 简单使用
使用非常简单,只需要调用`mengpo.Set`就可以了
```go
package mainimport `github.com/storezhang/mengpo`
type testByNormal struct {
Addr string `default:"127.0.0.1"`
Port int `default:"80"`
}func main() {
normal := new(testByNormal)
if err := mengpo.Set(normal); nil != err {
panic(err)
}
}
```### 配置标签
可以很方便的使用其它`标签`,方法
```go
package mainimport `github.com/storezhang/mengpo`
type testByTag struct {
Addr string `test:"127.0.0.1"`
Port int `test:"80"`
}func main() {
tag := new(testByTag)
if err := mengpo.Set(tag, mengpo.Tag(`test`)); nil != err {
panic(err)
}
}
```### 配置复杂类型
可以使用`json`来配置复杂的类型,比如
- `map`
- `slice`
- `struct``json`写法支持使用单引号`'`来替换转义字符`\"`,这样在书写默认值`json`更容易
```go
package mainimport `github.com/storezhang/mengpo`
type testByJson struct {
Orders []string `default:"['mqtts', 'mqtt', 'wss', 'ws']"`
// 同样支持这样写
// Orders []string `default:"[\"mqtts\", \"mqtt\", \"wss\", \"ws\"]"`
}func main() {
json := new(testByJson)
if err := mengpo.Set(json); nil != err {
panic(err)
}
}
```### 使用环境变量
`孟婆`支持使用环境变量来配置默认值
#### 初体验
来一个最简单的环境变量
```go
package mainimport `github.com/storezhang/mengpo`
type testByEnv struct {
Order string `default:"${ORDER}"`
// 同样支持这种写法
// Order string `default:"$ORDER"`
}func main() {
env := new(testByEnv)
if err := mengpo.Set(env); nil != err {
panic(err)
}
}
```#### 内置方法(Substitution)
对于环境变量,支持`Substitution`,可以很方便的对`环境变量`做一些变换
| __表达式__ | __解释__ |
|-------------------------------|---------------------------------------
| `${var}` | 取值`$var`
| `${#var}` | 取长度`$var`
| `${var^}` | 首字符大写`$var`
| `${var^^}` | 所有字符大写`$var`
| `${var,}` | 首字符小写`$var`
| `${var,,}` | 所有字符小写`$var`
| `${var:n}` | 从`n`开始取`$var`子串
| `${var:n:len}` | 从`n`开始取长度为`len`的`$var`子串
| `${var#pattern}` | 从开始跳过最少符合`pattern`的子串
| `${var##pattern}` | 从开始跳过最多符合`pattern`的子串
| `${var%pattern}` | 从最后跳过最少符合`pattern`的子串
| `${var%%pattern}` | 从最后跳过最多符合`pattern`的子串
| `${var-default` | 如果`$var`没有设置就取值`$default`
| `${var:-default` | 如果`$var`没有设置或者为空就取值`$default`
| `${var=default` | 如果`$var`没有设置或者为空就取值`$default`
| `${var:=default` | 如果`$var`没有设置或者为空就取值`$default`
| `${var/pattern/replacement}` | 替换最少的符合`pattern`的为`replacement`
| `${var//pattern/replacement}` | 替换最多的符合`pattern`的为`replacement`
| `${var/#pattern/replacement}` | 从`$var`开始替换符合`pattern`的为`replacement`
| `${var/%pattern/replacement}` | 从`$var`最后替换符合`pattern`的为`replacement`#### 嵌套使用
表达式可以嵌套使用,来达到复杂的计算要求
```go
package mainimport `github.com/storezhang/mengpo`
type testByEnv struct {
// 应用版本
Version string `default:"${PLUGIN_VERSION=${VERSION=${DRONE_TAG=${DRONE_COMMIT_BRANCH}}}}"`
}func main() {
env := new(testByEnv)
if err := mengpo.Set(env); nil != err {
panic(err)
}
}
```### 配置处理器
`孟婆`可以很方便的配置值处理器,从而达到更大的扩展性
```go
package mainimport (
"fmt"
"reflect""github.com/storezhang/mengpo"
)type testByBefore struct {
Order string `default:"${ORDER}"`
// 同样支持这种写法
// Order string `default:"$ORDER"`
}type processor struct{}
func (p *processor) Process(tag string, _ reflect.StructField) (to string, err error) {
fmt.Printf(`%s, %s`, tag, to)return
}func main() {
env := new(testByBefore)
if err := mengpo.Set(env, mengpo.Processor(new(processor))); nil != err {
panic(err)
}
}
```## 捐助
![支持宝](https://github.com/storezhang/donate/raw/master/alipay-small.jpg)
![微信](https://github.com/storezhang/donate/raw/master/weipay-small.jpg)## 感谢Jetbrains
本项目通过`Jetbrains开源许可IDE`编写源代码,特此感谢
[![Jetbrains图标](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.png)](https://www.jetbrains.com/?from=goexl/mengpo)