首页 > 其他分享 >GO性能优化指南笔记

GO性能优化指南笔记

时间:2023-05-20 23:32:55浏览次数:54  
标签:指南 string int 代码 笔记 GO 优化 builder

今天的学习内容时关于GO性能优化的问题。 今天的讲师讲的关于GO在项目实操过程中的各种优化案例可以说是目前来说我见过的最好的了,以下我从几个方面说明一下

1,GO语言在编程过程都要注意的问题:

  • 简单性(以能理解并运行为第一要素,拒绝冗杂的代码,以简单清晰的逻辑编辑代码)
  • 可读性(代码是写给人看的,不是机器,不要追求过于花哨的代码)
  • 生产力(对于团队的配合是十分重要的,要能够高性能的完成整个项目)

2.编码的规范

  • 代码格式:实际开发过程中需要有规范的代码格式,不然容易引起歧义
  • 注释:对于每行代码需要有自己的注释,以防同事看不懂或自己忘记代码实际含义
  • 命名规范:规范的命名才能使开发效率更高效,不然容易花费更多的时间在名字歧义上
  • 控制流程:故障问题通常出现在条件语句和分支循环中,所以不建议在实际开发中使用复杂的嵌套控制流程语句
  • 错误和异常处理:error尽量提供简明的上下文信息,团队开发过程才不会出现一看不知道的问题。panic用于真正的异常情况。recover只在当前的goroutine和defer中生效,注意时机

3.性能优化建议

1.可以使用benchmark来优化

func Fib(n int){
	if n<2 {
		return n
		
	}
	return Fib(n-1)-Fib(n-2)
	

}

func benchmark(b *testing.B) {
	for i := 0; i < b.N; i++ {
		Fib(10)
	}
}

2.slice预分配内存 3.map预分配内存 4.使用string.builder字符串处理

func plus(n int ,s string)string{
	str:=""
	for i := 0; i < n; i++ {
		str+=s
	}
	return s
}

func stringbuilder(n int ,s string)string{
	builder := strings.Builder

	for i := 0; i < n; i++ {
		builder.WriteString(s)

	}
	return builder.String()
}


# ```
# 5.性能分析工具

根据课程的最后可以看到可以使用pprof性能排查来查出开发过程中还有可以优化的要点。

也可以在goroutine和mutex锁中排查出结果

prrof工具可以实现的功能有:
- 1.tool
    - routine/pprof
    - net
    - 2.sample
- cpu
    - 堆内存
    - 协程
    - 锁
    - 阻塞
    - 线程创建
- 3.profile
    - 网页
    - 可视化终端



标签:指南,string,int,代码,笔记,GO,优化,builder
From: https://blog.51cto.com/u_15638932/6318169

相关文章

  • 树相关知识点--零碎笔记
    深入理解前中后序二叉树的前中后序遍历是什么?前中后序遍历,即二叉树结构的前中后位置前序遍历-即刚刚进入一个节点的时候中序遍历-即进入节点之后未离开节点之前后序遍历-即即将离开第一个节点的时候前中后序是遍历二叉树过程中处理每一个节点的三个特殊时间点前--刚刚进入一个二......
  • 深度学习--调用chatgot接口实现
    首先,对于段落文字进行提取主要信息,第一反应要是电脑像人脑就行了,就想到chatgpt进行识别,以下为我识别的文字进行gpt转换。实验结果成立,现在只需要将接口调用,将识别文字传入后,进行字符串拼接,加上:“提取支付时间,消费类型,消费内容”,传入gpt后,将结果返回,输入到程序上,进行识别即可。......
  • redis-cli 使用lua脚本笔记
    前言众所周知,redis可以执行lua脚本,至于为什么要用lua脚本来操作redis,自行百度咯先来讲一下最简单的方式,关于如何在javaspringboot里用lua脚本,请查看我另一篇文章:https://www.cnblogs.com/daen/p/17418024.html更为详细的资料请参考以下文章https://blog.csdn.net/jiayibingd......
  • Golang的viper包调用多次OnConfigChange
    问题:修改了一次,而执行了两次这个函数解决方案把配置文件进行md5,保存其md5值。在调用这个函数时,再次读取文件进行md5。两者比对,如果相等就不执行下面的逻辑。这样就解决了,一模一样的配置文件,保存多次,不会执行后续的逻辑。但是,杜绝了大部分的场景,比如修改了一次,保存了两次......
  • golang操作redis
    首先,基于docker查看redis镜像dockerps-a然后执行dockerrun-p6379:6379-dredis:latestredis-server,将端口映射到本机最后执行dockerexec-ti13e638ea1036redis-cli-h0.0.0.0-p6379执行链接操作......
  • Redis笔记(六):Redis订阅发布
    CommandsSUBSCRIBEchannel[channel...]PUBLISHchannelmessageUNSUBSCRIBE[channel[channel...]]PSUBSCRIBEpattern[pattern...]正则订阅PUBSUBsubcommand[argument[argument...]]查看订阅与发布系统状态PUNSUBSCRIBE[pattern[pattern...]]退订所有给......
  • CSS基础知识笔记
    CSS(CascadingStyleSheets)指层叠样式表,是一种描述如何显示HTML元素的语言。参考教程:https://www.w3school.com.cn/css/index.aspCSS语法CSS规则集(rule-set)由选择器和声明块组成:CSS选择器元素选择器p{text-align:center;color:red;}id选择器注意:i......
  • 算法学习笔记合集
    字符串哈希:哈希学习笔记KMP:KMP学习笔记图论分层图最短路:分层图最短路LCA:P3379最近公共祖先模板数据结构线段树:线段树学习笔记ST表:P3865ST表树状数组:P3374树状数组1DP树上背包:P2014选课(树上背包)杂项搜索:搜索学习笔记离散化:离散化学习笔记......
  • 五月读书笔记一《人件集》
    《人件集》读书笔记一:一.在决策制定时,团队领导不仅要从宏观上建立起一种协作的气氛,而且还要在微观上起到领导的作用。让最终的解决办法体现所有成员的智慧,包括经验、创造性以及各种思想,它应该不仅仅是个人贡献的一个均衡产品,而是一个真正综合了各成员最优贡献的产品。领导要采......
  • 阅读笔记:Sybilla DLT任务重启判定系统
    论文简介Sibylla:ToRetryorNotToRetryonDeepLearningJobFailure这篇论文发表在ATC2022上,主题是提出了一个基于半监督学习的深度学习训练(DLT)作业调度的系统,该系统减少了GPU集群中不必要的作业重启操作。背景知识深度学习作业调度中的错误类型与处理机制目前的大规......