package ali_auth import "errors" type ( ISys interface { GetAppkey() string GetToken() (token string, err error) } TokenResult struct { ErrMsg string Token struct { UserId string Id string ExpireTime int64 } } ) var defsys ISys // ErrNotInited 阿里云认证未初始化。OnInit 失败时调用方可选择降级;此时包级函数返回本错误,而不是 panic。 var ErrNotInited = errors.New("ali_auth 未初始化:配置缺失") func OnInit(config map[string]interface{}, option ...Option) error { sys, err := newSys(newOptions(config, option...)) if err != nil { // 出错时不要给 defsys 赋值,避免「非 nil 接口 + nil 指针」让守卫失效。 return err } defsys = sys return nil } func NewSys(option ...Option) (sys ISys, err error) { sys, err = newSys(newOptionsByOption(option...)) return } func GetAppKey() string { if defsys == nil { return "" } return defsys.GetAppkey() } func GetToken() (token string, err error) { if defsys == nil { return "", ErrNotInited } token, err = defsys.GetToken() return }