InterestingFigure
Salted fish in hand, I have the world.
展开
-
如何加密传输和存储用户密码
如果我们想要尽可能保证用户的信息安全,我们需要做以下的工作使用https请求利用RSA加密密码并传输数据用BCrypt或者PBKDF2单向加密,并存储。原创 2024-05-08 17:31:04 · 409 阅读 · 0 评论 -
四月三号,记录下,缓口气~
三月也很忙,四月吧~原创 2023-04-03 15:50:16 · 166 阅读 · 0 评论 -
哇!三月也很忙,四月吧~
三月也很忙,四月吧~原创 2023-03-09 14:02:04 · 123 阅读 · 0 评论 -
Go实验性的大一统日志库
在 2022 年 8 月,Go 团队的 @ Jonathan Amsterdam 发起了 discussion: structured, leveled logging[1] 的讨论,试图与这个乱象再度一决雌雄。除此之外,在用户场景上,有着不包含上下文(context)信息、性能不够强劲、无法引入自定义插件等扩展诉求。基本上第三方库均有实现的,基本都用户的痛点之一。毕竟已经 10 年了,本讨论中得到了许多人的建议和推进,成功孵化。目标涵盖了前文背景中提到的痛点。原创 2022-12-12 17:23:37 · 524 阅读 · 0 评论 -
Goland快捷键整理
Ctrl + Shift + ↑/↓ 将光标所在的行进行上下移动(也可以使用 Alt+Shift+↑/↓)CTRL+ALT+T 把选中的代码放在 TRY{} IF{} ELSE{} 里。CTRL+SHIFT+P 查看表达式类型(在表达式上或者表达式末尾使用)Ctrl + Shift + Alt + N 查找类中的方法或变量。Ctrl + Alt + Space 类名或接口名提示(代码提示)CTRL+ALT+F7 选中的字符查找工程出现的地方。CTRL+SHIFT+ALT+N 查找方法或变量。原创 2022-08-22 16:07:06 · 1234 阅读 · 0 评论 -
Go 语言 | 1.16 新增的embed在各流行Web框架中的应用
在前几天刚发布的Golang 1.16版本中,新增了一个大家期待已久的特性//go:embed,它的作用就是可以在Go语言应用程序中包含任何文件、目录的内容,也就是说我们可以把文件以及目录中的内容都打包到生成的Go语言应用程序中了,部署的时候,直接扔一个二进制文件就可以了,不用再包含一些静态文件了,因为它们已经被打包到生成的应用程序中了。Go embed的使用非常简单,通过//go:embed指令即可,下面我通过一个例子说明:以上代码中,主要是通过//go:embed指令达到读取文件内容的目的。//go:翻译 2022-06-27 14:39:46 · 208 阅读 · 0 评论 -
Go 官方谚语10+条
Go 官方谚语10+条Go 官方谚语10+条Go 官方谚语10+条不要通过共享内存来通信,通过通信来共享内存(Don’t communicate by sharing memory, share memory by communicating)。并发不是并行(Concurrency is not parallelism)。通道是协调的,互斥是串行的(Channels orchestrate; mutexes serialize)。接口越大,抽象性越弱(The bigger the interfa原创 2022-05-18 17:21:46 · 230 阅读 · 0 评论 -
你犯过这些难顶的 Go 编码错误吗
你犯过这些难顶的 Go 编码错误吗传送门传送门你有犯过这些 Go 编码错误吗(一)?你犯过这些难顶的 Go 编码错误吗(二)?原创 2022-05-18 16:59:19 · 111 阅读 · 0 评论 -
Go 内存泄漏排查两例
Go 内存泄漏排查两例例1:Goroutine 泄漏现象排查结论httpclientserver解决thriftserverTips例2:内存居高不下现象排查结论GO 内存释放策略解决方法例1:Goroutine 泄漏现象NumGoroutine 指标持续上涨,且低峰期未下降,判断出现了 Goroutine 泄漏现象。排查通过访问线上服务 pprof 暴露出来的 HTTP 接口,拿到当前所有协程的堆栈信息;curl http://「ip:port」/debug/pprof/goroutine转载 2022-05-18 16:53:06 · 711 阅读 · 0 评论 -
Go语言内存逃逸分析
Go语言内存逃逸分析简介Go cmdgo build编译参数查看内存逃逸简介可以添加–new-from-rev=master 使用增量扫描可以添加–tests=false 跳过test配置 --fast 加速golangci-lint run --tests=false --timeout=5m --new-from-rev=master -c lint.yml ./... 相对master分支增量扫描Go cmdfmt gofmt(重新格式化)包源generate原创 2022-05-17 18:00:00 · 356 阅读 · 0 评论 -
Go静态代码检查工具-golangci-lint
Go静态代码检查工具-golangci-lint准备优点文档安装使用整合到golandlinters支持的linters默认开启的linters默认未开启的linters配置优先级低于命令准备go install golang.org/x/tools/cmd/goimports优点https://github.com/golangci/golangci-lintGolangCI-Lint是一个lint聚合器,它的速度很快,平均速度是gometalinter的5倍。它易于集成和使用,具有良好的原创 2022-05-17 17:58:06 · 962 阅读 · 0 评论 -
如何在 Go 中写出高效的单元测试
文章目录单测的重要性Go 单测基础知识基本规则go test 使用表格测试HTTP 测试其它测试框架TestifyGoConveyGinkGo其它 Mock 库GoMockHTTPMockSQLMock与 Docker 集成总结参考单测的重要性方便 debugging方便代码重构提升代码质量使整个过程敏捷Go 单测基础知识基本规则通常我们的单元测试代码都放在以 _test.go 结尾的文件中,该文件一般和目标代码放在同一个 package 中。测试的方法以为 Test 开头,并且拥转载 2022-01-14 11:20:43 · 620 阅读 · 0 评论 -
Docker更换国内镜像源
Docker更换国内镜像源Ubuntu安装DockerDocker国内源配置Docker国内源说明:Ubuntu安装Dockerhttps://docs.docker.com/engine/install/ubuntu/Docker国内源配置vim /etc/docker/daemon.json{ "registry-mirrors": [ "https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com"原创 2021-12-22 11:19:48 · 2123 阅读 · 0 评论 -
Go语言的GPM模型
0、引言一些相关知识进程占用内存:虚拟内存4GB(32bit OS)线程占用内存:大约4MB演进过程并发执行各种线程,切换线程会造成较大的性能损耗,多线程的同步竞争(锁、竞争资源冲突等)问题,最后还有上面说到的占用内存较大。系统分为内核空间和用户空间,可以通过这个思想,将线程分割开来作为一个个协程co-routine,内核空间存放内核线程,用户空间存放切割后的协程,中间通过协程调度器来维持工作。所以说,M:N的调度工作就交给了协程调度器,线程层面(即内核空间)语言控制不了,所以说语言间的区别主转载 2021-05-10 14:36:04 · 337 阅读 · 0 评论 -
Go语言的新类型声明和类型别名的区别
文章目录简介定义新类型类型别名(定义类型的新名字)参考代码代码简介区分新类型声明和类型别名的不同之处,虽然简单,却也是容易忽视的地方,这里做个简单介绍。定义新类型type关键字用来声明一个新类型:type 类型名称 底层类型新类型和底层类型是不可以互相赋值的,即新类型和底层类型是两种不同的类型。类型别名(定义类型的新名字)type 新名称 = 底层类型这条语句是给底层类型起了个新的名字,他们是等价类型,可以认为是为底层类型定义了个别名。这俩类型定义的变量可以互相赋值。其中rune原创 2020-09-09 18:18:48 · 443 阅读 · 0 评论 -
Go语言并发读写大文件样例
文章目录小文件读取按块读取大文件并发读写文件样例小文件读取package mainimport ( "fmt" "io/ioutil" "os")func main() string { f, err := os.Open("file/test") if err != nil { fmt.Println("read file fail", err) return "" } defer f.Close() fd, err := ioutil.ReadAll(f) if原创 2020-09-08 09:58:38 · 1774 阅读 · 0 评论 -
Go语言字符串拼接:strings.Builder和bytes.Buffer如何选择
文章目录标题字符串拼接性能差异选择标题字符串拼接package mainimport ( "bytes" "fmt" "strings")func main() { var str = []string{"aaa", "bbb", "ccc", "ddd"} fmt.Println(useStrings(str)) fmt.Println(useBytes(str))}func useStrings(input []string) string原创 2020-09-07 17:04:08 · 1439 阅读 · 0 评论 -
Go语言中使用JWT作为授权令牌
官网JWT官网简介JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。使用场景Authorization (授权) :这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。Information原创 2020-09-03 09:24:05 · 355 阅读 · 0 评论 -
Go语言简介
官网地址Go之所以叫Go,是想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物, 它的中文名叫做囊地鼠,他们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。...原创 2020-09-02 18:18:50 · 252 阅读 · 0 评论