![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
golang学习心得分享
ase2014
这个作者很懒,什么都没留下…
展开
-
goland dlv 进行remote debug实验
背景因为平时服务都运行在linux服务器上面,有时测试环境出现问题,需要在测试环境进行debug,因此进行如下实验,验证如何使用goland+dlv进行远程调测工具goland、dlv工具安装goland直接安装即可dlv安装:直接go install...原创 2022-04-23 18:55:53 · 1469 阅读 · 0 评论 -
golang http连接池实现
连接池golang http1.1默认开启连接池在Transport里面实现关闭连接池将DisableKeepAlives设置为true或者将MaxIdleConnsPerHost设置小于0的值func (t *Transport) tryPutIdleConn(pconn *persistConn) error { if t.DisableKeepAlives || t.MaxIdleConnsPerHost < 0 { return errKeepAlivesDis原创 2022-02-26 18:27:56 · 2803 阅读 · 0 评论 -
golang http1.1 超时
涉及的结构体Client、Request、Response、TransportClientTimeout参数,通过context来整体控制超时,Request里面的ctx如果也有超时限制,则谁先超时,就使用哪个,即如果ctx先超时,则使用ctx的,如果timeout先超时,则将ctx重新赋值Requestctx context.Context,在Client的Timeout已经说了...原创 2022-02-26 17:10:20 · 950 阅读 · 0 评论 -
golang http1.1代码实现
涉及结构体Client、Transport、Dailer、Request、ResolverRequestctx context.Context 可以设置超时时间ClientTimeout:整体超时设置,与Request的ctx取较小超时时间TransportTLSHandshakeTimeout:tls握手的超时时间,通过AfterFunc实现,超时后,直接返回tlsHandshakeTimeoutErrorDisableKeepAlives:如果为true,不会有conn连接原创 2022-02-24 23:42:59 · 991 阅读 · 0 评论 -
golang http 1.1 max body实现
http1.1没有实现max body的设置,不像rpc可以直接设置接受和发送的body最大大小,具体可以参考grpc 客户端、服务端 发送、接收消息大小,是按照有多大就发送多大的内容,容易导致服务撑死可以通过io.LimitReader读取body,然后判断返回的err是不是io.EOF来进行限制r := io.LimitReader(body)d, err := ioutil.ReadAll(r)if err != io.EOF { return ...}...原创 2022-02-11 13:04:58 · 692 阅读 · 0 评论 -
grpc 客户端、服务端 发送、接收消息大小
客户端最大发送消息大小,默认值defaultClientMaxSendMessageSize为math.MaxInt32(4G),可以通过grpc.WithDefaultCallOptions(MaxCallRecvMsgSize(x))进行大小设置最大接收大小,默认值defaultClientMaxReceiveMessageSize为1024 * 1024 * 4(4M),可以通过grpc.WithDefaultCallOptions(grpc.MaxCallRecvMsgSize(x))进行大小原创 2022-02-07 11:02:19 · 4118 阅读 · 0 评论 -
k8s里的Visitor模式学习
Visitor模式visitor模式在k8s源代码里面比较场景,刚接触,理解起来有点绕,体会其本质后,发现就是callback的一种实现示例代码type Callback func()type Visitor interface { Visit(callback Callback)}type A struct { visitor Visitor}func (a *A) Visit(callback Callback) { fmt.Println("start execute A"原创 2021-12-21 23:36:31 · 155 阅读 · 0 评论 -
Golang代码规范要求
Effective GoEffective go定义uber-go定义腾讯定义golangci-lint定义原创 2021-12-13 14:58:38 · 306 阅读 · 0 评论 -
golangci-lint检查项说明
golangci-lint说明集成各项golang的静态检查工具英文原版说明地址内容涉及到编码风格(style)、错误处理(error)、会导致代码(bugs)、检查测试代码(test)、metalinter、sql相关判断(sql)、影响性能(performance)、圈复杂度(complexity)、注释(comment)、包引用(import)、模块管理(module)、代码格式化(format)默认启动检查工具名字描述预设作用deadcode发现未使用的代码原创 2021-11-25 19:51:01 · 2282 阅读 · 0 评论 -
golang runtime Caller、Callers、CallersFrames、FuncForPC、Stack作用
参考如何在Go的函数中得到调用者函数名-鸟窝Caller获取调用函数信息参数作用:0表示调用函数本身Callers获取程序计算器,第二个参数会返回程序计算器列表,return值是个数CallersFrames获取栈的全部信息,通过和Callers配合来使用FuncForPC通过reflect的ValueOf().Pointer作为入参,获取函数地址、文件行、函数名等信息Stack获取栈信息...原创 2021-08-16 16:23:22 · 1465 阅读 · 0 评论 -
leetcode-搜索旋转排序数组-33
题目整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和一个整数原创 2021-05-18 21:03:35 · 137 阅读 · 0 评论 -
GOPROXY 中国代理
中国代理提供商地址七牛https://goproxy.cn阿里http://mirrors.aliyun.com/goproxy/原创 2021-05-17 23:44:49 · 430 阅读 · 0 评论 -
golang源代码阅读,sync系列-Pool
目录总结问题问题解答使用源码分析结构体Put函数pinpinSlow函数runtime_procPin函数和runtime_procUnpin函数procPinprocUnpinshared,结构体poolDequeue概览结构体pushHead函数popHead函数popTail函数Get函数getSlow函数清理函数poolCleanup注册poolCleanup到触发点poolCleanup函数总结可以缓存变量实例的池子,每个pool存储一种类型的变量实例,支持并发内部存储结构,使用了链表、队原创 2021-05-16 13:27:00 · 354 阅读 · 0 评论 -
golang 三种指针类型具体类型的指针、unsafe.Pointer、uintptr作用
结论golang的三种指针类型具体类型的指针,如*int、*string等unsafe.Pointer,在unsafe下面,任何具体类型的指针都能转化成Pointer,可以实现不同类型的指针的互相转化,充当桥梁的作用uintptr,golang源码的注释为能存储任何类型的指针的类型,uintptr可以进行指针计算,然后对对应的指针地址的变量进行复制,完成一些黑魔法具体类型的指针具体类型的指针,平时开发使用的很多,不同指针类型不能进行转化,主要用作参数unsafe.Pointer开发者开发原创 2021-05-12 00:17:22 · 1163 阅读 · 0 评论 -
golang源代码阅读,sync系列-Cond
目录总结使用例子关键字源码分析结构体创建Cond函数Wait函数Signal函数Broadcast函数总结Cond创建的时候需要传入Locker,一般是Mutex或者RWMutex,调用Wait的时候,需要显示调用Cond的L进行加锁和解锁。调用Wait的goroutine会被挂起,当其它goroutine调用Signal会释放一个被挂起的goroutine。调用Broadcast,会将所有挂起的goroutine释放。不能被复制,否则会panic,Cond的copyChecker就是做这件事情原创 2021-05-10 00:28:34 · 268 阅读 · 4 评论 -
golang源代码阅读,sync系列-Map
目录总结关键字使用源码分析结构体函数分析Store函数Load函数LoadOrStore函数LoadAndDelete函数Delete函数Range函数总结golang的map是不支持并发访问和设置的,否则会panic。在golang的历史中,最开始只有不支持并发的map,但是实际上并发访问map的场景比较多,因此后续golang团队开发了sync.Mapsync.Map使用场景有限,虽然并发访问的map的场景都可以使用它,但是golang团队注释里面说明了它的使用场景如果有具体的类型,建议使用原创 2021-05-09 16:11:44 · 344 阅读 · 0 评论 -
golang源代码阅读,sync系列-Once
文章目录总结使用源码分析结构体Do函数总结Once的作用为只执行函数一次。Once使用的场景并不多。因为初始化单例,一般是利用init函数,init函数也执行一次,但是init函数里面执行的东西建议是非阻塞性的,否则会影响整体程序的加载,且不利于定位问题,如果阻塞了话。阻塞性的可以使用Once,如配置初始化Once执行的函数是没有入参和返回参数的,所以一般会使用闭包的方式,初始化一些参数因为Once的实例,一般是定义为全局变量,这样让某个函数只执行一次跟sync下的Mutex、RWMutex一样原创 2021-05-09 00:13:06 · 313 阅读 · 0 评论 -
golang源代码阅读,sync系列
WaitGroup实现:goroutine集合的管理互斥锁实现: 互斥锁读写互斥锁实现: 读写锁Once实现:待完成Cond实现:待完成Map实现:待完成Pool实现:待完成原创 2021-05-06 22:59:20 · 310 阅读 · 2 评论 -
golang &^操作符
&^例子:a &^ = b, a与上b的位取反1100 &^ 0100 = 1000 -> 1100 & 1011 = 1000原创 2021-03-10 09:48:15 · 433 阅读 · 0 评论 -
golang iota理解
iota理解理解:iota 常量自动生成器默认从0开始const( a = iota // 0 b // 1 c // 2 d // 3)const( a = iota + 10 // 10 b // 11 c // 12 d // 13)中间赋值常量const( a = iota // 0原创 2021-03-08 14:46:07 · 94 阅读 · 0 评论 -
go dns 解析部分实现
go dns解析流程dns解析主要流程windowslinux内置go dns解析dns解析主要流程入口函数:\src\net\ipsock.go里面的lookupIPAddrwindows调用库函数GetAddrInfoWlinuxgo内置的dns解析非内置dns解析内置go dns解析实现func:lookup_unix.go的goLookupIPinitConfVal...原创 2020-04-08 00:01:39 · 567 阅读 · 0 评论 -
CryptoJS aes加解密,对应使用golang进行加解密
文章目录背景在线加解密工具jsgo背景本文将介绍,使用crypto js的aes进行加密,如何使用golang进行解密在线加解密工具链接js在线工具就是使用CryptoJS 进行加解密的go使用三方库https://github.com/Luzifer/go-openssl解密可以直接使用它的函数DecryptBytes或者DecryptString,但是建议自己重写下,因为加...原创 2019-12-25 14:26:12 · 1736 阅读 · 0 评论 -
golang学习网站
golang.org中文翻译原创 2019-12-07 15:40:14 · 111 阅读 · 0 评论 -
golang foreach
for range说明1、for循环开始已经确认循环次数,在中间进行append,也不会对新加的进行循环2、进行循环的是拷贝的副本,在range后面使用的是指针或者slice,在range的时候,t是从当前slice或者指针指向的是a[i],从case1和其他case的fmt.Print(t.n, " ")可以看出3、要对当前数组或者slice,使用指针进行操作,在case3和case4...原创 2019-10-29 10:11:45 · 4042 阅读 · 3 评论 -
golang "坑"记录
golang "坑"记录该博客主要用来记录使用golang过程中,遇到的"坑“,主要是对golang的理解不够深使用匿名类,unmarsal时可能有意向不到的结果type A struct { C B string `json:"b"`}type C struct { B string `json: "b`, D string `json: "d`,...原创 2019-09-27 09:54:21 · 163 阅读 · 0 评论 -
golang http client源码阅读
golang http client代码学习主体部分具体代码说明主体部分一次请求的过程,主要是transport.go里面代码该部分主要涉及struct:Transport:主要维护conn的创建、已经conn的池的维护persistConnect:里的roundTrip函数进行数据的发送和数据的接收从roundtrip.go里的RoundTrip函数开始->transport....原创 2019-09-20 00:28:26 · 487 阅读 · 0 评论