
Go
文章平均质量分 77
ai 翠er
这个作者很懒,什么都没留下…
展开
-
Golang Sync.WaitGroup 使用及原理
Golang Sync.WaitGroup 使用及原理使用func main() { var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() fmt.Println("Hello WaitGroup!") }() } wg.Wait()}实现首先看 waitgroup 到底是什么数据结构type WaitGroup struct { noC原创 2022-02-22 15:14:15 · 639 阅读 · 0 评论 -
Gin 如何动态生成模型 swagger 文档
在做 API 接口开发时, 一般会统一 API 返回格式, 例如{ "code": 200, "data": { //xxxxx //xxxxx }, "message": "OK"}在后端代码定义中, 也会定义一个结构体来对应这种结构, 并且, 由于 data 字段里的数据是未知的(与具体业务相关), 所以会定义一个 interface 来接收type ApiResponse struct { Code int `原创 2021-12-01 20:33:40 · 440 阅读 · 0 评论 -
【译】Go:逃逸分析介绍
本文基于 Go 1.13逃逸分析是 Go 编译器的一部分。它分析源代码并确定哪些变量应该分配到栈上、哪些逃逸到堆上。静态分析Go 在编译阶段就定义了什么应该在堆,什么应该在栈上。在 go run 或 go build 时加上 -gcflags="-m" 就可以得到分析结果。这里有个简单的例子:func main() { num := getRandom() println(*num)}//go:noinlinefunc getRandom() *int { tmp := rand.翻译 2021-07-20 16:52:55 · 187 阅读 · 0 评论 -
深入理解 Go Map
文章参考:Go语言设计与实现3.3 哈希表哈希表的意义不言而喻,它能提供 O(1) 复杂度的读写性能,所以主流编程语言中都内置有哈希表。哈希表的关键在于哈希函数, 好的哈希函数能减少哈希碰撞,提供最优秀的读写性能。哈希碰撞因为没有完美的哈希函数, 所以哈希碰撞不可避免,一般有开放寻址法和拉链法,其中拉链法是主流开放寻址法:当向哈希表写入新的数据时,如果发生了冲突,就会将键值对写入到下一个索引不为空的位置拉链法:拉链法一般使用数组和链表组成,数据经过哈希函数得到一个桶时,先遍历桶中.原创 2021-07-12 10:55:57 · 103 阅读 · 0 评论 -
【译】Go:程序如何恢复?
原文:https://medium.com/a-journey-with-go/go-how-does-a-program-recover-fbbbf27cc31e 当程序不能正确处理错误时, 会触发 Go 的 panic,比如无效的内存访问。如果错误时意外发生的,并且没有别的方法来处理它,开发人员也可以触发 panic。理解恢复或终止的流程有助于理解程序 panic 的后果。多个函数帧关于 panic 和 recover 有很多典型的例子和文档,包括 Go 博客中的 “Defer.翻译 2021-07-02 23:59:15 · 196 阅读 · 0 评论 -
【译】Go:管理多个错误
原文:https://medium.com/a-journey-with-go/go-multiple-errors-management-a67477628cf1 关于开发者使用Go遇到的最大挑战的年度调查报告中,错误管理是经常被争论和反复提起的话题。然而,当涉及到在并发环境中处理错误或为相同的 goroutine 组合多个错误时,Go 提供了很好的包,使多个错误的管理变得很容易单个 goroutine,多个错误例如,当您处理具有重试策略的代码时,将多个错误合并成一个非常有用。下.翻译 2021-07-01 21:23:06 · 508 阅读 · 0 评论