每日快播:GO 1.20 新功能:多重错误包装

2022-12-27 14:20:22

预计将于 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

标签:

上一篇 :

下一篇 :

每日快播:GO 1.20 新功能:多重错误包装

预计将于2023年2月发布的Go1 20有一个小的变化,对于那些大量使用错误包装的应用程序来说,可能会有效...

12-27 14:20:22

德赛电池(000049)12月26日主力资金净买入952.48万元_今日快看

截至2022年12月26日收盘,德赛电池(000049)报收于45 29元,上涨5 89%,换手率2 26%,成交量6 75万手,成交额3 01亿元。

12-27 08:53:33

永泰能源:拟参与投资设立德泰储能装备公司 全球速读

2022年12月26日,永泰能源(600157 SH)发布了公告,为进一步落实公司向储能行业转型发展规划,将公司...

12-26 20:08:01

传阿尔及利亚将2023-2025年原油参考价定为60美元/桶-天天热文

智通财经APP获悉,据报道,欧佩克+成员国阿尔及利亚将2023-2025年原油市场价格定在70美元 桶,参考价格...

12-26 15:08:49

ST三盛董秘回复:公司年报初步预约时间2023年4月下旬 当前动态

ST三盛(300282)12月26日在投资者关系平台上答复了投资者关心的问题。

12-26 10:12:08

基围虾煮多久才能吃 基围虾介绍

1、煮虾用不了多久。它们可以在五分钟内煮熟。基围虾的壳其实比较薄,所以买来的基围虾,去掉头上的苦鳃...

12-25 18:16:28

2022广州国际时尚产业大会暨广州时尚消费节开幕|当前观点

12月23日晚,为期5天的2022广州国际时尚产业大会暨广州时尚消费节在广州体育中心南广场正式启动,首个系...

12-24 23:43:06

年内证券监管部门开出263张罚单“剑指”中介机构 券商、会计师事务所成被打击重点

年内证券监管部门开出263张罚单“剑指”中介机构券商、会计师事务所成被打击重点2022年12月24日07:29证...

12-24 07:34:26

东鹏控股: 独立董事对第四届董事会第二十次会议相关事项的独立意见

广东东鹏控股股份有限公司独立董事对第四届董事会第二十次会议相关事项的              ...

12-23 17:39:59

世界速读:在京东网贷不还会上征信吗?

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

12-23 12:29:42

多学科联手“拆弹” 保住患者“孤立肾”-世界观天下

2017年,江苏连云港的吴先生(化名)在单位体检中发现左侧肾脏长了一枚肿瘤,并在当地医院接受了腹腔镜...

12-23 07:25:15

中证协召开2022年第四季度证券基金行业首席经济学家例会

证券时报网讯,据中证协发布消息,12月20日,中国证券业协会召开2022年四季度证券基金行业首席经济学家...

12-22 17:51:41

热点评!九州期货日报:市场现实需求担忧与政策预期并存

九州期货日报:市场现实需求担忧与政策预期并存

12-22 12:00:42

鄂州赠与合同纠纷律师费用怎么算_每日看点

(一)不涉及财产关系的:2000元-30000元 件。上下浮动幅度:20%但收费额不足2000元的按2000元收取。(二)...

12-22 04:14:22

观察:丽臣实业董秘回复:公司洗涤用品采取经销与直销相结合的营销模式,凭借自身本土品牌和营销优势

丽臣实业(001218)12月21日在投资者关系平台上答复了投资者关心的问题。投资者:贵公司的产品是否有销售...

12-21 16:33:08

【全球独家】平安惠普网贷逾期14年还不起征信会怎么样

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

12-21 10:28:47

广东省第八届风筝锦标赛暨阳春市第三届乡村旅游节闭幕-世界时讯

12月11日,2022广东省第八届风筝锦标赛暨阳春市第三届乡村旅游节圆满落下帷幕。广东省社会体育和训练竞...

12-20 23:58:43

葫芦娃:公司没有生产熊去氧胆酸-快资讯

葫芦娃(605199)12月16日在投资者关系平台上答复了投资者关心的问题。

