`caarlos0/env`源码阅读
Tips: 建议先看下官方文档,如何使用env再看源码
项目信息
- 地址:https://github.com/caarlos0/env
- 描述:一个可以parse环境变量到go struct的简单的三方库
- 版本:tag:
v6.8.0
源码阅读
入口函数(Parse)
|
|
入口函数Parse
相当于对ParseWithFuncs
做了一个封装,送入了一个空的funcMap
参数,一般这种操作都是送一个默认的配置给下层的函数,估计是在下层的函数中做的处理。
在ParseWithFuncs
,先判定了用户传入的需要被parse的go struct是否是一个struct指针,然后会将用funcMap
和defaultTypeParsers
去合并出一个新的parsers
,接下来就是使用处理后的go struct piont, parserts, opts处理数据。
默认的数据转换函数映射(defaultBuiltInParsers
, defaultTypeParsers
)
defaultBuiltInParsers
与defaultTypeParsers
都是map[reflect.Kind]ParserFunc
类型
defaultBuiltInParsers
defaultBuiltInParsers
主要是对基本数据类型做数据转换,如:bool
,string
,int
,int16
,int32
,int64
,int8
,uint
,uint16
,uint32
,uint64
,uint8
,float64
,float32
。
源码
|
|
defaultTypeParsers
defaultTypeParsers
是对一些golang标准库的一些结构体进行预定义的parser,如:url.URL
,time.Nanosecond
。 在描述ParseWithFuncs
函数时,有说到,ParseWithFuncs
会去合并defaultTypeParsers
与用户传入的funcMap
参数,所以,如果对某些特殊的类型有自己的parse需求,可以考虑使用ParseWithFuncs
函数替代Parse
函数
源码
|
|
环境变量解析逻辑(doParse
)
源码
|
|
使用反射来设置结构体中对应字段的值(set
)
|
|
- 原文作者:Daryl
- 原文链接:https://siskinc.github.io/post/caarlos0-env%E6%BA%90%E7%A0%81%E9%98%85%E8%AF%BB/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。