预计将于 2023 年 2 月发布的 Go 1.20 有一个小的变化,对于那些大量使用错误包装的应用程序来说,可能会有效改进它们的错误处理方法。
(相关资料图)
让我们看一下它的用法,但首先,需要简要回顾一下什么是错误包装。如果你已经掌握了可以直接跳到下面的 “Go 1.20 新功能” 部分以获取新的信息。
Go 中的错误是实现一个非常简单的接口:
typeerrorinterface{Error()string}
错误类型可以是任何东西,从string本身到int,但通常它们是struct类型。下面这个例子来自标准库:
typeerrstruct{sstring}func(e*err)Error()string{returne.s}
要检查 Go 中的错误,你只需比较一个值(在本例中为int值):
iferr==io.EOF{//...}
第二种常见的用法是检查错误的类型,那也意味着要写更多的代码:
ifnerr,ok:=err.(net.Error){//...(usenerrwhichisanet.Error)}
在上面的例子中,类型断言测试类型net.Error的err值,并创建一个新变量nerr,它可以在 if 语句中使用。Go 中的错误方便理解、易于使用且非常高效。
错误包装从 Go 1.13 开始,引入了错误包装。包装允许将错误嵌入到其他错误中,就像在其他语言中包装异常一样。这非常实用,比如函数遇到 “record not found” 错误时,可以向错误信息中添加更多上下文信息,例如 “unknown user: record not found”。
Go 中错误包装设计背后的有趣想法是:契约不用关心错误类型、结构或它们是如何创建的。而唯一关注的是解包过程和转换为字符串,因为这两者是必须的。这就非常容易实现:支持解包的错误类型必须实现Unwrap() error方法。
标准库中没有(命名的)接口可以向您展示,因为接口是隐式实现的,没有必要单独写一个。这里我们写一个只是为了更好说明这篇文章:
typeWrappedErrorinterface{Unwrap()error}
我们来看看 Go 标准库(实际上是 package fmt)中是如何实现包装错误的:
typewrapErrorstruct{msgstringerrerror}func(e*wrapError)Error()string{returne.msg}func(e*wrapError)Unwrap()error{returne.err}
由于上面错误类型实现了Error() string方法,所以说 Go 中的错误实际上最终是字符串并没有错,因此需要一种创建这些字符串的良好机制。这就是标准库中的函数fmt.Errorf发挥作用的地方:
varRecordNotFoundErr=errors.New("notfound")constname,id="lzap",13werr:=fmt.Errorf("unknownuser%q(id%d):%w",name,id,recordNotFoundErr)fmt.Println(werr.Error())
一个特殊格式的动词%w,每次调用只能使用一次(稍后会详细介绍),用于错误参数。除此之外,该函数的工作方式类似于fmt.Printf函数。下面的例子打印了这个结果:
unknownuser"lzap"(id13):notfound
如你所见,错误包装本质上是一个链表。要解包错误,请使用errors.Unwrap函数,该函数将为链表中的最后一个错误值返回nil。要检查错误类型或值,需要遍历整个列表,这对于需要进行频繁的错误检查不太实用。幸运的是,有两个辅助函数可以做到这一点。
检查包装错误列表中的值:
iferrors.Is(err,RecordNotFoundErr){//...}
检查特定类型(下面例子是来自标准库的网络错误):
varnerr*net.Erroriferrors.As(err,&nerr){//...(usenerrwhichisa*net.Error)}
以上总结了 Go 1.13 及更高版本中的错误包装。
Go 1.20 新特性让我们看看 Go 1.20 中真正的新功能,从函数errors.Join开始,它通过可变参数包装错误列表:
err1:=errors.New("err1")err2:=errors.New("err2")err:=errors.Join(err1,err2)fmt.Println(err)
当事先不知道错误数量时,此功能可用于将错误连接在一起。一个很好的例子是从 goroutines 收集错误。值得一提的是,该函数将列表中的错误与换行符连接起来。上面的代码片段打印:
err1err2
对于许多应用程序或(日志记录)库来说,这可能会存在问题,它们期望错误通常只是没有换行符的字符串。幸运的是,Go 1.20 中的另一个变化改变了fmt.Errorf的行为:该函数现在接受多个%w格式说明符:
err1:=errors.New("err1")err2:=errors.New("err2")err:=fmt.Errorf("%w+%w",err1,err2)fmt.Println(err)
以前会导致格式错误的格式字符串现在可以正确打印:
err1+err2
同时包装多个错误实现Unwrap() error,这是可能的吗?
事实证明,在 Go 1.20 标准库中有一种新的机制: 实现Unwrap() []error函数的错误类型可以包装多个错误。让我们来看看这是如何在库中实现的:
typejoinErrorstruct{errs[]error}func(e*joinError)Error()string{//concatenateerrorswithanewlinecharacter}func(e*joinError)Unwrap()[]error{returne.errs}
一个理论上的接口,但标准库中实际不存在,如下所示:
typeMultiWrappedErrorinterface{Unwrap()[]error}
由于 Go 不允许方法重载,因此每种类型都可以实现Unwrap() error或Unwrap() []error,但不能同时实现。还记得我提到过包装错误本质上是一个链表吗?实现前一个(新引入的)方法的类型实际上形成了一个链接树,函数errors.Is和errors.As的工作方式相同,只是现在它们需要遍历树而不是列表。根据文档,该实现执行预排序、深度优先遍历。
这确实是 Go 1.20 带来的全部,它可能看起来是一个小的变化,但它提供了如何有效和干净地处理错误的新方法。在展示真实示例之前,让我总结一下新功能:
新的Unwrap []error函数契约允许遍历错误树。
新的errors.Join函数,这是一个方便的函数,用于连接两个错误字符串值(使用换行符)。
现有函数errors.Is和errors.As已更新,可以同时处理错误列表和错误树。
现有函数fmt.Errorf现在接受多个%w格式动词。实践上面这一切都很棒,但是你如何在实践中利用它呢?
在一个小型 REST API 微服务中,我们通过errors.New和fmt.Errorf处理来自 DAO 包(数据库)、REST 客户端(其他后端服务)和其他包的各种错误。返回的 HTTP 状态代码应该是 2xx、4xx 或 5xx,具体取决于错误状态以遵循最佳 REST API 实践。实现此过程的一种方法是解开主 HTTP 处理程序中的错误并找出它是哪种错误。
然而,通过多重错误包装,现在可以包装根本原因(例如数据库返回 “no records found” )和返回给用户 HTTP 代码(在本例中为 404)。
一个工作示例如下所示:
packagemainimport("errors""fmt")//commonHTTPstatuscodesvarNotFoundHTTPCode=errors.New("404")varUnauthorizedHTTPCode=errors.New("401")//databaseerrorsvarRecordNotFoundErr=errors.New("DB:recordnotfound")varAffectedRecordsMismatchErr=errors.New("DB:affectedrecordsmismatch")//HTTPclienterrorsvarResourceNotFoundErr=errors.New("HTTPclient:resourcenotfound")varResourceUnauthorizedErr=errors.New("HTTPclient:unauthorized")//applicationerrors(thenewfeature)varUserNotFoundErr=fmt.Errorf("usernotfound:%w(%w)",RecordNotFoundErr,NotFoundHTTPCode)varOtherResourceUnauthorizedErr=fmt.Errorf("unauthorizedcall:%w(%w)",ResourceUnauthorizedErr,UnauthorizedHTTPCode)funchandleError(errerror){iferrors.Is(err,NotFoundHTTPCode){fmt.Println("Willreturn404")}elseiferrors.Is(err,UnauthorizedHTTPCode){fmt.Println("Willreturn401")}else{fmt.Println("Willreturn500")}fmt.Println(err.Error())}funcmain(){handleError(UserNotFoundErr)handleError(OtherResourceUnauthorizedErr)}
这将打印:
Willreturn404usernotfound:DB:recordnotfound(404)Willreturn401unauthorizedtocallotherservice:HTTPclient:unauthorized(401)
从这样的人工代码片段中可能看起来不太明显的是,实际上的错误声明通常分布在许多包中,并且不容易跟踪所有可能的错误以确保所需的 HTTP 状态代码。在这种方法中,所有在一个地方声明的应用程序级包装错误也包含了 HTTP 代码。
请注意,这在 Go 1.19 或更早版本中是不可能的,因为fmt.Errorf函数只会包装第一个错误。该代码确实在 1.19 上可以编译,甚至不会产生运行时恐慌,但它实际上不会工作。
显然,常见的 HTTP 状态代码很容易成为一种新的错误类型(基于int类型),因此可以通过errors.As轻松提取实际代码,但我想让示例保持简单。
Feel free to play around with the code on Go Playground. Make sure to use “dev branch” or 1.20+ version of Go. 可以在 Go Playground 上自由运行上述代码。确保使用 “dev branch” 或 Go 的 1.20+ 版本。现有应用在你的应用程序中实施新功能时,请注意errors.Unwrap函数。对于具有Unwrap() []error的错误类型,它总是返回nil:
err1:=errors.New("err1")err2:=errors.New("err2")err:=errors.Join(err1,err2)unwrapped:=errors.Unwrap(err)fmt.Println(unwrapped)
由于 Go 1.X 兼容性承诺,这会打印出 “nil”。当你引入多个包装错误时,请确保检查展开代码。幸运的是,典型 Go 代码中的大部分错误检查都是使用errors.Is和errors.As完成的。
错误包装并不是 Go 中所有错误处理的最终解决方案。它只是提供了一种干净的方法来处理典型 Go 应用程序中的错误,对于简单应用程序来说也许就完全足够了。原文地址:https://lukas.zapletalovi.com/posts/2022/wrapping-multiple-errors/原文作者:Lukáš Zapletal本文永久链接:https://github.com/gocn/translator/blob/master/2022/w50_Wrapping_multiple_errors译者:haoheipi校对:watermelo
往期推荐
谷歌发布查找开源漏洞的Go工具OSV-Scanner最好的Go框架:没有框架?
「每周译Go」如何在Go中构造For 循环想要了解Go更多内容,欢迎扫描下方关注公众号,回复关键词 [实战群],就有机会进群和我们进行交流
分享、在看与点赞Go
X 关闭
推荐内容
- 国乒斩获4冠!孙颖莎3:1淘汰女单卫冕冠军,赛后高情商称赞对手
- 张家港经开区(杨舍镇):城西街道这场微演讲超“燃”!
- 杜蕾斯新晋女模身材照曝光,我怎么又一次沦陷了...
- 李大锦(对于李大锦简单介绍)
- 国家图书馆上线10万册电子书 “中华古籍资源库”上新
- 追踪2023重点项目 Ta们取得新进展
- 辛苦了!大熊猫园润又生宝宝啦
- 取消限购!南京打响核心城市全面放松“第一枪”
- 宝龙地产前8个月合约销售额约217亿元
- 房贷利息调整最新消息!主要有这4点
- 兰考县政府投资工程项目联合审核会召开
- 10位外籍友人获首届兰花奖 毛宁:他们是促进理解互信、交流合作的友谊使者
- 利兹建筑学院庆祝首届大学中心毕业生
- A股收评:三大指数小幅调整 两市成交金额不足7000亿
- 驾驶者至 驾驭者致远 路特斯首款纯电超跑GT Emeya全球首秀
- 重拳再出击!1207名缅北涉我国电诈犯罪嫌疑人移交我方
- 驻印度尼西亚中资企业圆桌会召开
- 9月8日讯,据外媒报道,据泰国主要行业协会称,由于严重干旱,泰国2023/24年度糖产量将同比下降近五分之一
- 李彦宏、马斯克、黄仁勋、奥特曼等获评《时代》周刊全球AI领袖
- 鞍山专项治理经营主体严重违法失信行为
- ASML:已向荷兰政府申请许可证获批,在今年内仍可向中国出口部分高端浸润式光刻系统
- 南方公益丨超强台风“苏拉”将至,暴雨天这样安全出行
- 新飞飞攻略(新飞飞任务怎么会做没了)
- 广西自贸试验区发布四周年“成绩单” 累计外贸进出口额8580亿元
- 莫名其妙的爱情(关于莫名其妙的爱情简述)
- 7月,江西这两个指标优秀!
- 俄突遭高致病性H5N1禽流感袭击
- 中核国际(02302)发布中期业绩 股东应占溢利833万港元 同比减少53.92%
- 打卡“多彩龙江”|打破国外垄断超高纯金属材料“列队”亮相
- 富淼科技接待东吴证券调研
- 佛燃能源:老旧住宅加装管道天然气工作将给居民销气量、延伸业务等各项业务带来更多增长动能
- 亲吻祖国歌词王丽达 亲吻祖国歌词
- 上好“开学第一课” 争做“小小消防员”
- 分数乘整数的意义(分数乘整数的意义)
- 上海中医药大学迎新生:送上打开中医药文化宝库的“钥匙”
- 苹果手机怎么把图片转换成文字表格 苹果手机怎么把图片转换成文字
- “找遍全球,只有这里满足实验需求”
- aeroplane前面用a还是an(aeroplane)
- 2023年国家乡村振兴示范县创建名单公示,方正县拟入选
- 恒宝股份MACD金叉,持有1日上涨概率较大,技术面值得关注!
- 巨人网络:首次中期分红《原始征途-正式版》计划Q4推出|财报解读
- 中国船舶:上半年归母净利润5.53亿元,同比增182.46%,处置海工平台产生非货币性资产交换损益5.34亿
- 南苏丹小组赛1胜2负 若想出线需要中国队赢球且分差小于36分
- V观财报|开创国际:董事长谢峰辞职
- 特戊酰氯商品报价动态(2023-08-30)
- 近期内,月老助力,缘分和桃花追求完美,厮磨共余生的四大生肖!
- 武汉三镇或再做出无奈之举,将遭亚足联重罚,足协面临巨大压力
- 技术指标粘合线金叉
- 禹州市开展测绘法暨国家版图意识宣传活动
- 合锻智能:8月29日融资买入783.77万元,融资融券余额1.09亿元
- 华西证券:融资净偿还1900.5万元,融资余额7.96亿元(08-29)
- 迈瑞医疗上半年净利增长两成 研发继续保持高投入
- 洛阳一女大学生因军训照走红,多家公司求签遭拒,看到正脸网友不淡定了
- 王毅会见阿拉伯议会议长欧舒米
- 中国核建股东户数下降2.07%,户均持股24.78万元
- 深圳“爱心福彩·常回家看看”公益活动开始报名
- 20万以下的车哪个好?性能、安全、豪华、环保,你更看重哪个?
- 2023湖南湘西州永顺县教育和体育局下属城区学校(事业单位)选调教师拟聘用人员公告
- 8月29日晶升股份涨15.66%,嘉实研究精选混合基金持有该股
- 划拨目录2022 划拨目录
- 踔厉奋发启新程 笃行不怠向未来——宣州区教体局部署2023年秋季开学暨校园安全工作
- 8月29日机器人概念板块涨幅达5%
- 招商证券国际:维持东方甄选“增持”评级 目标价调升至59港元
- 直径6厘米小球能量竟比1吨煤多 具体是什么情况!
- 特朗普涉嫌干预2020年大选案将于明年3月4日开庭审理
- 中报速递|云南城投上半年营业收入约8亿元
- 雷锋精神
- 2023南通新一代信息技术博览会将于8月31日—9月1日召开
- 2023郑州9月公交地铁优惠券领取后在哪查看
- 秒脱裤作用(秒脱裤)
- 航材股份:2023年半年度净利润约2.96亿元 同比增加30.33%
- 哺乳期不能吃的哪些食物_哺乳期不可以吃的食物有哪些
- 地暖开关怎么开图解暖温控器(地暖开关怎么开图解)
- 羊水栓塞有多危险?产妇羊水栓塞输血超6万毫升被救
- 多项政策利好发布!我国股市多板块开盘上涨
- 重磅!财政部、税务总局:减半征收证券交易印花税
- 中文歌名(中文歌词网)
- 韩国再现治安事件 男子持凶器与警方对峙后被捕
- 最的部首和音节(最的部首)
- 佛歌《佛不渡我我自渡》制作人:朱义伟,保境禅寺 滕伟国
- 业界:挖掘盐碱地资源潜力 做好特色农业大文章
- 受《星空》临近发售影响,Xbox Series X 主机美亚销量增幅超 1000%
- 她是ins上的时装模特!美丽的外观和不同的设计太微妙了!
- 中超:沧州雄狮不敌北京国安
- 电影《巨齿鲨2》国内票房破8亿, 用时16天
- 请问公司法中控股股东是什么意思?
- 什么叫复曲线 什么是复曲线
- 广州南站:地标型项目或加速区域价值兑现
- 读懂深圳“春天的故事”的创新内涵
- 收藏!2023年注册会计师考试涉及考点总结&考情分析汇总
- 百世一联单号怎么查询单号(百世一联单快递单号查询)
- 拉维奇晒照纪念阿根廷北京奥运夺冠15周年:不可思议的团队!
- 朗诵有什么好处感想(朗诵有什么好处)
- 乘坐百龙天梯,感受世界奇迹
- 美国总统拜登批准科罗拉多州重大灾难声明
- 阴阳师×泡泡玛特联动活动开启 匣中少女全新皮肤上线
- 天海防务:拟定增募资不超7.9亿元
- 中评关注:美商务部长雷蒙多访华会有成果?
- 德石股份:8月24日公司高管李战军、王海斌减持公司股份合计4.5万股
- 娄底市家园慈善协会关爱困难学子研学活动走进涟钢
精彩推荐
-
国乒斩获4冠!孙颖莎3:1淘汰女单卫冕冠军,赛后高情商称赞对手2023-09-09
-
张家港经开区(杨舍镇):城西街道这场微演讲超“燃”!2023-09-09
-
杜蕾斯新晋女模身材照曝光,我怎么又一次沦陷了...2023-09-09
-
李大锦(对于李大锦简单介绍)2023-09-09
-
国家图书馆上线10万册电子书 “中华古籍资源库”上新2023-09-09
-
追踪2023重点项目 Ta们取得新进展2023-09-09
-
辛苦了!大熊猫园润又生宝宝啦2023-09-08
-
取消限购!南京打响核心城市全面放松“第一枪”2023-09-08
-
宝龙地产前8个月合约销售额约217亿元2023-09-08
-
房贷利息调整最新消息!主要有这4点2023-09-08
-
兰考县政府投资工程项目联合审核会召开2023-09-08
-
10位外籍友人获首届兰花奖 毛宁:他们是促进理解互信、交流合作的友谊使者2023-09-08
-
利兹建筑学院庆祝首届大学中心毕业生2023-09-08
-
A股收评:三大指数小幅调整 两市成交金额不足7000亿2023-09-08
-
驾驶者至 驾驭者致远 路特斯首款纯电超跑GT Emeya全球首秀2023-09-08
-
重拳再出击!1207名缅北涉我国电诈犯罪嫌疑人移交我方2023-09-08
-
驻印度尼西亚中资企业圆桌会召开2023-09-08
-
李彦宏、马斯克、黄仁勋、奥特曼等获评《时代》周刊全球AI领袖2023-09-08
-
鞍山专项治理经营主体严重违法失信行为2023-09-01
-
ASML:已向荷兰政府申请许可证获批,在今年内仍可向中国出口部分高端浸润式光刻系统2023-09-01
-
南方公益丨超强台风“苏拉”将至,暴雨天这样安全出行2023-09-01
-
新飞飞攻略(新飞飞任务怎么会做没了)2023-09-01
-
广西自贸试验区发布四周年“成绩单” 累计外贸进出口额8580亿元2023-09-01
-
莫名其妙的爱情(关于莫名其妙的爱情简述)2023-08-31
-
7月,江西这两个指标优秀!2023-08-31
-
俄突遭高致病性H5N1禽流感袭击2023-08-31
-
中核国际(02302)发布中期业绩 股东应占溢利833万港元 同比减少53.92%2023-08-31
-
打卡“多彩龙江”|打破国外垄断超高纯金属材料“列队”亮相2023-08-31
-
富淼科技接待东吴证券调研2023-08-31
-
佛燃能源:老旧住宅加装管道天然气工作将给居民销气量、延伸业务等各项业务带来更多增长动能2023-08-31
-
亲吻祖国歌词王丽达 亲吻祖国歌词2023-08-31
-
上好“开学第一课” 争做“小小消防员”2023-08-31
-
分数乘整数的意义(分数乘整数的意义)2023-08-31
-
上海中医药大学迎新生:送上打开中医药文化宝库的“钥匙”2023-08-31
-
苹果手机怎么把图片转换成文字表格 苹果手机怎么把图片转换成文字2023-08-31
-
“找遍全球,只有这里满足实验需求”2023-08-31
-
aeroplane前面用a还是an(aeroplane)2023-08-31
-
2023年国家乡村振兴示范县创建名单公示,方正县拟入选2023-08-31
-
恒宝股份MACD金叉,持有1日上涨概率较大,技术面值得关注!2023-08-30
-
巨人网络:首次中期分红《原始征途-正式版》计划Q4推出|财报解读2023-08-30
-
南苏丹小组赛1胜2负 若想出线需要中国队赢球且分差小于36分2023-08-30
-
V观财报|开创国际:董事长谢峰辞职2023-08-30
-
特戊酰氯商品报价动态(2023-08-30)2023-08-30
-
近期内,月老助力,缘分和桃花追求完美,厮磨共余生的四大生肖!2023-08-30
-
武汉三镇或再做出无奈之举,将遭亚足联重罚,足协面临巨大压力2023-08-30
-
技术指标粘合线金叉2023-08-30
-
禹州市开展测绘法暨国家版图意识宣传活动2023-08-30
-
合锻智能:8月29日融资买入783.77万元,融资融券余额1.09亿元2023-08-30
-
华西证券:融资净偿还1900.5万元,融资余额7.96亿元(08-29)2023-08-30
-
迈瑞医疗上半年净利增长两成 研发继续保持高投入2023-08-30
-
洛阳一女大学生因军训照走红,多家公司求签遭拒,看到正脸网友不淡定了2023-08-30
-
王毅会见阿拉伯议会议长欧舒米2023-08-29
-
中国核建股东户数下降2.07%,户均持股24.78万元2023-08-29
-
深圳“爱心福彩·常回家看看”公益活动开始报名2023-08-29
-
20万以下的车哪个好?性能、安全、豪华、环保,你更看重哪个?2023-08-29
-
2023湖南湘西州永顺县教育和体育局下属城区学校(事业单位)选调教师拟聘用人员公告2023-08-29
-
8月29日晶升股份涨15.66%,嘉实研究精选混合基金持有该股2023-08-29
-
划拨目录2022 划拨目录2023-08-29
-
踔厉奋发启新程 笃行不怠向未来——宣州区教体局部署2023年秋季开学暨校园安全工作2023-08-29
-
8月29日机器人概念板块涨幅达5%2023-08-29
-
招商证券国际:维持东方甄选“增持”评级 目标价调升至59港元2023-08-29
-
直径6厘米小球能量竟比1吨煤多 具体是什么情况!2023-08-29
-
特朗普涉嫌干预2020年大选案将于明年3月4日开庭审理2023-08-29
-
中报速递|云南城投上半年营业收入约8亿元2023-08-29
-
雷锋精神2023-08-29
-
2023南通新一代信息技术博览会将于8月31日—9月1日召开2023-08-28
-
2023郑州9月公交地铁优惠券领取后在哪查看2023-08-28
-
秒脱裤作用(秒脱裤)2023-08-28
-
航材股份:2023年半年度净利润约2.96亿元 同比增加30.33%2023-08-28
-
哺乳期不能吃的哪些食物_哺乳期不可以吃的食物有哪些2023-08-28
-
地暖开关怎么开图解暖温控器(地暖开关怎么开图解)2023-08-28
-
羊水栓塞有多危险?产妇羊水栓塞输血超6万毫升被救2023-08-28
-
多项政策利好发布!我国股市多板块开盘上涨2023-08-28
-
重磅!财政部、税务总局:减半征收证券交易印花税2023-08-28
-
中文歌名(中文歌词网)2023-08-28
-
韩国再现治安事件 男子持凶器与警方对峙后被捕2023-08-28
-
最的部首和音节(最的部首)2023-08-27
-
佛歌《佛不渡我我自渡》制作人:朱义伟,保境禅寺 滕伟国2023-08-27
-
业界:挖掘盐碱地资源潜力 做好特色农业大文章2023-08-27
-
受《星空》临近发售影响,Xbox Series X 主机美亚销量增幅超 1000%2023-08-27
-
她是ins上的时装模特!美丽的外观和不同的设计太微妙了!2023-08-27
-
中超:沧州雄狮不敌北京国安2023-08-27
-
电影《巨齿鲨2》国内票房破8亿, 用时16天2023-08-27
-
请问公司法中控股股东是什么意思?2023-08-27
-
什么叫复曲线 什么是复曲线2023-08-27
-
广州南站:地标型项目或加速区域价值兑现2023-08-26
-
读懂深圳“春天的故事”的创新内涵2023-08-26
-
收藏!2023年注册会计师考试涉及考点总结&考情分析汇总2023-08-26
-
百世一联单号怎么查询单号(百世一联单快递单号查询)2023-08-26
-
拉维奇晒照纪念阿根廷北京奥运夺冠15周年:不可思议的团队!2023-08-26
-
朗诵有什么好处感想(朗诵有什么好处)2023-08-26
-
乘坐百龙天梯,感受世界奇迹2023-08-26
-
美国总统拜登批准科罗拉多州重大灾难声明2023-08-26
-
阴阳师×泡泡玛特联动活动开启 匣中少女全新皮肤上线2023-08-26
-
天海防务:拟定增募资不超7.9亿元2023-08-26
-
中评关注:美商务部长雷蒙多访华会有成果?2023-08-26
-
德石股份:8月24日公司高管李战军、王海斌减持公司股份合计4.5万股2023-08-25
-
娄底市家园慈善协会关爱困难学子研学活动走进涟钢2023-08-25