
golang随笔
文章平均质量分 55
一条闲鱼_mytube
这个作者很懒,什么都没留下…
展开
-
golang map扩容随笔
所以,Go map 的初始桶数是从 1 开始的(2^0),但具体数量会根据初始化时的 hint 参数动态调整。这种设计既节省内存又保证了性能。这种设计保证了 map 在各种场景下都能保持良好的性能,同时通过渐进式扩容避免了性能抖动。原创 2025-04-04 09:13:40 · 351 阅读 · 0 评论 -
golang recover错误
某些底层系统错误(如栈溢出、内存段错误)可能绕过Go的。,可以优雅处理局部错误,但需理解其局限性以避免误用。如切片越界、类型断言失败、空指针解引用等运行时。技术上可捕获,但程序状态可能损坏,需谨慎处理。但程序可能处于不可信状态,继续执行需谨慎。抛出自定义类型(如结构体或错误接口),每个goroutine需独立处理自己的。,主goroutine无法捕获。或发生致命错误(如内存耗尽),函数中调用有效,且必须位于触发。且未被捕获,程序仍会崩溃。主动抛出的错误,只要在。的同一函数调用栈中。机制,直接终止程序。原创 2025-03-11 11:55:25 · 405 阅读 · 0 评论 -
golang中具有 “no copy“的类型
在 Go 语言中,某些类型由于特殊用途或底层实现,可能会被标记为 “no copy”,即它们不能被复制,通常是因为复制会导致意外的行为或错误。这些类型主要包括:2. 原因: 依赖于 ,如果复制,会导致多个 变量竞争同一个锁。示例:3. 原因: 用于确保某段代码只执行一次,复制 可能导致相同的初始化逻辑执行多次。示例:4. 原因: 维护一个内部计数器,拷贝后多个 可能操作同一个计数器,导致错误。示例:5. 原因: 是一个对象池,拷贝会导致多个 可能原创 2025-03-09 17:34:57 · 532 阅读 · 0 评论 -
深入理解sync pool
Pool 并没有直接使用 poolDequeue,原因是它的大小是固定的,而 Pool 的大小是没有限制的。因此,在 poolDequeue 之上包装了一下,变成了一个 poolChainElt 的双向链表,可以动态增长。字段 pad 主要是防止 false sharing。poolChain 是一个双端队列的实现。原创 2025-03-07 16:46:22 · 953 阅读 · 0 评论 -
Go语言方法和接收器类型详解
在处理map值时,始终记住要使用"获取-修改-存回"的模式。不可寻址的情况通常可以通过创建中间变量来解决。原创 2024-12-29 16:05:54 · 477 阅读 · 0 评论 -
Golang泛型下
golang 泛型原创 2023-03-01 12:04:13 · 108 阅读 · 0 评论 -
Golang泛型上
Golang泛型上。原创 2023-03-01 12:01:45 · 136 阅读 · 0 评论 -
Golang多云SDK 支持多云存储, 多云开服
多云存储 多云开服原创 2023-02-26 15:40:09 · 597 阅读 · 1 评论 -
如何获取服务器的CPU,内存进行限流
如果获取CPU,内存信息原创 2022-08-23 13:50:57 · 331 阅读 · 0 评论 -
golang 实现nacos获取配置和服务注册-支持集群
golang 实现nacos获取配置和服务注册初始化客户端package utilsimport ( "github.com/nacos-group/nacos-sdk-go/clients/config_client" "github.com/nacos-group/nacos-sdk-go/clients/naming_client" "github.com/nacos-group/nacos-sdk-go/vo" "time")type NacosConfigClient str原创 2022-04-01 16:21:02 · 4335 阅读 · 0 评论 -
AWS3文件上传 golang 客户端
AWS3文件上传 golang 客户端实现类package utilsimport ( "bufio" "bytes" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" tsgutils "github.com/typa01/原创 2022-03-30 16:33:53 · 944 阅读 · 0 评论 -
go-fastdfs client
go-fastdfs client 分享一个go-fastdfs client分享一个go-fastdfs client调用函数package utilsimport ( "github.com/astaxie/beego/httplib")type FastDFSClient struct { Req *httplib.BeegoHTTPRequest}func NewFastDFSClient(serverUrl string)*FastDFSClient{ client:=原创 2022-03-30 16:19:31 · 483 阅读 · 0 评论 -
Go 实现watch dog的样板
Go 实现watch dog的样板package mainimport ( "fmt")func main() { wd := NewWatchDog() wd.Register("price", NewPrice()) wd.Register("quote", NewQuote()) wd.Run()}type Dog interface { Start()}type WatchDog struct {}var dogMap = map[string]Dog{}原创 2021-11-17 10:17:51 · 514 阅读 · 0 评论 -
[Protobuf][golang] protoc proto-gen-grpc protobuf 版本兼容问题
Protobuf,protoc,proto-gen-grpc版本兼容问题+解决方法编译命令issue1issue2issue 3问题总结编译命令参考文档https://studygolang.com/articles/28132?fr=sidebarprotoc --go_out=plugins=grpc:./ *.protoissue1172-1-1-156:proto xuqianlong$ protoc --go_out=plugins=grpc:./ *.proto--原创 2021-07-15 11:51:59 · 2012 阅读 · 0 评论 -
golang 退出函数总结
//Recover 会捕捉到(执行defer) //panic("test") //不会捕捉到(不执行defer),整个程序退出 //os.Exit(1) //自带包log,不会被捕捉到(不执行defer), 当前goroutine退出 //log.Fatal("test"), 底层调用os.Exit(1) // 放入子go (执行defer), 但是不会影响到其他go程序; 本身不是panic或者错误,会执行所有的deferred call...原创 2021-06-21 17:35:49 · 1458 阅读 · 0 评论 -
golang range 方法值传递的例子
for k,v:=range itemsk,v可以认为是一个副本,for内部的运行空间可以看成一个匿名函数空间例子1type item struct { a int}func main() { items := make([]*item, 6) a := &item{} b := &item{} c := &item{} d := &item{} e := &item{} f := &item{} items[0] = a原创 2021-06-10 13:43:24 · 275 阅读 · 0 评论 -
golang map 总结
1. map的原理特性:kv存储,能在O(1)时间复杂度内找到v,实现: 存储: 对key进行hash,通过hash找到存储区域下标,存储到对应的数组位置。 取值: 要先通过hash(key)得到下标位置,根据下标位置获得对应的value2. hash 冲突(不同key可能会产生相同的hash)解决方式1. 开放寻址:累加试探直到找到是空的位置,例如key1放在11位置,key2会在11后一次试探,直到找到空位置存储。2. 拉链法:拉链法的value存储结构是链表形式,冲突时候,直原创 2021-03-16 10:10:48 · 922 阅读 · 0 评论