Go
衣舞晨风
不预测,只应对
展开
-
关于Golang闭包
1、能不用闭包的地方就不要用闭包,没必要为了炫技,写一段增加团队小伙伴负担的代码。2、for 循环代码,统一在内部用临时变量再存一下。关于Golang闭包。原创 2024-01-09 21:30:00 · 575 阅读 · 1 评论 -
Golang SSL 证书 验证
代码平平无奇,需要注意的是http client初始化部分。因为是短连接,如果是大量域名去验证的话,短时间内将导致大量。原创 2023-12-25 22:15:00 · 291 阅读 · 1 评论 -
得物-Golang-记一次线上服务的内存泄露排查
这边大致归纳下go语言中有哪些常见的内存泄露。常见内存泄露。原创 2023-12-19 23:15:00 · 11016 阅读 · 18 评论 -
swag init cannot parse source files main.go: open main.go: The system cannot find the file specified
在dnm目录下直接执行swag init会提示如下异常。指定下main.go的位置即可。swag官方文档地址。原创 2023-12-11 10:09:15 · 302 阅读 · 0 评论 -
go.sum are different when using go mod vendor/download(go.sum checksum mismatch)
今天本地编译一个项目,遇到以下错误。本地Golang配置。原创 2023-08-10 20:30:00 · 646 阅读 · 0 评论 -
网关的一种实现方式
动手开发自己的API网关。原创 2023-05-13 05:08:22 · 82 阅读 · 0 评论 -
Gin获取Response Body引发的OOM
同时根据请求的Header跳过SSE及Websocket请求,因为这两类流的请求记录到审计日志中意义不大,而且在json序列化的时候也会有问题。再看下代码,可以看到这个代码的逻辑是每一个请求都会将响应的Body完整的缓存在内存一份,对于响应体很大的请求,在这里就会造成内存暴涨,比如:像日志下载。我们在开发中基于Gin开发了一个Api网关,但上线后发现内存会在短时间内暴涨,然后被OOM kill掉。在图二中可以看到内存的增长是很快的,在一分半的时间内,内存增长了近2G。* 后来参考Echo,补上了这个功能。原创 2023-02-25 04:56:36 · 711 阅读 · 0 评论 -
Slices in Golang
Slices in Golang原创 2023-02-07 18:27:44 · 159 阅读 · 0 评论 -
Golang PutUvarint Uvarint
GO Uvarint用法及代码示例原创 2022-12-23 22:00:00 · 349 阅读 · 0 评论 -
Golang通过JSONP设置localstorage
Golang通过JSONP设置localstorage原创 2022-09-05 22:45:00 · 533 阅读 · 0 评论 -
Golang net/http 请求处理流程分析
Golang net/http 请求处理流程分析原创 2022-07-15 21:30:00 · 1258 阅读 · 0 评论 -
Golang写时复制是否是原子性的?
验证代码:汇编代码:下面主要看下21行对应的汇编:基础知识补充:MOVQmovb(8位)、movw(16位)、movl(32位)、movq(64位)寄存器寻址:https://blog.csdn.net/luoyhang003/article/details/46786591/TEST指令的行为与AND指令一样,除了不改变目的寄存器的值。例如,testq %rax, %rax 用来检查 %rax 是负数、零、还是正数。https://stackoverflow.com/questions/1原创 2022-07-07 21:45:00 · 986 阅读 · 0 评论 -
Go 反射 学习笔记
反射reflection反射可大大提高程序的灵活性,使得 interface{} 有更大的发挥余地反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息反射会将匿名字段作为独立字段(匿名字段本质)列想要利用反射修改对象状态,前提是 interface.data 是 settable, 即 pointer-interface通过反射可以“动态”调用方法1、获取目标对象信原创 2017-08-12 11:01:13 · 652 阅读 · 0 评论 -
使用godep管理Golang项目依赖
1、安装go get -u -v github.com/tools/godep2、检出依赖 save 当你之间开发完成之后,需要把自己的依赖打入vendor的时候需要使用//在项目的根目录执行godep save ./cmd/...如果部分包本地没有,会有如下提示: go get 或者git clone 或者 godep get对应的版本包即原创 2018-02-07 21:21:28 · 5433 阅读 · 0 评论 -
Golang 在windows下编译Linux下可执行文件
Windows 下编译Linux 64位可执行程序set GOARCH=amd64set GOOS=linuxgo build结果: 小注:在CMD窗口执行,不要在Git Bash来执行命令个人微信公众号: 作者:jiankunking 出处:http://blog.csdn.net/jiankunking...原创 2018-03-28 18:30:17 · 31871 阅读 · 2 评论 -
Golang 协程 跟Java NIO
《Java NIO AIO 基本概念》《goroutine 调度器(scheduler)》有没有发现Golang协程的schedule跟Java NIO的selector很像?都是依赖epoll(linux)来判断事情有没有完成JDK 7 引入了NIO 2,NIO2用的就是epoll,因此判断一个网络包会不会出现BIO那种情况,就可以看他代码网络部分用的是不是NIO 2。个人微信公众号:...原创 2018-10-02 10:44:03 · 3882 阅读 · 0 评论 -
Golang GC: Prioritizing low latency and simplicity
The SetupGo is building a garbage collector (GC) not only for 2015 but for 2025 and beyond: A GC that supports today’s software development and scales along with new software and hardware throughout ...转载 2018-12-15 10:29:11 · 473 阅读 · 0 评论 -
Golang GC
一、增量式 GC二、The GC runs concurrently with mutator threads, is type accurate (aka precise), allows multiple GC thread to run in parallel. It is a concurrent mark and sweep that uses a write barrier. I...原创 2018-12-15 11:40:01 · 1372 阅读 · 0 评论 -
Go Concurrency Patterns: Context
IntroductionIn Go servers, each incoming request is handled in its own goroutine. Request handlers often start additional goroutines to access backends such as databases and RPC services. The set of ...转载 2018-12-12 12:51:43 · 645 阅读 · 0 评论 -
Clone all repos from a GitHub organization
比如获取https://github.com/rancher下所有reposcurl -s https://api.github.com/users/rancher/repos?per_page=200 | python -c $'import json, sys, os\nfor repo in json.load(sys.stdin): os.system("git clone " + re...原创 2019-02-15 17:50:06 · 398 阅读 · 0 评论 -
Golang 如何正确使用 Context
视频信息How to correctly use package contextby Jack Lindamoodat Golang UK Conf. 2017视频:https://www.youtube.com/watch?v=-_B5uQ4UGi0博文:https://medium.com/@cep21/how-to-correctly-use-context-...原创 2019-09-02 08:59:19 · 6732 阅读 · 0 评论 -
使用govendor管理Golang项目依赖
1、安装govendorgo get -u -v github.com/kardianos/govendor2、init在项目根目录,比如我这里是tap项目,那就是进入tap目录,执行init命令govendor initlscd vendor/ls 这个 vendor.json 会类似 godep 工具中的描述文件版本的功能。 3、执行命令将当前原创 2017-12-30 10:27:38 · 9471 阅读 · 0 评论 -
Golang cannot take the address of
今天在使用kubernetes/apimachinery下/pkg/api/resource中的Quantity接收k8s资源信息的时候,报出如下错误:..\server\handlers\adapter.go:70: cannot call pointer method on clusterQuota.Hard[admin.ResourceRequestsCPU]..\server\ha原创 2018-02-06 19:55:59 · 6578 阅读 · 0 评论 -
视频笔记:理解 channels - Kavya Joshi
一、视频信息1、视频观看地址https://www.youtube.com/watch?v=KBZlN0izeiY2、PPT下载地址http://download.csdn.net/download/xunzaosiyecao/102128843、博文https://about.sourcegraph.com/go/understanding-channels-转载 2018-01-18 20:27:40 · 1084 阅读 · 0 评论 -
《Effective Go》--空白标识符
未使用的导入和变量 如果你在程序中导入了一个包或声明了一个变量却没有使用的话,会引起编译错误。因为,导入未使用的包不仅会使程序变得臃肿,同时也降低了编译效率;初始化 一个变量却不使用,轻则造成对计算的浪费,重则可能会引起更加严重BUG。当一个程序处于开发阶段时,会存在一些暂时没有被使用的导入包和变量,如果为了 使程序编译通过而将它们删除,那么后续开发需要使用时,又得重新添加,这非常麻烦。空白标原创 2017-11-14 08:27:41 · 758 阅读 · 0 评论 -
《Effective Go》--Maps
Map是一种方便,强大的内建数据结构,其将一个类型的值(key)与另一个类型的值(element或value) 关联一起。key可以为任何定义了等于操作符的类型,例如整数,浮点和复数,字符串,指针,接口(只要其动态类型支持等于操作),结构体和数组。切片不能 作为map的key,因为它们没有定义等于操作。和切片类似,map持有对底层数据结构的引用。如果将map传递给函数,其对map的内容做了改变,则这原创 2017-11-11 08:53:09 · 610 阅读 · 0 评论 -
《Effective Go》--defer
Go的defer语句用来调度一个函数调用(被延期的函数),使其在执行defer的函数即将返回之前才被运行。这是一种不寻常但又很有效的方法,用于处理类似于不管函数通过哪个执行路径返回,资源都必须要被释放的情况。典型的例子是对一个互斥解锁,或者关闭一个文件。// Contents returns the file's contents as a string.func Contents(filenam原创 2017-11-11 07:23:34 · 546 阅读 · 0 评论 -
Go 并发concurrency 学习笔记
很多人都是冲着 Go 大肆宣扬的高并发而忍不住跃跃欲试,但其实从 源码的解析来看,goroutine 只是由官方实现的超级“线程池”而已。 不过话说回来,每个实例 4-5KB 的栈内存占用和由于实现机制而大幅 减少的创建和销毁开销,是制造 Go 号称的高并发的根本原因。另外, goroutine 的简单易用,也在语言层面上给予了开发者巨大的便利。并发不是并行:Concurrency Is原创 2017-08-13 07:16:00 · 1011 阅读 · 0 评论 -
Go 接口 学习笔记
接口interface接口是一个或多个方法签名的集合只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显式声明实现了哪个接口,这称为 Structural Typing接口只有方法声明,没有实现,没有数据字段接口可以匿名嵌入其它接口,或嵌入到结构中将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,既无法修改复制品的状态,也无法获取指针只有当接口存储的类型和对原创 2017-08-12 10:46:20 · 632 阅读 · 0 评论 -
Go 方法 学习笔记
方法methodGo 中虽没有class,但依旧有method通过显示说明receiver来实现与某个类型的组合只能为同一个包中的类型定义方法Receiver 可以是类型的值或者指针不存在方法重载可以使用值或指针来调用方法,编译器会自动完成转换从某种意义上来说,方法是函数的语法糖,因为receiver其实就是方法所接收的第1个参数(Method Value vs. Method Exp原创 2017-08-12 10:27:53 · 451 阅读 · 0 评论 -
Go 结构 学习笔记
结构structGo 中的struct与C中的struct非常相似,并且Go没有class使用 type struct{} 定义结构,名称遵循可见性规则支持指向自身的指针类型成员支持匿名结构,可用作成员或定义成员变量匿名结构也可以用于map的值可以使用字面值对结构进行初始化允许直接通过指针来读写结构成员相同类型的成员可进行直接拷贝赋值支持 == 与 !=比较运算符,但不支持 >原创 2017-08-12 10:10:52 · 768 阅读 · 0 评论 -
Go 函数 学习笔记
函数function:Go 函数 不支持 嵌套、重载和默认参数 但支持以下特性:无需声明原型、不定长度变参、多返回值、命名返回值参数匿名函数、闭包定义函数使用关键字 func,且左大括号不能另起一行函数也可以作为一种类型使用deferdefer的执行方式类似其它语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行,即使函数发生严重错误也会执行。支持匿名函数的调用常用于资原创 2017-08-12 09:44:47 · 586 阅读 · 0 评论 -
Go 结构体 Json 互转
1、结构体转Jsonjsons, errs := json.Marshal(cert)if errs != nil { fmt.Println(errs.Error())}fmt.Println(string(jsons))2、Json转结构体 ··· cert1 := new(lbv1alpha1.Cert) json.Unmarshal([]byte(jsons), &cer原创 2017-11-15 19:22:49 · 1372 阅读 · 0 评论 -
Go中分配原语:new
Go中的new,是一个用来分配内存的内建函数,但是不像在其它语言中,它并不初始化内存,只是将其置零。也就是说,new(T)会为T类型的新项目,分配被置零的存储,并且返回它的地址,一个类型为*T的值。在Go的术语中,其返回一个指向新分配的类型为T,值为零的指针。 由于new返回的内存是被置零的,这会有助于你将数据结构设计成,每个类型的零值都可以使用,而不需要进一步初始化。这意味着,数据结构的用户原创 2017-11-15 19:41:24 · 551 阅读 · 0 评论 -
Go 常量、init、数组、类型转换与断言、Recover
一、常量 Go中的常量仅仅就是—常量。它们是在编译时被创建,即使被定义为函数局部的也如此,并且只能是数字,字符(符文),字符串或者布尔类型。由于编译时的限制,定义它们的表达式必须为能被编译器求值的常量表达式。例如,1<<3是一个常量表达式,而math.Sin(math.Pi/4)不是,因为函数调用math.Sin需要在运行时才发生。二、init 每个源文件可以定义自己的不带参数的(nil原创 2017-11-15 20:02:03 · 2189 阅读 · 0 评论 -
Golang json 解析
背景: 最近在用iris做web端的时候,遇到了这么一个问题,前端传过来的json串如下:{ "Name": "jiankunking", "Age": 12, "BlogArticles": { "one": { "Detail": "csdn blog", "Author": "jiankun原创 2018-01-27 14:50:12 · 2567 阅读 · 0 评论 -
Golang Cannot use ss(type AAA) as type AAA in map index
问题出现的背景: 今天对接别人api的时候,对方引用了kubernetes下的client-go,具体信息如下: { "ImportPath": "k8s.io/client-go/pkg/api/v1", "Comment": "v4.0.0-beta.0", "Rev": "df46f7f13b3da19b90b8b原创 2018-01-26 19:16:04 · 5796 阅读 · 1 评论 -
goroutine 调度器(scheduler)
虽然golang的最小调度单元为协程(goroutine),但是操作系统最小的调度单元依然还是线程,所以golang scheduler(golang调度器)其要做的工作是如何将众多的goroutine放在有限的线程上进行高效而公平的调度。操作系统的调度不失为高效和公平,比如CFS调度算法,那么go为何要引入goroutine?原因很多,有人会说goroutine 相比于linux的pthre转载 2018-01-14 15:32:15 · 1920 阅读 · 0 评论 -
Go 1.9 sync Map 源码阅读笔记
1. 空间换时间。 通过冗余的两个数据结构(read、dirty),实现加锁对性能的影响。2. 使用只读数据(read),避免读写冲突。3. 动态调整,miss次数多了之后,将dirty数据提升为read。4. double-checking。5. 延迟删除。 删除一个键值只是打标记(会将key对应value的pointer置为nil,但read中仍然有这个key:key;value:nil的键值对),只有在提升dirty的时候才清理删除的数据。6. 优先从read读取、更新、删除,因为对read原创 2019-05-18 08:58:35 · 4045 阅读 · 1 评论 -
go errgroup 用法示例
一、demopackage mainimport ( "fmt" "time" xContext "golang.org/x/net/context" "golang.org/x/sync/errgroup")func main() { ctx, cancel := xContext.WithCancel(xContext.Backgroun原创 2017-12-16 12:15:51 · 3877 阅读 · 4 评论