当前位置: 首页 > news >正文

盘点golang中的开发神器

本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star。

在Java中,我们用Junit做单元测试,用JMH做性能基准测试(benchmark),用async-profiler剖析cpu性能,用jstack、jmap、arthas等来排查问题。
作为一名比较新的编程语言,golang的这些工具是否更加好用呢?

单元测试

Java的单元测试需要使用第三方库,一般是Junit,配置起来比较复杂。在使用了golang之后发现golang自带的单元测试真的非常简单。
如果我们有一个cal.go文件,那么其对应的单元测试文件为cal_test.go,其中的方法命名必须为TestXxx,这种按照命名进行单元测试的方式简单有效,也正是通常所说的“约定大于配置”。
来看一个简单的例子:

package unitfunc add(a int, b int) int {return a + b
}func sub(a int, b int) int {return a - b
}
package unitimport ("github.com/stretchr/testify/assert""testing"
)func TestAdd(t *testing.T) {assert.Equal(t, 10, add(5, 5))
}func TestSub(t *testing.T) {assert.Equal(t, 0, sub(5, 5))
}

执行单元测试只需要运行(更多用法参考go help test)

go test --cover cal_test.go cal.go -v

benchmark

和单元测试类似,golang的benchmark也是开箱即用。在cal_test.go基础上增加一个BenchmarkAdd方法

package unitimport ("github.com/stretchr/testify/assert""testing"
)func TestAdd(t *testing.T) {assert.Equal(t, 10, add(5, 5))
}func TestSub(t *testing.T) {assert.Equal(t, 0, sub(5, 5))
}func BenchmarkAdd(b *testing.B) {for i:= 0; i < b.N; i++ {add(5, 5)}
}

执行即可(更多用法参考go help test)

go test -bench=. -cpu=4 -count=3

pprof

pprof是golang自带的可以用来做cpu、内存、锁分析的工具,非常类似java的async-profiler。
pprof的使用非常简单,只需要在代码中引入net/http/pprof包,然后监听一个端口即可。
一个简单的例子如下:

