![](https://img-blog.csdnimg.cn/20190828231833582.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Go
NetRookieX
若能力无法承载野心,就静下心来学习吧!
展开
-
openfly:基于nginx的4层代理管理平台
openfly是基于nginx的4层代理管理平台原创 2024-06-22 22:40:26 · 368 阅读 · 0 评论 -
批量导出语雀文档
文档默认会导出在output目录下,可以在配置文件中修改。原创 2023-07-12 23:50:07 · 897 阅读 · 2 评论 -
用go模拟键盘输入
仅供学习使用哈,不要用来开gua。代码仓库:https://github.com/GuoFlight/gkeybd (本人仓库,欢迎留言)原创 2023-05-06 22:46:06 · 416 阅读 · 0 评论 -
用bpftrace窃取Mysql账号密码
简单演示一下如何利用bpftrace窃取Mysql的账号密码原创 2023-03-05 15:46:35 · 139 阅读 · 0 评论 -
Golang支持重试的http客户端ghttp
简介官方仓库:https://github.com/GuoFlight/ghttp重试的逻辑依赖了github.com/avast/retry-go入门client := ghttp.Client{ Method: ghttp.MethodGet, Url: "https://www.baidu.com",}res, err := client.Do()if err != nil { fmt.Println(err) return}fmt.Printl原创 2022-05-15 00:37:27 · 551 阅读 · 0 评论 -
Go1.13的坑:无法结束Goroutine
背景作为运维小哥,想用Go模拟Cpu占用100% 1秒钟,但是在Go1.13上遇到了问题,1s后Goroutine不会停止。只要用了for{},Goroutine就无法结束,即使主Goroutine结束。代码package mainimport ( //"fmt")import "time"func Test1() { for { //fmt.Println("hello") //随便在for循环中加个语句,就可以停止了 }}func m原创 2022-04-17 01:16:11 · 383 阅读 · 0 评论 -
golang执行命令 && 实时获取输出结果
背景golang可以获取命令执行的输出结果,但要执行完才能够获取。如果执行的命令是ssh,我们要实时获取,并执行相应的操作呢?示例func main() { user := "root" host := "172.16.116.133" //获取执行命令 cmd := exec.Command("ssh", fmt.Sprintf("%s@%s", user, host)) cmd.Stdin = os.Stdin var wg sync.WaitGroup wg.Add(2)原创 2022-04-17 01:04:50 · 3221 阅读 · 0 评论 -
支持TraceID、错误文件、错误行的第三方golang库:gerror
Gerr库简介Golang第三方库官方仓库:https://github.com/GuoFlight/gerr特点:兼容golang原生error库gerr会自动生成traceID,方便排查整条链路的错误。gerr会自动获取错误发生的文件名+函数名+行号,方便问题的定位。安装go get github.com/GuoFlight/gerrDemo详见官方Demo:https://github.com/GuoFlight/gerr/tree/main/examplepack原创 2022-04-01 22:42:40 · 1041 阅读 · 0 评论 -
Golang基于Mysql分布式锁实现集群主备
背景集群中如果需要主备,可以基于Redis、zk的分布式锁等实现,本文将介绍如何利用Mysql分布式锁进行实现。原理数据库中包含数据字段(此处为Master的主机名)、版本号和上一次更新时间。Master不断上传自己的心跳,即刷新数据库中的"更新时间"。上一次更新时间超过了一定时间,则认为Master已Down,则可以抢Master。抢Master和更新心跳时,版本号+1,要判断版本号是否与上一次读取的数据相同。如果相同,则修改成功。如果不相同,则说明Master已经被其他主机抢走。数据库原创 2022-02-18 00:36:56 · 663 阅读 · 0 评论 -
Golang线程池gpool
背景golang中使用并发要考虑很多问题,如控制并发量、等待Goroutine执行完毕等。看下面一段代码:var wg sync.WaitGroupcount := 10wg.Add(count)limitGoroutineCount := make(chan int,5)for i:=0;i<count;i++{ go func(a int){ limitGoroutineCount <- 1 if time.Now().Second()%4==0{ wg.Don原创 2022-01-03 16:06:44 · 2267 阅读 · 0 评论 -
Golang优化及bug排查
句柄数占用过多查看是否http客户端等是否忘记close。比如http.Client的defer close在return之后,导致没有关闭就return了。京城郭少将会持续更新~原创 2021-02-24 14:29:59 · 249 阅读 · 0 评论 -
Go语言中Kill子进程的正确姿势
场景我们在编写部署系统的时候,通常需要在机器上部署一个agent,用来执行部署脚本,为了防止部署脚本写的有问题,长时间hang住,我们通常会为脚本的执行设置一个超时时间,到了时间之后就kill掉该脚本的进程。如果是Go语言实现,脑袋里应该立马浮现出os/exec包、cmd.Process.Kill()这样的手段。但是,如果部署脚本中又调用了其他脚本,即子进程又fork出更多子进程的时候,这招就不好使了。简单来说,就是cmd.Process.Kill()无法杀死子进程。问题验证下面我们写段代码原创 2021-02-15 17:32:02 · 3149 阅读 · 0 评论 -
【golang】json数据中复杂key的处理
例1type Transport struct { Time string Id int}func main() { //将struct的切片包装成json格式 var st []Transport t1 := Transport{Time: "22", Id: 44} st = append(st, t1) t2 := Transport{Time: "66", Id: 88} st = append(st, t2) st_json, _ := json.Marshal(s原创 2020-08-23 20:53:36 · 468 阅读 · 0 评论 -
Goland无法启动
操作系统Mac(其他系统类似,删除掉goland.vmoptions文件最后的jar包路径即可)原因使用jar包po解Jetbrains解决办法删除/Users/<用户名>/Library/Application\ Support/JetBrains/GoLand2020.1/注意:Application\ Support目录名中有一个空格,反斜杠用于转义...原创 2020-07-10 09:53:30 · 4860 阅读 · 0 评论 -
panic: runtime error: invalid memory address or nil pointer dereference
背景语言:Go事件:连接Elasticsearch报错详情如下:var client *elastic.Clientvar host = "http://192.168.191.128:9200/"func init() { errorlog := log.New(os.Stdout, "APP", log.LstdFlags) //var err error client...原创 2020-02-24 11:24:55 · 2433 阅读 · 0 评论 -
Windows,Linux,Mac,VSCode下go语言环境安装
背景说重点,这是google开发出来的语言,所以被墙。Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Windows下安装官网下载:https://golang.org/dl/ ,但是被墙了。可以在我的CSDN进行下载安装包,一键安装。也可以给我留言,我发给你。VSCode下安装首先你要有VSCode,这里就不再赘...原创 2019-05-21 21:10:05 · 965 阅读 · 1 评论