12-20 15:24:54

鲁泰A:当前由于多重因素导致终端需求不足,行业开工不满为普遍情况 全球今头条

鲁泰A(000726)12月20日在投资者关系平台上答复了投资者关心的问题。投资者:请介绍一下公司的针织面料...

12-20 10:26:18

天天速读:国资委:推动中央企业经济运行实现质的有效提升和量的合理增长

新京报贝壳财经讯12月19日,国资委党委召开扩大会议。会议强调,要牢牢把握高质量发展这个首要任务,切...

12-19 20:35:45

环球关注:12月19日上声电子涨6.89%,华夏先进制造龙头混合A基金重仓该股

12月19日上声电子(688533)涨6 89%,收盘报57 99元,换手率8 52%,成交量3 31万手,成交额1 95亿...

12-19 15:12:17

环球焦点!5 年的前端成长计划 - 仅剩 300 名额 - 打破职业发展壁垒

早早聊5年天使票预售倒计时,还剩300名额~这次我们拿出了最大的诚意,对大会服务做了全面升级。天使年...

12-19 09:18:58

潢川县:政企携手助力农民蔬菜销售-环球关注

蔬菜供销,一头连着居民的餐桌,一头连着菜农的收入。为拓宽农民农产品销路,切实解决好农民急难愁盼的...

12-18 23:41:01

工伤九级劳动仲裁在哪里请求

工伤认定办法》第五条提出工伤认定申请应当填写《工伤认定申请表》,并提交下列材料:(一)劳动合同文...

12-18 09:59:10

最新资讯:广州一对夫妻确诊 活动范围广

(抗击新冠肺炎)广州一对夫妻确诊活动范围广中新社广州8月24日电(王华李雨霞)广州市卫生健康委员会24日通...

12-17 12:29:08

全球快看点丨“满场又加场!”《阿凡达2》今日首映影院又“热闹”了

财联社12月16日讯(记者崔铭)“今天(影院)来这么多人也不意外,其实前两天就开始忙了,之前预售的场...

12-16 21:08:06

看热讯:北京药企马力全开 持续加大退热解毒类药品供应

央视网消息:近期,北京地区的退热类药品一度出现脱销、缺货情况,为了最大限度满足市民购药需求,医药...

12-16 15:06:45

焦点速讯:茅台原浆酒53度价格表 「茅台原浆一号53°价格」

茅台镇的工厂或者其他酒厂生产的低端产品,有老酱香和葵花标志的,应该都是纯原浆酒原浆。52度,市场零...

12-16 08:47:11

睢县:大力实施道路硬化、美化、亮化工程 提升城区建设品质

今年以来,睢县以文明城市创建为统领,以人居环境整治为抓手,大力实施道路硬化、美化、亮化等基础设施...

12-15 19:46:50

环球信息:小提琴品牌中国排名 「小提琴十大名牌排名」

我女朋友用的是lark!孩子还小,小提琴哪个牌子好,而且都是纯手工的,但是我觉得你还是不懂概念。上海...

12-15 14:52:53

世界聚焦:违反商业保密协议怎样写

我国特有的商品生产配方,工艺技术诀窍及传统工艺——包括名特商品加工技术和传统制造关键技术,经济价...

12-15 08:34:46

美瑞新材(300848.SZ):董事任光雷完成减持0.3%股份

格隆汇12月14日丨美瑞新材公布,2022年12月14日,公司收到董事任光雷出具的《关于股份减持计划实施完毕...

12-14 18:30:45

国联股份:12月3日进行路演,包括知名机构易鑫安资管,千合资本的多家机构参与|每日信息

2022年12月13日国联股份(603613)发布公告称公司于2022年12月3日进行路演,汇添富基金、申万菱信、华泰...

12-14 14:22:24

合同继续履行违约金与合同期限无关吗 环球要闻

合同继续履行违约金是可以继续主张的,这种情况是合理的。当事人可以约定一方违约时应当根据违约情况向...

12-14 06:16:10

凯盛新材董秘回复:公司1000吨/年PEKK目前处于试生产阶段,已经与航空航天、特种型材等领域客户建立合作

