golang
我是等闲之辈
爱因斯坦曾说过:「如果你无法通过简单的方式解释清楚某件事情,则说明你对它的了解还不够多。」
展开
-
go性能分析工具之trace
虽然CPU分析器做了一件很好的工作,告诉你什么函数占用了最多的CPU时间,但它并不能帮助你确定是什么阻止了goroutine运行,或者在可用的OS线程上如何调度goroutines。你有没有考虑过,你的goroutines是如何被go的runtime系统调度的?go执行跟踪程序可以帮助回答这些疑问,还有其他和其有关性能的问题,例如延迟、竞争和较低的并行效率。这是因为还没有安装graphviz,到下面网址下载安装,并且bin目录需要加到环境变量上(安装的时候可以选择添加的环境变量上,就不用手动加了)。原创 2023-07-21 14:30:10 · 283 阅读 · 0 评论 -
grpc中间件之链路追踪(otel+jaeger)
openTelemetry jaeger进行链路追踪原创 2023-07-19 15:05:50 · 1501 阅读 · 0 评论 -
grpc工具之grpcurl、grpcui、ghz
(window这样执行会报错:Error invoking method “pb.Order/login”: error getting request data: invalid character ‘u’ looking for beginning of object key string)2、在注册服务之后,启动反射服务:reflection.Register(rpcServer)1、安装grpcurl。原创 2023-06-15 19:18:39 · 923 阅读 · 0 评论 -
grpc 实现grpc gateway(window环境)
grpc gateway原创 2023-06-13 17:55:34 · 1283 阅读 · 0 评论 -
执行go mod tidy出现报错
解决方案:修改好后,再次执行 go mod tidy。原创 2023-03-02 14:04:10 · 876 阅读 · 0 评论 -
[Golang] cgo: C compiler “gcc“ not found
gcc not found2、压缩包解压之后得到一个 mingw64 文件夹。gcc程序就在bin目录下3、将其放到环境变量系统属性->高级->环境变量4、检查gcc是否安装成功原创 2022-12-12 09:47:12 · 2399 阅读 · 0 评论 -
golang升级版本到1.18
go升级版本到1.18原创 2022-12-10 11:17:30 · 892 阅读 · 0 评论 -
golang控制并发数
【代码】golang控制并发数。原创 2022-12-08 17:29:40 · 921 阅读 · 0 评论 -
go通过rabbitmq实现延迟队列
go通过rabbitmq实现延迟队列原创 2022-12-05 16:11:16 · 1432 阅读 · 0 评论 -
go 面向接口编程案例
go 面向接口编程案例原创 2022-11-30 12:09:24 · 216 阅读 · 0 评论 -
go创建一个web服务器的细节
go创建web服务器原创 2022-07-26 17:37:40 · 185 阅读 · 0 评论 -
go 通道的运用(控制并发的数量)
go通道原创 2022-06-24 14:58:40 · 315 阅读 · 0 评论 -
go 错误嵌套如何捕获原始错误
go捕获原始错误原创 2022-06-22 10:41:07 · 200 阅读 · 0 评论 -
go标准库之log的使用
go log原创 2022-06-17 10:22:40 · 465 阅读 · 0 评论 -
etcd配置
etcd配置原创 2022-06-15 15:10:19 · 2007 阅读 · 0 评论 -
go之label的使用
go label的使用原创 2022-06-09 16:04:16 · 576 阅读 · 0 评论 -
go修改php的配置文件
go修改PHP文件中的配置项原创 2022-06-07 18:15:17 · 228 阅读 · 0 评论 -
go之操作文件
读取文件func ReadFile1() { //这个读取文件最简单的办法。并且中文不会乱码。适用于读取小文件。 bytes, err := ioutil.ReadFile("./lyric.txt") if err != nil { fmt.Println("ReadFile error", err) } fmt.Println(string(bytes))}func ReadFile2() { // 利用bufio读取文件。带有缓原创 2022-05-26 09:42:14 · 92 阅读 · 0 评论 -
go正则表达式
func main() { TestRegx()}func TestRegx() { content := "helloabbyab" pattern := "ab+" //判断是否存在。一般没有什么太大价值。 match, err := regexp.MatchString(pattern, content) if err != nil { fmt.Println(err) } fmt.Println(match) /原创 2022-05-25 13:16:25 · 110 阅读 · 0 评论 -
go读取pdf
选型ledongthuc/pdf go语言实现的 pdf 解析库。有不少的 star 和 fork,并且从 demo 上看到确实能读取到内容。apache/tika Java 实现的 pdf 解析库。之所以能进入决赛圈是因为网上大量人推荐并且是 apache的项目,所以我也比较放心使用。但是,本人亲测读取一些非标准的pdf。ledongthuc/pdf会提示报错:malformed PDF: reading at offset 0: stream not present所以,还是决定使用:a原创 2022-05-24 22:50:38 · 2133 阅读 · 0 评论 -
go之excel操作
package mainimport ( "fmt" "github.com/xuri/excelize/v2")//参考文档:https://www.bookstack.cn/read/excelize-v2.0/spilt.4.1.mdfunc main() { //打开文件 f, err := excelize.OpenFile("./one.xlsx") if err != nil { fmt.Println(err) return } //获取当前工作表索引原创 2022-05-23 22:42:54 · 1098 阅读 · 0 评论 -
go 定时器
func main() { oem_code_list := []string{"jaychou", "达文西", "hello", "勒布朗"} start := 0 length := len(oem_code_list) //周期性定时器(Ticker)。初始化时间间隔为1s ticker := time.NewTicker(1 * time.Second) defer ticker.Stop() for range ticker.C { if start >= length原创 2022-05-23 13:07:40 · 160 阅读 · 0 评论 -
etcd监听修改并同步php配置文件
本文介绍etcd作为配置中心,如何监听修改,并同步更新到PHP配置文件。思路创建一个进程(即go程序)watch监听etcd的增删改操作。一旦监听到修改,即根据指定的PHP配置文件的具体路径去修改对应的配置内容。为了方便操作,PHP配置文件统一采用json后缀,保存json内容。一个前缀对应一个配置文件。所以前缀下的单个key就等于配置文件里的单个配置项。代码package mainimport ( "context" "encoding/json" "fmt" "log" "os原创 2022-05-20 18:03:56 · 757 阅读 · 0 评论 -
go性能分析工具pprof
pprof的用途CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗CPU 周期时花费时间的位置Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏Block Profiling:阻塞分析,记录 goroutine 阻塞等待同步(包括定时器通道)的位置。阻塞分析对分析程序并发瓶颈非常有帮助。Mutex Profiling:互斥锁分析,报告互斥锁原创 2022-05-16 11:11:46 · 12434 阅读 · 0 评论 -
stream抓包+推送phone实战
最近需要办理某个业务,发现天河区的余号一直为0。突然想到前阵子看过一篇文章,作者在叮咚上一直抢不到菜。通过抓包获取小程序的接口请求数据,然后定时去调用这个接口,判断有菜就自动发推送到手机。于是,周五晚上我也捣鼓了几个小时。发现也可以实现这种半自动化的功能。下载安装抓包工具首先,需要通过抓包工具获取小程序的api接口请求数据我用的是抓包工具是手机app:stream。(在appstore直接下载)默认安装后是无法抓取 https 类型的,需要在设置里进行相关配置:如果您要抓取 HTTPS 的请求原创 2022-05-07 13:47:12 · 15240 阅读 · 1 评论 -
golang日期格式化之奥秘
go 提供的这个 layout 对算法的实现非常科学高效,而且很规律。下面我们详细分解下。 所有的值表示都唯一对应一个时间部分。并且涵盖了很多格式组合。月份 1,01,Jan,January日 2,02,_2时 3,03,15,PM,pm,AM,am分 4,04秒 5,05年 06,2006时区 -07,-0700,Z0700,Z07:00,-07:00,MST周几 Mon,Monday格式化参考日期必须是2006-01-02 15:04:05(这里的15可以换成3或03,代表原创 2022-05-05 11:07:04 · 1007 阅读 · 0 评论 -
go单元测试实战
Go 语言有自带的测试框架testing,可以用来实现单元测试(T 类型)和性能测试(B 类型),通过go test命令来执行单元测试和性能测试。go test 执行测试用例时,是以 go 包为单位进行测试的。执行时需要指定包名,比如go test 包名,如果没有指定包名,默认会选择执行命令时所在的包。go test 在执行时,会遍历以_test.go结尾的源码文件,执行其中以Test、Benchmark、Example开头的测试函数。注意:测试文件与被测文件需要在同一个目录包下,测试文件必须以_te原创 2022-04-27 16:27:54 · 1073 阅读 · 0 评论 -
go之构建简单的web服务器4.0
这一章实现的是会话管理功能。采用的是cookie+session的方式实现登录功能。引用了第三方库:github.com/gorilla/sessions实现了login登录校验以及生成session信息后,我有点茫然:go如何定义一个中间件简单校验是否已登录?我现在能想到的方案:写个校验是否登录的公共方法,检验成功则返回用户信息,失败则提示用户登录。然后每个接口都调用一下这个校验方法。目录架构user_login.go代码:package userimport ( "fmt"原创 2022-03-15 17:31:42 · 708 阅读 · 0 评论 -
go之构建简单的web服务器3.0
引入etcd模块,实现对etcd的增删改。目录架构如下etcd.go代码package storageimport ( "context" "time" "fmt" "errors" clientv3 "go.etcd.io/etcd/client/v3")//连接etcdfunc ConnectEtcd() (*clientv3.Client,error) { cli, err := clientv3.New(clientv3.Config{ .原创 2022-03-15 09:55:41 · 649 阅读 · 0 评论 -
go之构建简单的web服务器2.0
上篇文章还有一些细节需要优化:1、数据库连接信息、接口返回码等参数应该写在config中,便于管理和修改2、接口返回的格式应该是json格式,带有状态码,提示信息,数据。(封装放在公共方法中)更新后的目录如下:return.go代码:package commonimport ( "io" "encoding/json" "net/http")type JsonStruct struct { Code int `json:"code"` Msg interfac.原创 2022-03-14 09:28:08 · 155 阅读 · 0 评论 -
go之构建简单的web服务器1.0
目录架构雏形main.go:程序入口,路由管理。storage目录:存放MySQL等数据库操作。user:用户模块。后期可以继续新增一些模块:比如common,存放公共方法的包。main.go代码package mainimport ( "net/http" //内部包 // mysql "etcd_admin/storage" user_edit "etcd_admin/user")func main() { // 当访问 http://127.0.0.1:80.原创 2022-03-10 23:18:55 · 1319 阅读 · 0 评论 -
grpc系列三:grpc实战
1.安装接口设计语言 Protocol buffer 的编译器 protoc下载安装文件wget https://github.com/protocolbuffers/protobuf/releases/download/v3.13.0/protobuf-all-3.13.0.zip解压缩unzip protobuf-all-3.13.0.zip检查cd protobuf-all-3.13.0./configure编译make安装make install安装成功后执行protoc原创 2022-03-09 23:21:03 · 1357 阅读 · 0 评论 -
grpc系列二:grpc探索
grpc介绍在正式介绍 gRPC 之前,我们先简单介绍一下什么是 RPC,它是 Remote Procedure Call 的缩写,中文译为远程过程调用(也可译为远程方法调用或远程调用),它是计算机通信协议,该协议可以实现调用远程服务就像调用本地服务一样简单,无需关心跨网络,跨平台,跨语言等问题。gRPC 是通信协议基于 HTTP/2,支持多语言的 RPC 框架,使用 Protobuf 作为它的接口设计语言(IDL),可以通过 protoc 工具生成 Golang 语言的结构体,服务端接口和客户端 .原创 2022-03-09 22:56:01 · 222 阅读 · 0 评论 -
grpc系列一:protobuf探索
protobuf介绍和作用protobuf:它是接口设计语言(IDL),它与编程语言无关,可以生成所有主流编程语言的代码,而且,它是二进制格式的数据,比较适合传递大量的数据。在编写 gRPC 代码之前,首先使用 protobuf 定义服务端和客户端之间传递的消息(message)和 gRPC 服务(service),然后安装需要用到的库,使用命令行工具自动生成 gRPC 的代码。protobuf的特点二进制格式,体积小,网络传输快,占用带宽流量少,调用性能更高,但是可读性差。protob.原创 2022-03-09 22:45:54 · 1350 阅读 · 0 评论 -
go之etcd读写实战
什么是etcd?etcd 发音为/ˈɛtsiːdiː/,名字的由来,“distributed etc directory.”,意思是“分布式etc目录”,说明它存的是大型分布式系统的配置信息。官网的一句话A distributed, reliable key-value store for the most critical data of a distributed system.翻译并理解过来就是:一个用于存储分布式系统中最关键的数据的仓库,它是分布式的、可靠的键值对仓库。首先它是个数据存储.原创 2022-03-08 09:30:43 · 3199 阅读 · 1 评论 -
解决go下载github资源速度慢的问题(灵丹妙药)
我之前下载beego项目以及bee工具下载了好久都没成功,也尝试过修改host文件。但是都是无功而返。原来,Go 1.11之后,支持了go module包依赖管理工具,并且可以通过goproxy设定代理地址,提高下载第三方工具的速度。具体操作:在windows 10系统中,安装Go1.11之后的版本,然后打开go module,在命令行终端中输入:go env -w GO111MODULE=on修改指定的代理,在命令行终端中输入:go env -w GOPROXY=https://gopro原创 2022-02-23 15:34:07 · 4108 阅读 · 1 评论 -
Go解密之slice
转载地址本文的灵感来自于某篇公众号文章:https://mp.weixin.qq.com/s?__biz=MjM5MDUwNTQwMQ==&mid=2257483743&idx=1&sn=af5059b90933bef5a7c9d491509d56d9&scene=21#wechat_redirect什么是sliceslice 翻译成中文就是切片,它和数组(array)很类似,可以用下标的方式进行访问,如果越界,就会产生 panic。但是它比数组更灵活,可以自动.转载 2022-02-21 11:30:49 · 145 阅读 · 0 评论 -
Go实战之channel通道实现互斥锁的功能
结论:利用缓冲大小为 1 的 channel来实现互斥锁mutex。实现原理:如果缓冲满了,发送(写入)到通道时将会阻塞;如果通道清空,发送时就会解除阻塞。package mainimport ( "errors" "fmt" "os" "sync")var lock sync.Mutex/**【通过channel管道实现Mutex互斥锁】缓冲大小为 1 的 channel 具有如下的特性:如果缓冲满了,发送(写入)到通道时将会阻塞;如果通道清空,发送时就会解除阻塞。显然,这种 ch原创 2022-02-11 13:16:15 · 1151 阅读 · 0 评论