- 博客(14)
- 收藏
- 关注
原创 Go删除切片元素的另一种姿势
首先整理一下删除切片的常用方法现在有一个切片sliceslice = append(slice[:n]:slice[n+1])slice = slice[1:]等等本文针对一个特殊场景:现有切片A,B,切片B中的部分元素是切片A的子集,求A删除B中子集后的部分先上常规思路代码:for k, v := range A { for _, m := range B { if v == m { switch k { case 1: A =
2022-03-11 11:01:21
724
原创 pprof实战-内存泄漏
场景在一台服务器中运行了多个服务,在运行一段时间后(不足一天),发现某个进程占用了50%以上的内存资源,导致服务器异常解决方案首先在代码中开启pprof性能分析runtime.SetBlockProfileRate(1) go func() { log.Println(http.ListenAndServe(":9080", nil)) }()采用在web界面查看的方式,此处监听9080端口打开浏览器访问web页面:http://ip:1080/debug/pprof/访问/debu
2022-02-23 16:13:39
3450
原创 使用Go Modules引入本地包
gomod用来对包进行管理,在Gov1.13默认开启。module testgo 1.16require ( github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/go-ini/ini v1.63.2 github.com/gogf/gf v1.16.2 github.com/gogf/guuid v1.0.0 github.com/golang/protobuf v1.5.2 // indirect github.com
2022-02-23 10:36:26
1559
原创 pprof 性能分析
pprof 是一个强大的性能分析工具,可以捕捉到多维度的运行状态的数据,在程序运行过程中可以获取cpu、heap、block、traces等执行信息一般情况下使用下列三种pprof分析runtime/pprof:采集程序(非 Server)的运行数据进行分析net/http/pprof:采集 HTTP Server 的运行时数据进行分析runtime/trace:采集Go程序运行中的所有的运行时事件通常使用pprof做的事情CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器
2021-08-30 16:17:03
1454
11
原创 postgre 的一个小坑(GoFrame)
在使用GF(GoFrame,以下均简称GF)对postgres数据库进行CRUD时,会出现键位不存在的报错,在经过检查后发现,表中确实有这个键位,这是怎么回事呢?解决方案在postgres进行表设计时,key需要小写,如果使用与Go一样的驼峰命名,即包含了大写,则需在查询的时候给key带上" ",即双引号GF生成的dao给我们得数据库操作带来了简便,同时对不同的数据库的支持情况却又不一样,例如在Insert()返回的结果中LastInsertId(),RowsAffected()方法是不支持po
2021-05-29 14:20:57
730
原创 Go time与string的相爱相杀
time包与string包可以说是在Go语言的开发中常用的两个包实际开发过程中(例如web开发)经常会遇到time类型与string类型的交互,计算比较等场景首先来了解GO语言里非常浪漫的一个点,即2006-01-02 15:04:05,GO语言诞生的时间,通常用来做时间的格式化time转stringt := time.Now() //当前时间timeLayoutStr := "2006-01-02 15:04:05"t.Format(timeLayoutStr) //返回值为string
2021-05-29 10:57:13
1730
4
原创 Golang在windows与linux的部分区别
文章目录前言一、Golang为什么分不同的操作系统版本?二、包1.syscall2.runtime解决方案总结前言Golang语言包下载分为windows,linux和MAC,在平常的使用中并没有什么问题,但是在交叉编译场景的发生,却有不得不注意的问题一、Golang为什么分不同的操作系统版本?在linux中,一切皆文件,内核不同,Linux操作系统使用Linux内核,Windows操作系统使用NT内核;Linux内核代码开源,NT内核代码闭源,在针对读取操作系统本身信息的Go语言包,便有了不
2021-05-21 14:58:24
3055
原创 GoFrame避坑之dao.DB.ALL()
这里使用的数据库是postgres在使用GoFrame对数据库进行操作时,例如dao.Space.Where(dao.Space.Columns.ProjectId,res.ProjectId).All()即查询ProjectId字段值为res.ProjectId的所有值,返回一个数组当该表存在bool类型的值时,偶尔会发现,无论我们数据库里存的是什么,取出来都是true解决方法1使用dao.DBname.Where(****).M.ALL()方法进行查询,该方法会返回一个Result []R
2021-05-19 14:12:06
731
2
原创 time.Alfter的坑
作为超时机制的首选,time.Alfter的使用非常的简单select { case <-chanan: fmt.Println("now!!!") return case <-time.After(time.Duration(3 * time.Second)): fmt.Println("timeout!!!") return }但是!!!!!!!Timer 不会被 GC 回收直到它被触发,如果需要考虑效率的话,Timer 不再被需要时,需要主动调用 Timer.
2021-04-20 17:02:40
127
原创 GoFrame初使用分享
GoFrame使用经验浅谈GoFrame,既是一款优秀的开发框架,也是一套高质量的基础组件集,这一切都是若干年日积月累的沉淀成果,难以一蹴而就,这也是其他 Golang "框架"和"类库"难以企及和比拟的。由于初次使用GoFrame(以下简称GF)主要是用于方便操作数据库(这里使用的是postgres)所以主要聊聊关于数据库中GF的一些简单用法,后续随着使用的深入,也会不断的更新工具安装使用方式:./gf install该命令往往是在gf命令行工具下载到本地后执行(注意执行权限),用于将gf命
2021-04-20 16:44:13
1798
原创 go: missing function body,syntax error: unexpected semicolon or newline before {
这其实是一个新手常犯的错误这与日常代码规范有关。例如:func main(){test()}将其改为:func main() {test()}即可
2020-06-20 15:39:19
2228
翻译 wayland简介
WaylandWayland旨在作为X的更简单的替代品,更易于开发和维护。Wayland复用了所有Linux内核的图形、输入输出技术:KMS、evdev,因此已支持的驱动可以直接拿来用。Wayland没有传统的Server/Client的模式,取而代之的是:Compositor/ClientWayland是供合成器与其客户对话的协议,以及该协议的C库实现Wayland合成器可以是在Linux内核模式设置和evdev输入设备上运行的独立显示服务器了解wayland之前需要先了解X
2020-06-20 15:20:23
1862
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人