凯盛新材(301069)12月13日在投资者关系平台上答复了投资者关心的问题。

12-13 15:57:09

每日观点:港股异动 | 歌礼制药-B(01672)高开近15% 新冠口服RdRp抑制剂ASC10取得积极I期临床结果

智通财经APP获悉,歌礼制药-B早盘高开近15%,截至发稿,涨14 8%,报4 11港元,成交额165 63万港元。...

12-13 10:31:30

环球要闻:庄园牧场: 兰州庄园牧场股份有限公司关于持股5%以上股东减持计划的进展公告

证券代码:002910            证券简称:庄园牧场           公告编号:2022-06...

12-12 19:31:34

15位掌舵人任期低于1年 部分机构高管任期短期化引关注

15位掌舵人任期低于1年部分机构高管任期短期化引关注2022年12月12日14:41中国经济网来源:中国基金报近...

12-12 14:33:11

江西省煤炭储备中心抢运电煤正忙 确保冬季供电 每日信息

图为江西省煤炭储备中心内,一列货车正在装载电煤。 胡国林 摄图

12-10 09:00:27

新冠病毒防治板块12月8日涨0.08%,海辰药业领涨,主力资金净流出40.24亿元_天天热资讯

12月8日新冠病毒防治板块较上一交易日上涨0 08%,海辰药业领涨。当日上证指数报收于3197 35,下跌0 0...

12-09 05:06:46

中国科学院学部:停止方岱宁部分院士权利 全球微速讯

中国科学院学部12月7日发布情况通报,近期,北京理工大学方岱宁教授在线参加学术会议的相关视频引发舆论...

12-07 20:21:36

天天讯息:埃及商人亨利:在石狮感受中国速度

埃及商人亨利:在石狮感受中国速度---2015年,埃及商人亨利·索拜·马卡里·吉尔吉斯·哈那第一次来到中...

12-06 17:56:32

百心安-B(2185.HK)涨5.97%报71港元 总市值173亿港元

百心安-B(2185 HK)涨5 97%,报71港元,总市值173亿港元。百心安-B5日发布2022年中期业绩,其他收入及...

08-08 20:27:18

平台民宿预订量已达到6月全月的60% 暑期民宿预订量正在迅速起量

