Golang
文章平均质量分 53
欢迎来到我的 Golang 技术博客!这个博客是为了分享和探讨关于 Golang(或称为 Go)编程语言的各种技术和应用而创建的。Golang 是一种简洁、高效、强大的编程语言,由 Google 开发并广泛应用于各种领域的软件开发项目中。
在这个博客中,我将分享关于 Golang 的最新趋势、最佳
五岁小孩吖
我不是三岁小孩,我已经五岁啦~
展开
-
Go 如何使用 ast 进行代码自动生成
go如何使用ast进行代码自动生成原创 2023-04-12 11:34:20 · 283 阅读 · 0 评论 -
gorm实现多对多映射,以及预加载排序
gorm实现多对多映射,以及预加载排序原创 2024-03-24 14:04:29 · 357 阅读 · 0 评论 -
栈和堆的数据结构
都是计算机科学中常用的数据结构。原创 2024-03-22 20:59:22 · 784 阅读 · 0 评论 -
分布式理论 CAP + Base
Base:基本可用(Basically Available)和最终一致性(Eventually consistent)CAP 规则下 AP 模型 的延伸,AP + Base,实现 服务高可用 + 数据最终一致性最终一致性:也就是允许节点之间的数据出现短暂的数据不一致情况,但是节点高可用。原创 2024-03-21 10:36:42 · 417 阅读 · 0 评论 -
golang内存分配
在程序运行过程中,垃圾收集器会自动管理内存的分配和回收,以确保程序不会出现内存泄漏或者内存溢出等问题。总之,Go语言的内存分配由垃圾收集器负责管理,程序员可以使用make和new函数进行堆分配,也可以使用函数调用进行栈分配。在堆分配中,需要手动释放不再使用的内存,否则会造成内存泄漏。但是,在Go语言中,由于有垃圾收集器的存在,程序员通常不需要手动释放内存。但是,栈分配的内存大小通常比较有限,因此不能用于分配大量的数据。栈分配是通过函数调用来实现的。Go语言中的内存分配可以通过两种方式进行:堆分配和栈分配。原创 2024-03-21 10:36:11 · 389 阅读 · 0 评论 -
mac 解决 go link name must refer to declared function or variable
在 执行 go mod tidy 时报错,如下。go link name must refer to declared function or variable原创 2024-03-21 10:35:38 · 406 阅读 · 0 评论 -
go 字符串高效拼接
最常用的方法肯定是 + 连接两个字符串。这与python类似,不过由于golang中的字符串是不可变的类型,因此用 + 连接会产生一个新的字符串对效率有影响。原创 2024-03-21 10:18:58 · 254 阅读 · 0 评论 -
遍历二叉树
先序遍历可以想象为,一个小人从一棵二叉树根节点为起点,沿着二叉树外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果。原创 2024-03-20 19:15:20 · 227 阅读 · 0 评论 -
recover 之后打印 panic 的调用栈
【代码】recover 之后打印 panic 的调用栈。原创 2024-03-20 19:14:49 · 99 阅读 · 0 评论 -
goalnd debug操作
goalnd debug操作有劳各位看官 ,你们的支持是我最大的动力!!!同时也欢迎大家在评论区提问、分享您的经验和见解!!!原创 2024-03-20 19:14:14 · 320 阅读 · 0 评论 -
服务 OOM 情况分析
简称内存溢出,正常情况下服务是部署在服务器上的,oom表示服务占用的内存达到服务器的可用内存,如果是k8s的话,pod是可配置服务最大的内存,超过则oom。所有会导致内存增大并且溢出的可能性。原创 2024-03-20 19:13:44 · 147 阅读 · 0 评论 -
Go 的 recover
recover 是用来捕获程序的 panic 的,需要和 defer 配合使用// 有效recover()// 生效的范围有问题,panic(1)在第一个defer中没用recover,直接panicrecover()panic(2)panic(1)// 无效主协程的recover不能处理子协程的panic,子协程的panic只能子协程自己处理,一个协程中最上层能够捕获下层的panic。原创 2024-03-20 19:13:12 · 259 阅读 · 0 评论 -
go 的 struct 能不能作为 map 的 key
struct可以作为map的key,只要其所有字段都是可以比较的即可。原创 2024-03-19 17:03:54 · 472 阅读 · 0 评论 -
go 的 struct 能不能比较
相同类型的struct的实例值可比较: A1 = A2。相同类型的指针类型的实例值可比较 &A1 = &A2。不同类型的struct不可比较:A1!原创 2024-03-19 17:03:24 · 399 阅读 · 0 评论 -
Go 通过 hash 判断文件是否被修改
通过一下函数对指定文件进行hash md5,生成md5字符串,修改文件后再生成新的md5字符串,两个对比即可知道文件是否有改动。原创 2024-03-19 17:02:32 · 517 阅读 · 0 评论 -
goalng 格式化 proto
保存Goland配置并重启Goland,proto文件发生修改则可立即被格式化。设置—Tools—File Watchers—新增。原创 2024-03-19 17:02:01 · 667 阅读 · 0 评论 -
分布式唯一ID生成
雪花算法生成的ID是纯数字且具有时间顺序的。原创 2024-03-19 17:01:28 · 558 阅读 · 0 评论 -
protoc 自定义插件生成代码
个人博客地址正常根据proto生成对应的go代码首先安装 protoc编译工具,然后安装go代码生成插件go install github.com/golang/protobuf/protoc-gen-go@latestprotoc --go_out= [文件生成的位置] [proto所在的目录]加上-I 则表示生成某个文件时会搜索需要导入的其他proto此时生成的只有go代码,如果需要生成grpc连接客户端,则需要。原创 2024-03-18 14:19:30 · 326 阅读 · 0 评论 -
使用decimal包解决golang浮点数运算失真
decimal建议只用做计算;不建议用来字符串和浮点数之间转换,比如Decimal 转float64 会自定约算小数点,而且大量数据计算下性能差。原创 2024-03-18 14:18:53 · 401 阅读 · 0 评论 -
Go 单元测试中 testing 包的数据类型M/T/B/PB
testing.M对main方法进行的测试testing.T对函数/方法进行单元测试testing. B对性能进行的测试testing.PB。原创 2024-03-18 14:18:22 · 1044 阅读 · 0 评论 -
go去除时间的时分秒
如2021-12-18 12:14:16 格式化为 2021-12-18 00:00:00。原创 2024-03-18 14:17:52 · 198 阅读 · 0 评论 -
Go 基准测试 Benchmark
Go 基准测试 Benchmark原创 2024-03-18 14:17:20 · 941 阅读 · 0 评论 -
go 打印错误时同时输出trace调用栈
go 打印错误时同时输出trace调用栈。原创 2024-03-17 21:24:49 · 128 阅读 · 0 评论 -
为什么不推荐使用else if
当然是为了简洁易读啦。原创 2024-03-17 21:24:19 · 298 阅读 · 0 评论 -
使用Bitmap设计数据库单个字段保存多种组合状态
BitMap 的基本原理就是用一个bit 位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。= 0 或者 1280 & 1024 = 1024。1280 & 256!=0 或者 1280 & 256 = 256。& 表 两个数相同位数都为1 则为结果为1,反之为0。因此2的n次方在二进制中只有一个bit位为1。如 2的8次方:100000000。2的n次方 相当于把1往左移n位。原创 2024-03-17 21:23:46 · 239 阅读 · 0 评论 -
Golang 操作运算符
将 a8 和 a原创 2024-03-17 21:22:41 · 587 阅读 · 0 评论 -
grpc message contains sync.Mutex 不可进行值复制
2.指针引用,如果不是指针引用的话,虽然代码不一定出错,但是很有可能出现死锁,因为锁是不可复制的。1.值拷贝:使用pb.clone(x).(类型)原创 2024-03-17 21:22:08 · 403 阅读 · 0 评论 -
go gorm 句柄判断是否有where条件
从执行结果可以明显看出有一个where,因此可通过来判断where条件是否存在。原创 2024-03-16 16:57:10 · 193 阅读 · 0 评论 -
go proto message 进行深拷贝
拷贝拷贝的是数据本身,创造一个样的新对象,新创建的对象与原对象不共享内存,新创建的对象在内存中开辟一个新的内存地址,新对象值修改时不会影响原对象值。既然内存地址不同,释放内存地址时,可分别释放。拷贝的是数据地址,只复制指向的对象的指针,此时新对象和老对象指向的内存地址是一样的,新对象值修改时老对象也会变化。释放内存地址时,同时释放内存地址。原创 2024-03-16 16:56:31 · 271 阅读 · 0 评论 -
Go 的 gc 机制
Go 的 gc 机制原创 2024-03-16 16:55:58 · 790 阅读 · 0 评论 -
go的len和cap
个人博客地址。原创 2024-03-16 16:55:12 · 158 阅读 · 0 评论 -
go 实现两个协程交替打印1-100的奇偶数
【代码】go 实现两个协程交替打印1-100的奇偶数。原创 2024-03-16 16:54:13 · 242 阅读 · 1 评论 -
go 遍历获取文件夹下所有文件
【代码】go 遍历获取文件夹下所有文件。原创 2024-03-15 14:14:02 · 380 阅读 · 1 评论 -
Golang的url.encode,拼接请求url字符串
【代码】Golang的url.encode,一个可以拼接字符串的妙用。原创 2024-03-15 11:03:55 · 917 阅读 · 1 评论 -
go http 处理gzip响应流
【代码】go http 处理gzip响应流。原创 2024-03-15 10:55:31 · 161 阅读 · 1 评论 -
golang的内存泄漏分析
内存泄漏说白了就是分配的内存(或者变量)不再使用,但是并没有被gc回收,而是继续占用内存;内存泄漏通常是由于程序中存在长时间存在的对象引用而未被垃圾回收机制回收导致的。原创 2024-03-15 10:55:00 · 823 阅读 · 1 评论 -
go 反射执行指定方法
【代码】go 反射执行指定方法。原创 2024-03-15 10:54:28 · 94 阅读 · 1 评论 -
避免Goroutine泄露的措施
避免协程泄漏的措施原创 2024-03-15 10:53:51 · 195 阅读 · 1 评论 -
Golang内存分配逃逸分析
内存分配逃逸就是 栈的内存逃逸到堆上,需要gc清理,耗性能指针逃逸在方法内把局部变量指针返回栈空间不足逃逸(空间开辟过大)动态类型逃逸(不确定长度大小)(在 interface 类型上调用方法)发送指针或带有指针的值到 channel 中。原创 2024-03-15 10:53:07 · 563 阅读 · 1 评论 -
Golang 内存分配逃逸分析
内存分配逃逸就是 栈的内存逃逸到堆上,需要gc清理,耗性能指针逃逸在方法内把局部变量指针返回栈空间不足逃逸(空间开辟过大)动态类型逃逸(不确定长度大小)(在 interface 类型上调用方法)发送指针或带有指针的值到 channel 中。原创 2024-03-14 10:22:19 · 957 阅读 · 1 评论