广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言高效编程的3个技巧总结
  • 407
分享到

Go语言高效编程的3个技巧总结

Go语言编程go 语言高级编程go语言高效编程 2023-01-03 18:01:29 407人浏览 泡泡鱼
摘要

目录不要使用Logrus不要使用encoding/JSON尽可能不要在Goroutine中使用闭包总结不要使用Logrus 这其实和泛型有关。因为Go语言是一门强类型的静态语言,所以

不要使用Logrus

这其实和泛型有关。因为Go语言是一门强类型的静态语言,所以你不可能像nodejs或者PHP那样绕过数据类型。那如果我们还需要使用通用的类型怎么办呢?比如像Loger,或者ORM,因为只有使用了通用的类型,才能编写出通用的代码,不然每个都要写一次。

最终,我们只能用反射。而 Logrus 大量使用反射,这导致大量分配计数。虽然通常不是一个大问题(取决于代码),但性能很重要,尤其是在大规模、高并发项目中。虽然这听起来像是一个非常小的优化,但避免反射很重要。如果你看到一些可以不考虑类型而使用结构的代码,它会使用反射并且会对性能产生影响。

例如,Logrus 并不关心类型,但显然 Go 需要知道(最终)。Logrus 怎么办呢?使用反射来检测类型,这是开销。

log.WithFields(log.Fields{<!--{C}%3C!%2D%2D%20%2D%2D%3E-->
“animal”: myWhatever,
}).Info(“A walrus appears”)

所以我会更喜欢zerolog,当然zap也不错。两者都宣称零分配,这也是我们希望的,因为它们的性能影响最小。

不要使用encoding/json

当我们需要一个功能、函数的时候,很多人都建议使用标准库。但是标准库中的encoding/json模块是个例外。其实也和上面的例子一样,encoding/json使用反射,这会导致性能不高,并且在编写返回 json 响应的 api 、或者微服务时会造成损失。

比如你可以使用 Easyjson,它很简单,也很高效,它是使用代码生成器来创建将结构转换为 json 所需的代码,以最大限度地减少分配。这是一个手动构建步骤,很烦人。有趣的是json-iterator也使用反射,但速度明显更快,我怀疑是黑魔法。

尽可能不要在goroutine中使用闭包

比如,下面这个示例代码:

for i:=0;i<10;i++ {
  go func() {
     fmt.Println(i)
  }()
}

大多数人可能期望这会打印数字 0 到 9,就像将任务委托给 goroutine 时那样。

但是实际结果:根据系统,你将得到一两个数字和许多 10。

为什么会这样?闭包可以访问父作用域,因此可以直接使用变量。尽管更新的 linters 可能会警告你“变量闭包捕获”,但并不会要求你重新声明该变量。

Go 的性能名声很大程度上归功于执行的运行时优化,它尝试“猜测”你想要做什么并优化某些执行路径。在此期间,它“捕获”变量并以理论上最有效的方式将它们传递到需要它们的地方(例如,在完成一些非并发操作以释放某些 CPU 上的分配之后)。这种情况下的结果是循环可能会启动 goroutines,goroutines可能会在很晚之后从父作用域接收到 i 的值。不能保证在多次执行此代码时你会看到哪个,可能是数字10,也可以是其他数字。

如果你出于某种原因确实使用了闭包,一定要传递变量i,就像对待每个函数一样对待闭包。

总结

到此这篇关于Go语言高效编程的3个技巧总结的文章就介绍到这了,更多相关Go语言高效编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: Go语言高效编程的3个技巧总结

