uber_go_guide解析(二)
前言
接上回
正文
错误消息
Go中声明错误有几种方式
- errors.New() 简单的声明静态字符串信息的错误
- fmt.Errorf 可以格式化插入信息的错误
- 自己实现 Error() 方法
- 使用errors.Wrap
在使用错误时,需要根据使用场景来判断哪种是适合的 - 如果只需要简单的静态错误信息, 不需要额外的一些定制的错误信息, 只需要使用 errors.New() 即可
- 需要错误的上下文, 或者加入些时间等动态信息, 使用 fmt.Errorf 即可
- 如果客户端需要检测这个错误, 可以自己实现一个 Error() 方法,当然 errors.New() 也可以
示例:
将静态错误给客户端检测

将动态错误给客户端检测

建议如果错误提供给客户端,应当再定义一个检查是否是该错误的函数,而不是由客户端手动检测

错误包装
在包装错误时,要加上错误的上下文来增加可读性
包装错误时,注意不要添加多余的内容,比如

但是注意,如果此错误需要和日志一起返回给客户端,则需要注意加上 filed 或者 err 来与普通日志进行区分
处理类型断言
在使用类型断言时,应当接收 ok 进行判断,如果不接受 ok 会引发panic

不要引发Panic
一定要注意,在生产环境中运行的代码一定不要引发Panic,你可以返回err来让调用者安全的解决问题
但是在程序的初始化过程中出现问题则可以引发Panic来停止程序的执行
即使在编写test测试时,也不要直接写 panic 而是 t.Fatal 或者 t.FailNow
使用 go.uber.org/atomic
软广?
避免全局可变变量
一般的在全局变量初始化成功后不要修改他,可以创建局部变量代替
错误示范

正确的

避免在公共结构中嵌入类型
尽量少的使用继承
推荐用法

性能
优先使用 strconv 而不是 fmt
我们将 int 转换成 str 时, 可以使用 fmt.Sprint() 也可使用 strconv.Itoa()
但是实际测试发现 strconv 效率要比 fmt 高不少
所以在转换时应使用 strconv

避免字符串到字节的转换
不要总是将字符串转换成字节,如果目的是使用字节应当在建立时就指定字节

尽量在初始化map时指定map的容量
尽可能的在make map时指定map的大小,这会减少未来的空间分配

uber_go_guide解析(二)的更多相关文章
- C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码
最近做项目需要解析二维码图片,找了一大圈,发现没有人去整理下开源的几个库案例,花了点时间 做了zxing,zbar和thoughtworkqrcode解析二维码案例,希望大家有帮助. zxing是谷歌 ...
- Java生成与解析二维码
1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...
- java 生成和解析二维码
public class QRCode { /** * 解析二维码(QRCode) * @param imgPath * @return */ public static String decoder ...
- java代码生成二维码以及解析二维码
package com.test; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedI ...
- asp.net C#生成和解析二维码代码
类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...
- Fixflow引擎解析(二)(模型) - BPMN2.0读写
Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...
- java二维码之利用谷歌的zxing生成二维码,解析二维码
生成二维码 @RequestMapping("/123") public void test(HttpServletRequest request,HttpServletRespo ...
- ZXing 生成、解析二维码图片的小示例
概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...
- Java生成、解析二维码
今天遇到需求,使用Java生成二维码图片,网搜之后,大神们早就做过,个人总结一下. 目标:借助Google提供的ZXing Core工具包,使用Java语言实现二维码的生成和解析. 步骤如下: 1.m ...
随机推荐
- Python(三) PIL, Image生成验证图片
Python(三) PIL, Image生成验证图片 安装好PIL,开始使用. 在PyCharm中新建一个文件:PIL_Test1.py 1 # PIL 应用练习 2 # 3 # import PIL ...
- Android FART脱壳机流程分析
本文首发于安全客 链接:https://www.anquanke.com/post/id/219094 0x1 前言 在Android平台上,程序员编写的Java代码最终将被编译成字节码在Androi ...
- mysql 迁移数据库到 oracle (sql注意问题)
http://ykdn2010.iteye.com/blog/1511349 一. 项目已用到 oracle 函数的转换 1. Oracle 中的 TO_DATE (),TO_CHAR () 示例: ...
- Linux 开机启动程序的顺序
1.加载BISO的硬件信息,并取得第一个开机代号 2.读取第一个开机装置的mbr的boot loader的信息 3.加载kernel操作系统核心信息,开始解压缩,并驱动所有硬件装置 4.kernel执 ...
- easyui form提交时验证必填,打开时不显示必填提示
给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...
- Bug java 安全证书
在一个改修项目里,安全性方面总是出一个bug,错误信息如下: xception in thread "main" javax.crypto.BadPaddingException: ...
- uwsgi 的app变量名称必须为application
from myproject import app as application if __name__ == "__main__": application.run() 否则会提 ...
- web服务器专题:tomcat(三)tomcat-user.xml 配置文件
回顾:web服务器专题:tomcat(二)模块组件与server.xml 配置文件 Tomcat管理模块 安装Tomcat后,访问127.0.0.1/8080可以看到这个首页,上图中的三个按钮即为To ...
- 利用Java Flight Recorder(JFR)诊断timing及内存问题
Java Flight Recorder(JFR), 以下简称JFR,请注意这个只有Oracle JDK 1.7(7u40)或以上版本才有, OpenJDK木有这东西. 启用: Java命令行启动参数 ...
- 百测学习之postman-接口测试
一.postman的请求 1.url与uri的区别 url与uri的区别 http://doc.nnzhp.cn/ http+host(域名)+path路径(uri) 2.g ...