go
文章平均质量分 59
go
大口吃饭大口吐
一个热爱历史的码农
展开
-
pprof的使用
先来一段性能分析案例命令行运行这是段简单的代码示例,通过runtime分析出程序运行过程中内存的变化情况,分别对应着内存的分配、空闲、释放如果能web页面展示,或者生成一个文件、测试图表、命令行交互分析更为方便下面介绍pprof使用方式pprof是go语言内置 的分析性能,运维分析数据的工具。原创 2024-09-26 10:44:35 · 440 阅读 · 0 评论 -
golang读取文件
文件的字节大小决定哪种方法选用,os方式效率最慢,按照时间复杂度 os-io执行最快,当一个无限读取文件并持续运算时或者大的文件,有缓冲读取是最好的。原创 2024-09-24 09:32:29 · 224 阅读 · 0 评论 -
go-zero网关的简单实用
依赖上文中的服务端代码部署。原创 2024-09-24 09:28:46 · 235 阅读 · 0 评论 -
golang runtime包常用方法
在主协程让出CPU时间片后,最终"xxxx"字符串也是输出到了"main goroutinue"字符串后面,说明让出了CPU时间片,并不是一味着阻塞等待其它协程执行完毕再执行。Go运行时调度器使用runtime.GOMAXPROCS参数来确定需要使用多少个os线程来同时执行go代码,"默认值"是机器上的CPU"逻辑"核心数。的数组/切片,第二个参数true会输出所有的goroutine信息。通俗翻译:让出CPU"时间片",重新等待安排任务。正在运行的程序的操作系统目标,一个字符串常量。原创 2024-09-23 09:57:41 · 196 阅读 · 0 评论 -
golang,net/http包,r.Body的使用
这里也就明白了req2变量为何是空,因为r.Body已经被第一次取过数据了,不能重复取了,但是,业务中,往往会有1个变量会在多个地方使用,试着改良一下。io.ReadCloser 接口类型,准确说一些列方法的定义,io.Reader 和 io.Closer 接口来提供数据的读取和关闭操作。中,通过这个转化功能,可满足jsoniter包的NewDecoder传参需求,但这样,后续业务我还是要继续取。,其数据是通过网络传输的数据,是一种流数据,什么是数据流?接口,那么,可大致理解为,上面说到,取数据时,实现。原创 2024-09-23 09:51:34 · 428 阅读 · 0 评论 -
Golang Gob使用
golang-gob是go标准库中提供的一种序列化和反序列化的工具,它可以将go语言中的变量序列化为字节流,然后再反序列化还原成原来的变量类型。这种格式的数据简称为 Gob(即 Go binary 的缩写)转码效率上,Gob>Protobuf>messagePack>json。已一个缓存案例,来实现一下转码解码过程。当然,也可用作rpc或者API数据传输。原创 2024-09-21 15:29:43 · 234 阅读 · 0 评论 -
GOPATH go mod配置
目录下,那个时候 go 官方还没有支持依赖管理,包括我们自己项目的代码,依赖的代码包,都被放到这个路径下,十分混乱,不利于管理。GOPATH 是 Go 语言的工作目录,它的值可以是一个目录路径,也可以是多个目录路径,每个目录都代表 go 语言的一个工作区。我们开发 Golang 项目时,需要依赖一些别的代码包,这些包的存放路径就与 GOPATH 有关。也就意味着,一台电脑开发多个golang项目时,每个golang项目目录下有。文件来管理当前项目的包依赖,本台电脑中所有的项目包依赖,全部存储在。原创 2024-09-20 10:07:13 · 173 阅读 · 0 评论 -
Cobra 构建命令行项目
Cobra 是一个用来创建命令行的 golang 库,同时也是一个用于生成应用和命令行文件的程序,提供了一个简单的界面来创建强大的现代 CLI 界面一个生成命令行工具的框架例如,一个项目的 main 文件启动加载各项配置方法,项目启动的提示命令,例如 cmd1 -h,cmd1 run file1等。原创 2024-09-20 10:06:46 · 346 阅读 · 0 评论 -
go-zero通过etcd请求gRPC服务端
原生的客户端通过etcd链接,要自己写很多代码,不想写的话自己找类库,go-zero中已经帮我们封装好了,仅仅需要加配置即可本文演示的客户端,依赖上篇文章的服务端环境。原创 2024-09-18 09:42:28 · 698 阅读 · 0 评论 -
golang 嵌套chan类型使用
以一个GPT的demo代码来演示,相信看完代码,就会使用这种编程风格了。方法时,会创建一个协程,输出结果是顺序的,而不是随机的。最终程序的执行时间,为最大的任务执行时间,而不是相加。利用了有缓冲的chan是先进先出方式,来顺序执行。嵌套类型经常使用,机缘巧合的竟然没用过嵌套。类型,本人的的确确还没使用过。原创 2024-09-17 16:39:05 · 255 阅读 · 0 评论 -
golang的协程实现-goroutine
我们从调度上声明线程与goroutine的区别内存上通讯。原创 2024-09-17 16:38:45 · 504 阅读 · 0 评论 -
golang 报错信息解读
for.go:12:6: 两个数字代表着具体报错位置 12 代表行号 6 代表第几个字符(光标放在12号行首,键盘按6下右箭头就到了逗号处)代码中故意写错个符号。原创 2024-09-17 16:38:17 · 219 阅读 · 0 评论 -
go work 工作区使用
跨文件目录操作本地包、多个mod模块包调用、本地测试。替代掉 go.mod 中的 replace。work.go文件内容如下。原创 2024-09-17 16:37:49 · 367 阅读 · 0 评论 -
使用go-zero框架做rpc服务端
源码 https://gitee.com/qq_connect-60293/servjj。原创 2024-09-17 16:37:32 · 981 阅读 · 0 评论 -
goreman使用
在Linux下多进程管理工具。原创 2024-09-14 09:29:06 · 106 阅读 · 0 评论 -
go-zero初识&http-api服务
goctl是go-zero微服务框架下的代码生成cli工具。四个模块基本涵盖了web、微服务的所有操作。原创 2024-09-14 09:28:30 · 365 阅读 · 0 评论 -
golang使用goroutine遇到的坑
go运行于goroutine中,cpu运行时,本身自带线程调度器(程序调度器),使用一个go关键字即可实现多线程运行,但是并不是对应一个物理线程,假设调度器中有两个参数 A:B ,代码中goroutine数量为 A,物理线程为 B,(B的数量可配置,最好根据cpu核数来定义,此处不深究),动态自动的分配,销毁,降低了开发成本(锁的概念见下文),在goroutine中通过异步/阻塞来挂起线程,降低了线程切换成本。运行方式’异步’, 仅限不阻塞情况下异步执行,阻塞后还是同步等待执行,第二个参数为缓冲的大小。原创 2024-09-14 09:28:09 · 773 阅读 · 0 评论 -
golang泛型使用
声明一个方法Foreach这个方法类型约束又臭又长,换一个清爽写法有些难区分MyNumber是接口还是自定义约束类型,再换种更清晰写法再换一种也可以单独和某种具体类型使用以上的表示或,是合集意思,那么并集呢,例如myType_1(int32,string),myType_2(int64,string) 取二者的交集string作为类型约束,也很简单//每一个自定义约束类型单独一行myIntmyInt2当交集约束为空时,调用函数就会报错。原创 2024-09-14 09:27:45 · 578 阅读 · 0 评论 -
golang 空结构体使用 struct{}
结构体 User内部没有声明任何成员属性,不占用存储空间,匿名空结构体的声明并初始化表达为struct{}{}原创 2024-09-14 09:27:24 · 207 阅读 · 0 评论 -
golang对redis哨兵模式的实验
redis的哨兵模式(Sentinel)是以主从复制为架构的运行模式,旨在提高redis集群的容错性,可搭配cluster模式组合使用,本文不涉及cluster假设一个场景,redis配置了主从,程序中链接主节点地址进行写入查询操作,当主节点挂了后,为了让从节点顶上来,需要手动将程序中主节点ip换成从节点的,人工干预费事费力,还会造成一段时间内服务不可用Sentinel 哨兵模式是一种特殊的模式,独立的进程,程序中链接哨兵服务的ip,将会为程序提供安全可靠的节点容灾切换,有些类似于服务发现。原创 2024-09-13 10:18:40 · 1041 阅读 · 0 评论 -
golang comparable使用
comparable 表示所有可比较类型,也就是说,K 可以是任意可比较类型什么意思呢,就是一种可以参与比较的数据类型统称,例如!原创 2024-09-13 10:17:56 · 308 阅读 · 0 评论 -
Golang链接器(go build -ldflags) 与 go generate、go:embed的使用
里的go build命令,和原始的go build 命令,编译出来的包不同之处在于,编译后的包嵌入了链接器功能,将main.go中的Version变量进行了。这种多条命令,使用&&符号拼接起来,不易于维护,通常我们将它写在shell脚本里或者Makefile中,这不是我们本文讨论重点,下面以Makefile为例。允许你传递一些在编译时控制链接过程的选项,或者说编译时嵌入一些变量,如版本信息、构建时间戳等数据。的源代码文件,找出所有包含//go:generate的特殊注释,提取并。下面是我们的程序体现。原创 2024-09-13 10:17:28 · 448 阅读 · 0 评论 -
Google开源wire使用(依赖注入)
wire 是由 google 开源的一个供 Go 语言使用的依赖注入代码生成工具。它能够根据你的代码,生成相应的依赖注入 go 代码。body: "*"原创 2024-09-13 10:16:54 · 1170 阅读 · 0 评论 -
github.com/pkg/errors 包使用
总的来说,库在错误处理方面提供了比标准库更强大和灵活的功能。它可以捕获堆栈跟踪信息、支持错误链以及提供可扩展性。然而,使用需要引入第三方依赖,而标准库是Go语言的内置部分。如果项目对外部依赖有严格的要求或者希望保持较小的代码体积,标准库的错误处理功能可能更适合。原创 2024-09-13 10:15:24 · 370 阅读 · 0 评论 -
golang 切片使用技巧
var buf = make([]byte, 64) 和 var buf []byte:这两种方式创建的是切片,因此是可变的(可以增长和缩小)。var buf = make([]byte, 64) 和 var buf []byte:这两种方式创建的切片不会被初始化,元素值为未知。var buf = make([]byte, 64):长度为64,容量至少为64(具体容量可能会因底层数组的重新分配而变化)。var buf [64]byte:这种方式创建的是数组,长度是固定的,不可改变。原创 2024-09-13 10:13:54 · 1060 阅读 · 0 评论