package mainimport ("fmt""log""net/http""time"_ "net/http/pprof"
)func main() {go func() {//example: visit http://127.0.0.1:6060/debug/pprof in browser.err := http.ListenAndServe("0.0.0.0:6060", nil)if err != nil {fmt.Println("failed to start pprof goroutine:", err)}}()http.HandleFunc("/", handler)log.Fatal(http.ListenAndServe("localhost:8000", nil))
}func handler(w http.ResponseWriter, r *http.Request) {time.Sleep(1 * time.Second)eat()time := time.Now().Unix() * 2 + 1000000fmt.Fprintf(w, "URL.Path = %q; time = %d\n", r.URL.Path, time)
}func eat() {loop := 10000000000for i := 0; i < loop; i++ {// do nothing}
}

在命令行中输入

go tool pprof http://127.0.0.1:6060/debug/pprof/profile

同时不停的请求,让pprof能采集到数据,这里我的请求是

curl http://127.0.0.1:8000/hello

等待30秒后,采集结束会显示采集文件的地址

Saved profile in /Users/roshi/pprof/pprof.samples.cpu.003.pb.gz

此时可以使用top等命令直接查看cpu消耗过高的函数,更多命令可以使用help查看。

或者把文件下载下来用可视化的界面来分析,可以使用

go tool pprof -http=":8080" /User/roshi/pprof/pprof.samples.cpu.003.pb.gz

来开启一个可视化的页面,查看,如果报错需要安装graphviz,安装文档在这里可以查找:https://graphviz.gitlab.io/download/

访问 http://localhost:8080/ui/ 可以看到下图,其中面积最大的块表示消耗cpu最多

这里有一篇文章对pprof介绍的很仔细,可以参考:https://blog.wolfogre.com/posts/go-ppof-practice/

dlv

pprof很好用,但有一个缺点是必须事先在代码中开启,如果线上出问题且没有开启pprof,可能就需要类似jstack、jmap、arthas等这类工具来排查。这里推荐一个最近使用过非常好用的golang问题排查利器——dlv,项目地址见

https://github.com/go-delve/delve

它很有用的一个功能是attach,可以attach到正在运行的golang程序,查看goroutine。这点可以很好的排查线上问题。
各个平台的安装在github上写的很清楚,需要说明的是安装dlv的golang版本和要排查进程的golang版本需要保持一致。
先写一个测试程序,起两个goroutine,一个运行,一个阻塞

package mainimport ("fmt""sync"
)func main()  {go count()go wait()wait()
}func count()  {count := 0for {count = count + 1if count % 1000000000 == 0 {fmt.Println("I'm a running routine")}}
}func wait()  {wg := sync.WaitGroup{}wg.Add(1)wg.Wait()
}

运行起来,然后使用dlv进行attach,如下图(具体命令可以attach后使用help查看)

这样很方便地看到了各个goroutine在干啥

写在最后

作为一门比较新的编程语言,golang对现有语言取其精华,自带必要的工具,进一步降低门槛,对新手学习来说非常友好。


关于作者:专注后端的中间件开发,公众号"捉虫大师"作者,关注我,给你最纯粹的技术干货

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-2652.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

力扣刷题:动态规划篇

目录322. 零钱兑换题目介绍题目实现5. 最长回文子串题目介绍题目实现518. 零钱兑换 II题目介绍题目实现53. 最大子序和题目介绍题目实现63. 不同路径 II题目介绍[62. 不同路径](https://leetcode-cn.com/problems/unique-paths/)题目实现70. 爬楼梯题目介绍题目实现72. 编辑距离…...

c++程序设计中虚基类,多继承知识点

一.前言 如上 二.题目 分别声明Teacher(教师)类和Cadre(干部)类&#xff0c;采用多重继承方式由这两个类派 生出新类Teacher_Cadre(教师兼干部&#xff09;类。要求&#xff1a; &#xff08;1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 &#xff08;2&a…...

FFmpeg:avcodec_encode_video()

本文简单分析FFmpeg的avcodec_encode_video2()函数。该函数用于编码一帧视频数据。avcodec_encode_video2()函数的声明位于libavcodec\avcodec.h&#xff0c;如下所示。 /*** Encode a frame of video.** Takes input raw video data from frame and writes the next output p…...

SpringBoot中必须掌握的45个注解

1.SpringBoot/spring SpringBootApplication: 包含Configuration、EnableAutoConfiguration、ComponentScan通常用在主类上&#xff1b; Repository: 用于标注数据访问组件&#xff0c;即DAO组件&#xff1b; Service: 用于标注业务层组件&#xff1b; RestController: …...

侯捷CPP---面向对象(上)

侯捷CPP---面向对象&#xff08;上&#xff09;前言头文件防卫式声明class 分类不带指针的class&#xff08;complex&#xff09;成员变量私有化inline function&#xff08;内联函数&#xff09;构造函数常量成员函数参数传递返回值传递友元函数操作符重载临时对象带指针的cla…...

使用注解开发

1&#xff1b; 2.mapper 2.测试...

苏宁易购启动六一宝宝节,首提“共情消费”

5月26日晚8点&#xff0c;苏宁易购六一宝宝节掰头大会在多个平台播出。六一宝宝节全面启动。 六一宝宝节定位于打破营销套路&#xff0c;打破传统电商促销节奏。它是大促&#xff0c;更是一场成年人释放压力、共情消费的盛典。 掰头大会灵魂辩题 开启宝宝节 六一宝宝节的启…...

设计一个windows应用程序,定义一个Student类,包含学号和姓名两个字段,并定义一个班级类ClassList

设计一个windows应用程序&#xff0c;定义一个Student类&#xff0c;包含学号和姓名两个字段&#xff0c;并定义一个班级类ClassList&#xff0c;该类包含一个Student集合&#xff0c;使用索引器访问该集合。 &#xff08;1&#xff09;创建一个Windows应用程序Myproject6_1。 …...

python笔记19年8月23日

-------------py打包exe教程------------ 准备好需要转换的py文件和一张用于做图标.ico的照片 将他们存放于同一个文件夹中,文件的路径全部为英文路径 1.利用cmd窗口安装pyinstaller插件 指令 :pip install pyinstaller 2.使用cd指令到py文件夹 3.执行命令 pyinstaller -F -i X…...

系统集成模拟3-55分

1、合同法律关系是指由合同法律法规调整的在民事流转过程中形成的&#xff08;权利义务关系&#xff09; 2、当已经采取了多种沟通方式还未能与用户达成一致时&#xff0c;应考虑沟通升级原则-双方高层沟通 3、数据域安全包括&#xff1a;行级数据域安全&#xff0c;数据域安全…...

Centos7 配置DHCP

实验内容及步骤 1、实验背景 某企业计划构建一台 DHCP服务器来解决IP地址动态分配的问题&#xff0c;要求能够分配 IP地址以及网关、DNS等其它网络属性信息。同时要求DHCP服务器为DNS、WEB、Samba服务器分配固定IP 地址。 2、网络拓扑 略. 3、实验环境 假设企业DHCP服务器…...

JVM常见配置汇总

堆设置 -Xms:初始堆大小-Xmx:最大堆大小-XX:NewSizen:设置年轻代大小-XX:NewRation:设置年轻代和年老代的比值。如:为3&#xff0c;表示年轻代与年老代比值为1&#xff1a;3&#xff0c;年轻代占整个年轻代年老代和的1/4-XX:SurvivorRation:年轻代中Eden区与两个Survivor区的比…...

从类,API,框架三个层面学习如何设计可复用软件实体的具体技术学习心得

从类&#xff0c;API&#xff0c;框架三个层面学习如何设计可复用软件实体的具体技术学习心得软件复用概述软件复用概念软件复用的软件支持三方面讲述软件复用类代码复用设计的复用分析的复用测试信息的复用Liskov替换原则 ——LSPAPI框架软件复用概述 软件复用概念 软件复用(…...

惠普(HP) Officejet Pro 8610商用彩色喷墨一体机

专业彩色打印件的单页成本比激光打印机低 50%,从而在日常打印中节省更多打印成本。无论您身在何处,均可通过任意移动设备进行打印。 借助惠普“云打印”技术,您现在可以随时随地,随心打印。使用智能复印解决方案,创建完美无瑕的副本,同时轻松打印双面身份证。专业彩色打印…...

easyPOI和导入复杂excel的各种坑

//easyPOI的依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.3</version> </dependency>//要操作pdf,word还是用原生poi比较好 <dependency><groupId>org.…...

用直流电机测转速——测速发电机标定实验

测速发电机标定实验 文章目录测速发电机标定实验1 测速发电机原理和应用1.1 原理1.2 应用2 硬件搭建3 实验数据4 总结1 测速发电机原理和应用 1.1 原理 直流电机同时也是一个发电机。也就是说&#xff0c;当直流电机被通入直流电的时候&#xff0c;会将电能转化为机械能&…...

httprunner_locust_场景1:登录1次,添加10次地图

场景1&#xff1a;任务执行 > login执行1次&#xff0c;addtitle执行10次 from locust import HttpUser, task, SequentialTaskSet, between import json# 场景1&#xff1a;任务执行 > login执行1次&#xff0c;addtitle执行10次 class FlashTask(SequentialTaskSet): …...

Actor模型

传统的游戏服务器要么是单线程要么是多线程&#xff0c;过去几十年里CPU一直遵循摩尔定律发展&#xff0c;带来的结果是单核频率越来越高。而近几年摩尔定义在CPU上已然失效&#xff0c;为什么呢&#xff1f; 大于在2003年左右&#xff0c;计算机的核心特性经历了一个重要的变…...

冠美会计

...

C1任务03-Web基础与布局

文章目录任务一:使用富文本编辑器任务二:所见所得 式开发拓展任务:CSS盒子模型任务一:使用富文本编辑器 描述:制作表,让表格隔行换色.加入JavaScript按钮弹出框. 富文本编辑器 <style>.cl{color:red}table,tr,td{border:1px solid; padding:5px 20px 5px 0;font-size:10…...

腾讯T2大佬手把手教你!大数据开发和java开发加班严重吗

前言 面试时间将近两个小时&#xff08;期间等待二面面试官来面我的时候等了半个多小时&#xff09;面试官问的东西很多&#xff0c;还挖了好几个坑&#xff0c;一个技术点套着一个技术点的问&#xff0c;一定要做好万全的准备。问了一些基本层面上的技术点都答出来了&#xf…...

unity知识记录

1、assetbundle资源加密方式&#xff08;unity Plus和unity Pro支持&#xff09; 针对Unity资源包-AssetBundle格式简单且容易破解的问题&#xff0c;Unity中国团队推出了Unity AssetBundle 加密方案 注意&#xff1a;秘钥长度为16位字符(128bit)&#xff0c;目前AssetBundle…...

腾讯T2大佬手把手教你!java字符串保留小数点后两位

前言 面试时间将近两个小时&#xff08;期间等待二面面试官来面我的时候等了半个多小时&#xff09;面试官问的东西很多&#xff0c;还挖了好几个坑&#xff0c;一个技术点套着一个技术点的问&#xff0c;一定要做好万全的准备。问了一些基本层面上的技术点都答出来了&#xf…...

HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法

HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法参考文章&#xff1a; &#xff08;1&#xff09;HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法 &#xff08;2&#xff09;https://www.cnblogs.com/mmykdbc/p/9395390.html &#xff08;3&#xff09;h…...

Echarts - 去掉图表横纵坐标轴刻度线(小细条分割线)

效果图 去掉前&#xff1a; 去掉后&#xff1a; 实现方法 在 xAxis、yAxis 配置项中分别加入以下代码&#xff1a; axisTick: {show: false }...

报考MBA的要求是什么?

报考MBA的要求是什么&#xff1f; MBA要求毕业后有三年以上工作经验&#xff0c;大专毕业后有五年以上工作经验&#xff0c;或硕士毕业后2年以上工作经验 MBA考生要求&#xff1a; 学士学位&#xff1a;毕业后3年以上工作经验 大专&#xff1a;毕业后5年以上工作经验 硕士…...

康说-字符串为空

原文地址https://zrrd.net.cn/1376.htm 前段时间有朋友遇到一个情况&#xff0c;字符串不为null,不为””的问题&#xff0c;找错找了好久&#xff0c;事后发现原来是字符串长度为0的情况&#xff0c;所以今天小聊一下&#xff0c;字符串为空的情况。 判断字符串String是否为…...

腾讯Java开发面试,java工作一年需要掌握的技术

一、概述 本文主要来分析JMM内存模型&#xff0c;英文名JAVA Memory Model&#xff0c;它是与计算机硬件有关的一个概念。为了保证共享内存的正确性&#xff08;可见性、有序性、原子性&#xff09;&#xff0c;内存模型定义了共享内存系统中多线程程序读写操作行为的规范。 …...

区块链理念

文章为参加会议后整理&#xff0c;不清楚区块链怎么具体实施&#xff0c;先做记录留存。 革命性的数据传输和存储方式 区块链技术在网络中建立点对点之间的可靠信任&#xff0c;价值传递过程去除中介干扰&#xff0c;既公开信息又保护隐私&#xff0c;既共同决策又保护个人权…...

Actor模型

传统的游戏服务器要么是单线程要么是多线程&#xff0c;过去几十年里CPU一直遵循摩尔定律发展&#xff0c;带来的结果是单核频率越来越高。而近几年摩尔定义在CPU上已然失效&#xff0c;为什么呢&#xff1f; 大于在2003年左右&#xff0c;计算机的核心特性经历了一个重要的变…...

C++--智能指针--1123

1.智能指针解决的问题 int div() {int a, b;cin >> a >> b;if (b 0)throw invalid_argument("除0错误");return a / b; } void Func() { // 1、如果p1这里new 抛异常会导致p1不会Delete而导致内存泄漏 // 2、如果p2这里new 抛异常会导致p1和p2都不会de…...

计算机职业价值观测评报告,职业价值观分析测试结果

总是听到不少人在抱怨&#xff0c;自己一直兢兢业业&#xff0c;努力向上&#xff0c;又没犯错误&#xff0c;可薪酬就总是上不去&#xff0c;一直维持原状&#xff0c;对于这种状况一直很苦恼&#xff0c;不知所以然。下面是学习啦小编收集整理关于职业价值观测试的资料&#…...

计算机网络职业评估报告,计算机网络技术专业个人职业生涯规划书.doc

计算机网络技术专业个人职业生涯规划书一 前 言——及时规划职业&#xff0c;做自己人生之舟的船长亚里士多德曾说过&#xff1a;“人是一种寻找目标的动物&#xff0c;他生活的意义仅仅在于是否正在寻找和追求自己的目标。”而这目标有大有小&#xff0c;有短期的也有用尽一生…...

RTMP推流摄像机联合EasyCVR安防视频云服务平台助力智能楼宇的建设

随着我国经济的快速发展和科学技术的不断进步&#xff0c;楼宇智能化安防监控系统被广泛应用。虽然当今智能化系统还处于初期发展阶段&#xff0c;但是其应用范围在不断扩展&#xff0c;推动了楼宇安防监控系统朝着智能化方向发展&#xff0c;大大提高了楼宇安防监控质量、效率…...

【解决方案】SkeyeVSS综合安防视频云服务在零售连锁巡店中的应用

在当前消费升级的大环境下&#xff0c;用户的购物体验是很多零售行业的基础建设目标&#xff0c;因此技术化和数字化管理也得到更加广泛的应用。零售行业视频监控系统是通过新技术的运用&#xff0c;提高零售行业的防损及运营管理的效率&#xff0c;降低人力成本&#xff0c;构…...

安防视频云服务平台EasyCVR视频智能分析系统运行控制台报404错误如何排查?

EasyCVR安防视频云服务是一款使用场景很广泛的视频智能分析平台&#xff0c;由TSINGSEE青犀视频研发团队开发&#xff0c;支持RTSP、GB28181、HIKSDK、Ehome协议等协议的前端设备接入&#xff0c;并且其他主流厂家的私有协议在不断扩展中。 部分用户反馈使用EasyCVR安防视频云平…...

为什么视频云服务会被各行业广泛看好?

在泛娱乐、新媒体等新兴市场视频的广泛应用带动下&#xff0c;人们更加习惯于这种更直观、更快捷的沟通方式。而在各行各业的企业级应用场景中&#xff0c;视频云与行业的融合发展不断加深&#xff0c;新的基于行业特点的视频应用不断涌现。视频云的发展空间&#xff0c;被广泛…...

PPT | 5G时代的视频云服务关键技术与实践

《从单机到分布式&#xff0c;数据库服务的演变史》...

SkeyeVSS综合安防视频云服务H5无插件直播点播实现HEVC H265 300毫秒以内低延迟播放

SkeyeVSS综合安防视频云服务H5无插件直播点播实现HEVC/H265 300毫秒以内低延迟播放 SkeyeVSS视频云支持HEVC/H265编码格式的摄像机直接接入&#xff0c;同时不需要后台转码&#xff0c;直接在WEB网页前端采用H5直接进行无插件播放&#xff1b; 在前文《SkeyeVSS综合Onvif、RT…...

SkeyeVSS综合安防Onvif、RTSP、GB28181视频云服务H5无插件直播点播卡顿的解决方案

SkeyeVSS综合安防Onvif、RTSP、GB28181视频云服务H5无插件直播点播卡顿的解决方案 SkeyeVSS网页无插件播放卡顿问题描述 通过浏览器WEB管理视频直播点播有布局简单、客户端集成方便、访问方便、无需安装客户端软件等优点&#xff0c;但是同时也存在以下两个问题&#xff1a; …...

【解决方案】AI+ 云时代 打造智慧港口安防视频云服务平台

港口作为国际交通与贸易的重要枢纽&#xff0c;是全球经济贸易往来的核心点。随着我国经贸合作的不断发展&#xff0c;越来越多的港口开始注重港口安防监控系统的建设与更新&#xff0c;以便于更高效地进行港口运行与管理工作。 港口智能监控系统主要通过5G、物联网、大数据、云…...

SkeyeVSS综合安防视频云服务无插件WEB直播方案中实现抓取快照功能

SkeyeVSS综合安防视频云服务WEB H5无插件直播点播方案中实现抓取快照功能 SkeyeVSS抓取快照功能分为前端和后台两种抓图方式&#xff1a; 前端抓图 SkeyeVSS网页前端通过SkeyeWebPlayer.js H5播放器在视频解码后&#xff0c;将视频图像抓取一张快照&#xff0c;网页播放器具…...

SkeyeVSS综合安防监控视频云服务Windows、Linux跨平台安装部署说明文档

一、环境准备 操作系统&#xff1a; Linux Ubuntu/CentOS 64位 Windows 7/Server 2008 r2以上/10/11 64位内存&#xff1a;2G以上 CPU: 双核2.0GHz以上 二、下载并安装SkeyeVSS综合安防视频云流媒体服务 下载SkeyeVSS 下载地址&#xff1a;http://www.openskeye.cn/downloa…...

【解决方案】如何通过EasyCVR安防视频云服务搭建基于移动互联网的阳光厨房云视频直播方案?

一、阳光厨房背景分析 餐饮服务后厨是食品生产经营链的最后一个环节&#xff0c;量大、点多、分散、经营者素质良莠不齐的餐饮企业&#xff0c;加强社会监督&#xff0c;是实施有效监管的必然路径。社会共治是阳光厨房的推进核心&#xff0c;阳光厨房的可视化&#xff0c;增强…...

EasyGBS国标视频云服务平台可以获取录像却无法播放是什么原因?

EasyGBS国标视频云服务平台基于国标GB/T28181协议&#xff0c;可实现的视频功能包括&#xff1a;视频直播、录像、语音对讲、云存储、告警、级联等&#xff0c;可分发的视频流包括RTSP、RTMP、FLV、HLS等格式。 近期有用户反馈&#xff0c;EasyGBS出现了设备录像能正常获取却无…...

音视频又贵又卡还不够炫?云原生的华为云视频云服务带你重塑新体验

摘要&#xff1a;在后疫情时代&#xff0c;音视频服务以前所未有之势被各行业强烈需要&#xff0c;然目前想要被广泛应用&#xff0c;却面临三大挑战&#xff1a;“贵”、“卡”、“不够炫”。依托华为强大的技术基础&#xff0c;华为云视频云服务如何解决这三大挑战&#xff1…...

国标视频云服务平台EasyGBS出现只能通过录像机观看的情况该如何解决?

国标视频云服务平台EasyGBS可支持通过国标GB28181协议接入多路视频源设备&#xff0c;实现视频流的接入、转码、处理与分发等功能&#xff0c;对外输出的视频流格式包括RTSP、RTMP、FLV、HLS、WebRTC等。 现有用户反馈&#xff0c;在使用EasyGBS时&#xff0c;无法通过平台观看…...

视频云服务四路玩家,谁是最大赢家

作者 | 中国软件网 陈杨校对 | 中国软件网 海策---从2006年亚马逊首次将其弹性计算能力作为云服务出售至今&#xff0c;云计算已发展成为成熟的产业。在这15年里&#xff0c;云计算产业经历了公有云服务商在IaaS层的价格混战、从IaaS向PaaS层生态的建设&#xff0c;也历经SaaS行…...

网易云信:通信与视频云服务发展迅猛,或成企业服务中“火箭轨道”

网易云信&#xff0c;作为孵化自网易集团核心技术架构的通信与视频云服务商&#xff0c;目前服务范围从IM 服务逐步覆盖到视频服务、直播点播以及实时音视频技术等服务。截止2019年3月&#xff0c;云信在三年半时间内以营收年均增长超过200% 的发展态势呈现在众人面前。2019年开…...

【解决方案】EasyCVR安防视频云服务城市污水处理厂解决方案

一、方案背景 伴随着经济的快速发展和城市化&#xff0c;城市污水的数量急剧增加。城市污水带来的环境污染&#xff0c;将直接威胁到城市水和粮食安全。因此&#xff0c;污水处理厂的建设管理和高效运营已经成为城市治污保洁工程的重要任务。 虽然国内很多城市已建有污水处理…...