运维八一 运维八一
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)

运维八一

运维,运维!
首页
运维杂记
编程浅尝
周积跬步
专栏
生活
关于
收藏
  • 分类
  • 标签
  • 归档
Source (opens new window)
  • Go

    • 前言

    • Go基础知识

    • Go基本语法

    • 实战项目:简单web服务

    • 基本数据类型

    • 内置运算符

    • 分支和循环

    • 函数 function

    • 结构体 struct

    • 方法 method

    • 实战项目:跟踪函数调用链

    • 接口 interface

    • 并发 concurrency

    • 指针

    • 实战项目:实现轻量级线程池

    • 实战项目:实现TCP服务器

    • go常用包

    • Gin框架

    • go随记

      • import 本地 module
      • 拉取私有module
      • 规划、发布和维护 Go Module注意事项
      • Go 1_18 泛型
      • Go语言中常用的代码优化点
        • Go语言中常用的代码优化点
  • Python

  • Shell

  • Java

  • Vue

  • 前端

  • 编程浅尝
  • Go
  • go随记
lyndon
2022-06-07
目录

Go语言中常用的代码优化点

# Go语言中常用的代码优化点

第一点:使用 pkg/errors 而不是官方 error 库

一个项目中使用错误机制,最核心的需求主要是两点:

  • 附加信息:希望错误出现的时候能附带一些描述性的错误信息,甚至这些信息是可以嵌套的;
  • 附加堆栈:希望错误不仅仅打印出错误信息,也能打印出这个错误的堆栈信息,可以知道出错的具体代码。

在 Go 语言的演进过程中,error 传递的信息太少一直是被诟病的一点。使用官方的 error 库,只能打印一条简单的错误信息,而没有更多的信息辅助快速定位错误。所以,推荐在应用层使用 github.com/pkg/errors 来替换官方的 error 库。因为使用 pkg/errors,不仅能传递出标准库 error 的错误信息,还能传递出抛出 error 的堆栈信息。

第二点:在初始化 slice 的时候尽量补全 cap

在初始化[]int slice 的时候尽量先预估 cap 长度,在 make 中设置 cap 的长度,就是 slice 的大小。

如果在初始化 slice 的时候没有设置 cap ,后期可以使用 growslice 来扩充 slice 容量,每当 slice 容量小于需要使用的 slice 大小,这个函数就会被触发。

它的机制就好比是原先没有定制容量,系统给了一个能装两个鞋子的盒子,但是当装到第三个鞋子的时候,这个盒子就不够了,就要换一个盒子,而换这个盒子,势必还需要将原先的盒子里面的鞋子也拿出来放到新的盒子里面。而 growsslice 的操作是一个比较复杂的操作,它的表现和复杂度会高于最基本的初始化 make 方法。对追求性能的程序来说,应该能避免就尽量避免。

第三点:初始化一个类的时候,如果类的构造参数较多,尽量使用 Option 写法

Option 写法,就是将所有可选的参数作为一个可选方式,一般会设计一个“函数类型”来代表这个 Option,然后配套将所有可选字段设计为一个这个函数类型的具体实现。在具体的使用的时候,使用可变字段的方式来控制有多少个函数类型会被执行。

第四点:巧用大括号控制变量作用域

上次更新: 2022/06/20, 00:40:53
Go 1_18 泛型
编程语言介绍

← Go 1_18 泛型 编程语言介绍→

最近更新
01
ctr和crictl显示镜像不一致
03-13
02
alpine镜像集成常用数据库客户端
03-13
03
create-cluster
02-26
更多文章>
Theme by Vdoing | Copyright © 2015-2024 op81.com
苏ICP备18041258号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式