本文链接: https://www.lsjlt.com/news/176534.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言高效编程的3个技巧总结
    目录不要使用Logrus不要使用encoding/json尽可能不要在goroutine中使用闭包总结不要使用Logrus 这其实和泛型有关。因为Go语言是一门强类型的静态语言,所以...
    99+
    2023-01-03
    Go语言编程 go 语言高级编程 go语言高效编程
  • 提升编程能力的C语言技巧总结
    目录一、函数指针1.概念2.如何用函数指针调用函数3.函数指针作为某个函数的参数4.函数指针作为函数返回类型5.函数指针数组6.函数指针总结二、回调函数1.什么是回调函数2.为什么要...
    99+
    2022-12-08
    C语言 技巧
  • GO语言编程技巧:如何实现高效的并发算法?
    随着互联网的飞速发展,计算机系统的处理能力已经成倍地提高。为了充分发挥计算机的处理能力,我们需要使用并发算法。而在GO语言中,通过使用goroutine和channel,可以轻松实现高效的并发算法。 本文将介绍如何使用GO语言实现高效的并...
    99+
    2023-11-04
    开发技术 编程算法 并发
  • 学习Go语言编程技巧,快速提高学习效率
    提升学习效率的方法,迅速掌握Go语言编程技巧在当今科技高速发展的时代,学习成为了人们不可或缺的一部分。尤其是在计算机领域,编程语言的繁多让人眼花缭乱。而其中一门备受关注的编程语言就是Go语言。作为一种简洁高效的语言,Go语言不仅有着广泛的应...
    99+
    2023-12-30
    Go语言 编程技巧 学习效率
  • 提高文件操作效率的秘诀:Go语言异步编程技巧
    在日常的开发中,文件操作是不可避免的。无论是读取配置文件,还是处理大量的数据文件,文件操作都是必不可少的一环。然而,对于大型文件或者文件数量较多的情况,单线程的文件操作效率往往会受到限制。那么,如何提高文件操作效率呢?这就需要使用到Go语...
    99+
    2023-09-24
    异步编程 文件 关键字
  • 提高 Go 语言数组加载效率的技巧和异步编程方法。
    提高 Go 语言数组加载效率的技巧和异步编程方法 Go 语言是一种快速、高效、并发的编程语言,它在处理大规模数据时表现出色。然而,当面对大型数组时,Go 语言的效率可能会受到影响。在本文中,我们将探讨一些 使用切片代替数组 在 Go 语...
    99+
    2023-09-26
    数组 load 异步编程
  • 详解R语言的24个高效操作技巧
    目录R语言中的一些特殊技艺1 修改默认提示语言2 查看R所消耗内存大小3 查看某个数据集内存大小4 代码中换行5 边赋值边显示7 查看源代码8 利用函数修改镜像9 显示更多数据10 ...
    99+
    2023-05-18
    R语言24个高效操作 R语言操作技巧
  • Go语言编程的Linux实战技巧:如何提高程序性能?
    Go语言是一种高性能的编程语言,它在Google内部被广泛使用。Go语言的设计目标是提高程序的可读性、可维护性和可靠性,同时保持高性能。但是,即使使用了高性能的编程语言,程序的性能也可能会受到操作系统的限制。本文将介绍一些Linux实战技...
    99+
    2023-10-29
    linux 编程算法 numy
  • GO语言编程技巧:如何利用协程(goroutine)实现高并发编程?
    随着互联网的发展,高并发编程已经成为了一门必修课。GO语言作为一门高效、简洁、并发的编程语言,在这个领域中具有很大的优势。其中,协程(goroutine)是GO语言中最重要的并发编程特性之一。本文将介绍如何利用协程实现高并发编程。 一、什...
    99+
    2023-11-04
    开发技术 编程算法 并发
  • 高效协作:Go语言项目开发团队的经验总结
    高效协作:Go语言项目开发团队的经验总结概述:在当今快节奏且竞争激烈的软件开发行业中,团队的协作效率对于项目的成功至关重要。本文将总结一些Go语言项目开发团队的经验,分享一些提高团队高效协作的方法和实践。引言:Go语言是一种简单、高效、可靠...
    99+
    2023-11-03
    Go语言 项目开发 高效协作
  • GO编程的高效开发技巧:算法与NumPy技术。
    GO编程的高效开发技巧:算法与NumPy技术 GO是一种现代化的编程语言,它的特点是简单易学、高效运行、并发性能优越等。GO编程的开发效率和代码质量在近年来得到了越来越多的认可。本文将介绍GO编程中的高效开发技巧,包括算法和NumPy技术。...
    99+
    2023-08-05
    编程算法 开发技术 numpy
  • Go语言高级编程:同步接口打包技巧大揭秘!
    Go语言是一种高效的编程语言,它具有协程、垃圾回收等特性,在并发编程方面具有很大的优势。在Go语言的并发编程中,同步接口是一个非常重要的概念,它可以帮助我们实现并发安全的程序。本文将介绍同步接口打包技巧,让你的程序更加高效和安全。 一、同...
    99+
    2023-05-31
    同步 接口 打包
  • Go语言在Unix容器中的并发编程技巧
    随着云计算和容器技术的不断发展,Unix容器已经成为一种非常流行的虚拟化技术。在这个背景下,Go语言作为一种高效的并发编程语言,也成为了Unix容器中的一种重要编程语言。本文将介绍,并通过演示代码来帮助读者更好地理解这些技巧。 一、Go语...
    99+
    2023-10-09
    并发 unix 容器
  • 编写高效的Go语言算法:Windows平台下重定向的实现技巧
    Go语言作为一门高效的编程语言,具有出色的性能和简洁的语法,因此在算法和系统编程中被广泛应用。特别是在Windows平台下,重定向是一种常见的技术,可以帮助我们将输出流或者输入流重定向到文件或者其他进程中。在本文中,我们将介绍如何在Wind...
    99+
    2023-08-11
    windows 编程算法 重定向
  • Go语言的存储优化技巧:如何在编程中实现高效的数据存储?
    在软件开发中,数据存储是一个非常重要的环节。数据存储的效率不仅关系到程序的性能,还会直接影响到用户体验。因此,如何在编程中实现高效的数据存储是一个非常关键的问题。本文将介绍一些Go语言的存储优化技巧,帮助你在编程中实现高效的数据存储。 一...
    99+
    2023-10-04
    存储 编程算法 大数据
  • Go语言高级编程技巧:HTTP模块的打包和加载方法!
    Go语言是一门快速发展的编程语言,其强大的并发和高效的运行速度,让它成为了众多开发者的首选语言。在Go语言中,HTTP模块是一个非常常用的模块,因此本文将介绍HTTP模块的打包和加载方法,以帮助开发者更好地使用该模块。 一、HTTP模块的打...
    99+
    2023-10-18
    http 打包 load
  • 编程小白必看!Go语言编程中的算法优化技巧!
    在Go语言编程中,算法的优化对于程序的性能和效率至关重要。本文将介绍一些Go语言编程中的算法优化技巧,帮助编程小白们更好地理解和掌握Go语言编程中的算法优化。 一、使用切片代替数组 在Go语言中,切片是一种动态数组,可以根据需要自动调整大...
    99+
    2023-08-08
    编程算法 bash 响应
  • Go语言编程中的算法优化技巧有哪些?
    随着计算机技术的不断发展,算法优化已成为编程中不可或缺的一部分。在Go语言编程中,算法优化技巧也是非常重要的。本文将介绍Go语言编程中的算法优化技巧。 一、使用切片而非数组 在Go语言中,切片(slice)是一种动态数组,可以根据需要动态...
    99+
    2023-08-02
    编程算法 文件 分布式
  • Go 语言异步编程的索引技巧,你了解吗?
    随着互联网的发展,越来越多的应用程序需要处理大量的并发请求。在这种情况下,异步编程成为了一个非常重要的技术。Go 语言作为一门高效的编程语言,自然也有着非常出色的异步编程能力。本文将介绍 Go 语言异步编程的索引技巧,帮助读者更好地理解和...
    99+
    2023-07-01
    教程 索引 异步编程
  • 掌握 Go 语言:Linux 下的编程技巧和关键字
    Go 语言是一种现代编程语言,它在许多领域都有着广泛的应用。在 Linux 系统中,Go 语言的编程技巧和关键字也非常重要。本文将介绍一些在 Linux 下使用 Go 语言编程的技巧和关键字,帮助您更好地掌握这门语言。 安装 Go 语言...
    99+
    2023-07-10
    教程 linux 关键字
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作