前言

接上回

正文

错误消息

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解析(二)的更多相关文章

  1. C#使用zxing,zbar,thoughtworkQRcode解析二维码,附源代码

    最近做项目需要解析二维码图片,找了一大圈,发现没有人去整理下开源的几个库案例,花了点时间 做了zxing,zbar和thoughtworkqrcode解析二维码案例,希望大家有帮助. zxing是谷歌 ...

  2. Java生成与解析二维码

    1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...

  3. java 生成和解析二维码

    public class QRCode { /** * 解析二维码(QRCode) * @param imgPath * @return */ public static String decoder ...

  4. java代码生成二维码以及解析二维码

    package com.test; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedI ...

  5. asp.net C#生成和解析二维码代码

    类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...

  6. Fixflow引擎解析(二)(模型) - BPMN2.0读写

    Fixflow引擎解析(四)(模型) - 通过EMF扩展BPMN2.0元素 Fixflow引擎解析(三)(模型) - 创建EMF模型来读写XML文件 Fixflow引擎解析(二)(模型) - BPMN ...

  7. java二维码之利用谷歌的zxing生成二维码,解析二维码

    生成二维码 @RequestMapping("/123") public void test(HttpServletRequest request,HttpServletRespo ...

  8. ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...

  9. Java生成、解析二维码

    今天遇到需求,使用Java生成二维码图片,网搜之后,大神们早就做过,个人总结一下. 目标:借助Google提供的ZXing Core工具包,使用Java语言实现二维码的生成和解析. 步骤如下: 1.m ...

随机推荐

  1. CSS全览_选择符+特指+单位+字体

    CSS全览_选择符+特指+单位+字体 目录 CSS全览_选择符+特指+单位+字体 1. CSS样式 2. 选择符 3. 特指度和层叠 4. 值和单位 5. 字体 作者: https://www.cnb ...

  2. Java并发编程的艺术(九)——闭锁、同步屏障和信号量

    闭锁:CountDownLatch 使用场景 当前线程需要等待若干条线程执行完毕后,才能继续执行的情况. 也可以是若干个步骤执行完毕后的情况. 使用方法 初始化闭锁的时候,填入计数值,然后等待其他线程 ...

  3. 3款pdf插件介绍

    1.pdf.js:推荐使用.小窗口可以使用iframe来解决.ie8及以下不支持,但是360的兼容模式ie8下可以在新标签页中打开,在iframe中打不开,ie8中在新标签页也不支持打开.可使用ua- ...

  4. MySQL MHA安装配置

    1.环境规划 192.168.12.131 node01 192.168.12.132 node02 192.168.12.133 node03 2.环境准备 一主两从GTID,略. 3.配置关键程序 ...

  5. Linux shell 获取目录下时间最新的文件的文件名

    ls -lt /dirname/ | grep filename | head -n 1 |awk '{print $9}' 逐条解释: ls -lt /dirname/ 列出此目录下的所有文件并按照 ...

  6. js上 十六、数组-2

    十六.数组-2 #4.3万能法:splice(): #4.3.1.删除功能 ​ 语法:arr.splice(index,num); //num表示删除的长度 ​ 功能:从下标index位置开始,删除n ...

  7. PHP远程代码执行漏洞:CVE-2019-11043

    漏洞详情: Nginx上fastcgi_split_path_info在处理带有 %0a 的请求时,会因为遇到换行符 \n 导致PATH_INFO为空.而php-fpm在处理PATH_INFO为空的情 ...

  8. openstack高可用集群17-openstack集成Ceph准备

    Openstack集成Ceph准备 Openstack环境中,数据存储可分为临时性存储与永久性存储. 临时性存储:主要由本地文件系统提供,并主要用于nova虚拟机的本地系统与临时数据盘,以及存储gla ...

  9. Ubuntu替换清华源或者阿里源

    倒腾pygame包的问题(Ubuntu 19.10),安装好pip后,又要安装一个pygame的包,倒腾了两天两夜,硬是因为网络问题(可能被强大的墙阻挡了),安装不成功,后面在网上找了篇帖子,用清华源 ...

  10. Spring Boot 使用常见问题

    Json格式化时间,时区设置 spring.jackson.time-zone=GMT+8 spring.jackson.date-format=yyyy-MM-dd HH:mm:ss json数据无 ...