go的标准化error处理

这篇具有很好参考价值的文章主要介绍了go的标准化error处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

go的标准化error处理

1、建议这样写错误处理

// 1
func autn() {
	var err error
	if err != nil {
		// handle err
	}
	//do stuff
}

// 2 
func a(r *http.Request) error {
	//err := r.ParseForm()
	//if err != nil {
	//	return err
	//}
	//return nil
	// 我们其实没有必要写这么多的代码,直接返回就可以了
	return r.ParseForm()
	// 这样用也可能造成递归的返回错误直到最上层也是原始的错误

	// 在处理错误的时候我们应该只做一个决定就是:记录日志或返回错误
	// 返回错误的时候尽量以 errors.New("包名:错误原因“) 的形式
}

2、怎么优化代码让其不再堆积

优化前:我们可以看到有4个地方都需要进行错误判断,我们可以想办法将所有的错误处理代码写到别的地方,进行调用即可。

type Header struct {
	Key, Value string
}
type Status struct {
	Code   int
	Reason string
}

func WriteResponse(w io.Writer, status Status, headers []Header, body io.Reader) error {
	_, err := fmt.Fprintf(w, "%d %s\r\n", status.Code, status.Reason)
	if err != nil {
		return err // 1
	}
	for _, h := range headers {
		_, err := fmt.Fprintf(w, "%s:%s\r\n", h.Key, h.Value)
		if err != nil {
			return err // 2
		}
	}
	_, err = fmt.Fprint(w, "\r\n")
	if err != nil {
		return err // 3
	}
	_, err = io.Copy(w, body)
	return err // 4
}

优化后:文章来源地址https://www.toymoban.com/news/detail-852659.html

type errWriter struct {
	w   io.Writer
	err error
}

// 把判断错误的一些细节放到errWriter里面去
func (ew *errWriter) Write(p []byte) (int, error) {
	if ew.err != nil {
		return 0, ew.err
	}
	var n, err = ew.w.Write(p)
	if err != nil {
		ew.err = err
	}
	return n, nil
}

func WriteResponse1(w io.Writer, status Status, headers []Header, body io.Reader) error {
	ew := &errWriter{w: w}
	fmt.Fprintf(ew, "%d %s\r\n", status.Code, status.Reason)
	for _, h := range headers {
		fmt.Fprintf(ew, "%s:%s\r\n", h.Key, h.Value)
	}
	fmt.Fprint(ew, "\r\n")
	io.Copy(ew, body)
	return ew.err
}

到了这里,关于go的标准化error处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解机器学习——数据预处理:归一化 (Normalization)与标准化 (Standardization)

    分类目录:《深入理解机器学习》总目录 归一化 (Normalization)和标准化 (Standardization)都是特征缩放的方法。特征缩放是机器学习预处理数据中最重要的步骤之一,可以加快梯度下降,也可以消除不同量纲之间的差异并提升模型精度。 归一化(Normalization)是将一组数据变

    2024年02月08日
    浏览(36)
  • 标准化体系建设(上):如何建立应用标准化体系和模型?

    今天我专门来讲讲标准化这个工作。可以说这项工作是运维过程中最基础、最重要的,但也是最容易被忽视的一个环节。 我做过多次公开演讲,每次讲到这个环节,通常会有单独的一页PPT,就放四个字,字号加大加粗,重复三遍,这四个字就是“标准先行”,然后演讲过程中

    2024年02月08日
    浏览(35)
  • python实现z-score标准化和0-1标准化

    目录 标准化处理 0-1标准化: z-score标准化: 1、用自带的函数来操作 实现z-score标准化 实现0-1标准化 2、自定义函数实现 实现z-score标准化 实现0-1标准化 对输出结果范围有要求,数据较为稳定的,不存在极端的最大最小值 数据存在异常值和较多的噪音,可以间接通过中心化避

    2024年02月11日
    浏览(31)
  • LA@二次型标准形@标准化问题介绍和合同对角化@二次型可标准化定理

    如果二次型只含有变量的平方项,则称之为 二次型的标准形 或 法式 ,即 f ( y 1 , ⋯   , y n ) f(y_1,cdots,y_n) f ( y 1 ​ , ⋯ , y n ​ ) = ∑ i = 1 n k i y i 2 sum_{i=1}^{n}k_iy_i^2 ∑ i = 1 n ​ k i ​ y i 2 ​ 标准形的矩阵式 f ( y 1 , ⋯   , y n ) = ∑ i n k i y i 2 = ( y 1 , y 2 , ⋯   , y n ) ( k 1 0 ⋯

    2024年02月09日
    浏览(43)
  • 不要再搞混标准化与归一化啦,数据标准化与数据归一化的区别!!

    数据的标准化是将数据按照一定的 数学规则进行转换 ,使得数据满足特定的标准,通常是使数据满足正态分布或标准差为1的标准。 标准化的常见方法包括 最小-最大标准化 和 Z-score标准化 。最小-最大标准化将数据映射到 [0,1 ]的范围内,最小-最大标准化将数据映射到0-1区间

    2024年01月21日
    浏览(41)
  • 数据标准化方法

    今天看到了“指数移动平均窗口标准化”,就研究了一下这是个啥东西,然后又顺便看了一下其他的数据标准化方法,这里顺便记录一下,方便以后查阅。 zscore标准化是一种 基于数据分布的标准化方法 。它的基本思想是 将数据转换为均值为0,标准差为1的分布 ,从而使得数

    2023年04月22日
    浏览(37)
  • GEE:影像标准化

    本文将介绍在Google Earth Engine (GEE)平台上进行影像标准化的公式和代码。 影像标准化是一种预处理方法,用于将不同区域、不同时间、不同传感器拍摄的影像进行比较和分析。在GEE平台上进行影像标准化,可以使用本文代码,本文以EVI为例,将影像进行了标准化处理。 其结

    2023年04月09日
    浏览(53)
  • 用UiPath实现网页抓取——表格数据提取-1-单击选择分类-ISO标准化-01-综合、术语、标准化、文献目录获取

    准备获取目录的链接是 全国标准信息公告服务平台链接: https://std.samr.gov.cn/search/iso?tid=q= 第一步,标注啊类型选择——ISO 第二步,标准化状态选择——现行 第三步,ICS分类选择——01_综合、术语标准化、文献 将数据分别复制到excel文件中,如下图。 由于国际标准分类号在

    2024年02月04日
    浏览(43)
  • python三种数据标准化

    数据变换是数据准备的重要环节,它通过 数据平滑 、 数据聚集 、 数据概化 和 规范化 等方式将数据转换成适用于数据挖掘的形式。常见的变换方法: 1.数据平滑:去除数据中的噪声,将连续数据离散化。这里可以采用分箱、聚类和回归的方式进行数据平滑 2.数据聚集:对

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包