中小学陆续放暑假,家长们早已为小神兽们订制好了研学游、户外游。途家民宿数据显示,7月首周(7 1-7 7...

07-09 23:18:14

深圳将实施重点行业领域降碳行动 促进城市绿色低碳发展

今年深圳市政府工作报告提出,2022年,深圳将出台碳达峰实施方案,实施重点行业领域降碳行动,打造一批...

05-21 19:47:13

种竹子还是金丝楠 什么样的林子可以称为“碳中和林”?

林场员工在巡视林木生长情况。今年,各地在义务植树节期间,纷纷打出碳中和林概念。那么,什么样的林子...

03-18 12:41:59

用植物的成长过程 诉说环境保护真谛

春季是万象更新的季节,更是播种的季节。3月14日, 在金陵汇文小学的操场上,五(2)班的同学们正开展着...

03-18 12:41:59

一名本土确诊病例系厦门大学教职工 校方已排查93人均阴性

  中新网11月26日电 据厦门大学微信公众号消息,11月25日18:00,上海市召开新冠肺炎疫情防控新闻发布...

11-26 14:15:17

江西本轮疫情新冠肺炎住院确诊病例“清零”

  (抗击新冠肺炎) 江西本轮疫情新冠肺炎住院确诊病例“清零”  中新网南昌11月26日电 (记者 吴鹏...

11-26 14:15:17

江苏徐州:封控区隔离人员1304人核酸检测均为阴性

  中新网11月26日电 据“徐州发布”微博消息,江苏省徐州市疫情防控应急指挥部发布疫情防控工作进展...

11-26 14:15:16

德赛电池(000049)12月26日主力资金净买入952.48万元_今日快看
永泰能源:拟参与投资设立德泰储能装备公司 全球速读
传阿尔及利亚将2023-2025年原油参考价定为60美元/桶-天天热文
ST三盛董秘回复:公司年报初步预约时间2023年4月下旬 当前动态
基围虾煮多久才能吃 基围虾介绍
2022广州国际时尚产业大会暨广州时尚消费节开幕|当前观点
年内证券监管部门开出263张罚单“剑指”中介机构 券商、会计师事务所成被打击重点
东鹏控股: 独立董事对第四届董事会第二十次会议相关事项的独立意见
世界速读:在京东网贷不还会上征信吗?
多学科联手“拆弹” 保住患者“孤立肾”-世界观天下
中证协召开2022年第四季度证券基金行业首席经济学家例会
热点评!九州期货日报:市场现实需求担忧与政策预期并存
鄂州赠与合同纠纷律师费用怎么算_每日看点
观察:丽臣实业董秘回复:公司洗涤用品采取经销与直销相结合的营销模式,凭借自身本土品牌和营销优势
【全球独家】平安惠普网贷逾期14年还不起征信会怎么样
广东省第八届风筝锦标赛暨阳春市第三届乡村旅游节闭幕-世界时讯
葫芦娃:公司没有生产熊去氧胆酸-快资讯
鲁泰A:当前由于多重因素导致终端需求不足,行业开工不满为普遍情况 全球今头条
天天速读:国资委:推动中央企业经济运行实现质的有效提升和量的合理增长
环球关注:12月19日上声电子涨6.89%,华夏先进制造龙头混合A基金重仓该股
环球焦点!5 年的前端成长计划 - 仅剩 300 名额 - 打破职业发展壁垒
潢川县:政企携手助力农民蔬菜销售-环球关注
工伤九级劳动仲裁在哪里请求
最新资讯:广州一对夫妻确诊 活动范围广
全球快看点丨“满场又加场!”《阿凡达2》今日首映影院又“热闹”了
看热讯:北京药企马力全开 持续加大退热解毒类药品供应
焦点速讯:茅台原浆酒53度价格表 「茅台原浆一号53°价格」
睢县:大力实施道路硬化、美化、亮化工程 提升城区建设品质
环球信息:小提琴品牌中国排名 「小提琴十大名牌排名」
世界聚焦:违反商业保密协议怎样写
美瑞新材(300848.SZ):董事任光雷完成减持0.3%股份
国联股份:12月3日进行路演,包括知名机构易鑫安资管,千合资本的多家机构参与|每日信息
合同继续履行违约金与合同期限无关吗 环球要闻
凯盛新材董秘回复:公司1000吨/年PEKK目前处于试生产阶段,已经与航空航天、特种型材等领域客户建立合作
每日观点:港股异动 | 歌礼制药-B(01672)高开近15% 新冠口服RdRp抑制剂ASC10取得积极I期临床结果
环球要闻:庄园牧场: 兰州庄园牧场股份有限公司关于持股5%以上股东减持计划的进展公告
15位掌舵人任期低于1年 部分机构高管任期短期化引关注
江西省煤炭储备中心抢运电煤正忙 确保冬季供电 每日信息
新冠病毒防治板块12月8日涨0.08%,海辰药业领涨,主力资金净流出40.24亿元_天天热资讯
中国科学院学部:停止方岱宁部分院士权利 全球微速讯
天天讯息:埃及商人亨利:在石狮感受中国速度
百心安-B(2185.HK)涨5.97%报71港元 总市值173亿港元
平台民宿预订量已达到6月全月的60% 暑期民宿预订量正在迅速起量
深圳将实施重点行业领域降碳行动 促进城市绿色低碳发展
种竹子还是金丝楠 什么样的林子可以称为“碳中和林”?
用植物的成长过程 诉说环境保护真谛
一名本土确诊病例系厦门大学教职工 校方已排查93人均阴性
江西本轮疫情新冠肺炎住院确诊病例“清零”
江苏徐州:封控区隔离人员1304人核酸检测均为阴性
上海逾5万名筛查对象核酸检测阴性
X 广告
行业动态
X 广告

Copyright ©  2015-2022 华中植物网版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com