随笔- 452
文章- 302
评论- 28
阅读-
64万
随笔分类 - golang
golang中延迟函数调用导致的暂时性内存泄露
摘要:golang中延迟函数调用的知识点 个较大的延迟调用队列可能会消耗很多内存。 另外,某些资源可能因为某些调用被延迟的太久而未能被及时释放。 比如,如果下面的例子中的函数需要处理大量的文件,则在此函数退出之前,将有大量的文件句柄得不到释放。 对于这种情形,我们应该使用一个匿名函数将需要及时执行延迟的调
阅读全文
golang的基础概念
摘要:何为runtime? 很多语言都有 Runtime go的runtime特点 没有虚拟机的概念 Runtime 作为程序的一部分打包进二进制产物 Runtime 随用户程序一起运行 Runtime 与用户程序没有明显界限,直接通过函数调用 内存管理能力 垃圾回收能力(GC) 超强的并发能力(协程调度
阅读全文
go知名第三方包ssdb
摘要:因为beego中cache模块中使用了ssdb,所以准备学习下ssdb (1)ssdb简介 (2)ssdb的基本操作 (3)gossdb怎么使用? 1、ssdb简介 SSDB 是一个 C/C++ 语言开发的高性能 NoSQL 数据库, 支持 KV, list, map(hash), zset(sor
阅读全文
golang 协程、延迟函数调用、以及恐慌和恢复
摘要:此篇文章将介绍协程和延迟函数调用。协程和延迟函数调用是Go中比较独特的两个特性。 恐慌和恢复也将在此篇文章中得到简单介绍。本文并非全面地对这些特性进行介绍,后面的其它文章会陆续补全本文的未介绍的内容。 协程(goroutine) 现代CPU一般含有多个核,并且一个核可能支持多线程。换句话说,现代CP
阅读全文
golang中goto跳转语句和跳转标签声明
摘要:和很多其它语言一样,Go也支持goto跳转语句。 在一个goto跳转语句中,goto关键字后必须跟随一个表明跳转到何处的跳转标签。 我们使用LabelName:这样的形式来声明一个名为LabelName的跳转标签,其中LabelName必须为一个标识符。 一个不为空标识符的跳转标签声明后必须被使用至
阅读全文
golang1.18 泛型学习
摘要:泛型出现之前 在泛型出现之前,go语言的灵活性很大部分是基于interface{}这个空接口来保证的。任何变量都可以继承空接口,但是在使用变量的时候,就需要对变量进行类型断言。而类型断言是基于反射来实现的,反射中的类型错误在真正运行的时候才会引发panic,而且大量使用反射会使得程序的效率变得非常低
阅读全文
golang wire 依赖注入
摘要:一.假设需要定义多个有依赖的启动项(代码如下) package main import ("fmt") type Message string func NewMessage() Message { return Message("Hi there!") } type Event struct {
阅读全文
go并行编程4-context
摘要:context 在 Go 服务中,每个传入的请求都在其自己的goroutine 中处理。请求处理程序通常启动额外的 goroutine 来访问其他后端,如数据库和 RPC 服务。处理请求的 goroutine 通常需要访问特定于请求(request-specific context)的值,例如最终用
阅读全文
gobing并行编程3-sync
摘要:传统的线程模型(通常在编写 Java、C++ 和Python 程序时使用)程序员在线程之间通信需要使用共享内存。通常,共享数据结构由锁保护,线程将争用这些锁来访问数据。 在某些情况下,通过使用线程安全的数据结构(如 Python 的Queue),这会变得更容易。 Go 的并发原语 goroutine
阅读全文
Go Concurrency Patterns: Pipelines and cancellation
摘要:Sameer Ajmani13 March 2014 Introduction Go’s concurrency primitives make it easy to construct streaming data pipelines that make efficient use of I/O
阅读全文
Go Concurrency Patterns: Timing out, moving on
摘要:Andrew Gerrand23 September 2010 Concurrent programming has its own idioms. A good example is timeouts. Although Go’s channels do not support them dire
阅读全文
golang 详解协程——errgroup
摘要:我们把一个复杂的任务,尤其是依赖多个微服务 rpc 需要聚合数据的任务,分解为依赖和并行,依赖的意思为: 需要上游 a 的数据才能访问下游 b 的数据进行组合。但是并行的意思为: 分解为多个小任务并行执行,最终等全部执行完毕。 https://pkg.go.dev/golang.org/x/sync
阅读全文
go并行编程-2-内存模型
摘要:https://golang.org/ref/mem 如何保证在一个 goroutine 中看到在另一个 goroutine 修改的变量的值,如果程序中修改数据时有其他 goroutine 同时读取,那么必须将读取串行化。为了串行化访问,请使用 channel 或其他同步原语,例如 sync 和 s
阅读全文
go并行编程-1-goroutine
摘要:1,进程和线程 操作系统会为该应用程序创建一个进程。作为一个应用程序,它像一个为所有资源而运 行的容器。这些资源包括内存地址空间、文件句柄、设备和线程。线程是操作系统调度的一种执行路径,用于在处理器执行我们在函数中编写的代码。一 个进程从一个线程开始,即主线程,当该线程终止时,进程终止。这是因为主线
阅读全文
pkg/errors的用法
摘要:目前实现最优雅,打印堆栈良好的包。参考: https://studygolang.com/articles/17430?fr=sidebar 下载安装 go get -x github.com/pkg/errors 跟踪堆栈信息的函数使用 // 新生成一个错误, 带堆栈信息 func New(mes
阅读全文
golang恐慌和恢复panic/recover
摘要:协程、延迟函数调用、以及恐慌和恢复 package main import ( "errors" "fmt" ) func test() (err error){ defer func(){ if aaa := recover();aaa !=nil{ err = errors.New(fmt.Sp
阅读全文
详解golang恐慌和恢复原理 panic recover
摘要:详解恐慌和恢复原理 恐慌和恢复原理已经在前面的文章中介绍过了。 一些恐慌和恢复用例也在上一篇文章中得到了展示。 本文将详细解释一下恐慌和恢复原理。函数调用的退出阶段也将被一并详细解释。 函数调用的退出阶段 在Go中,一个函数调用在其退出完毕之前可能将经历一个退出阶段。 在此退出阶段,所有在执行此函数
阅读全文
golang代码生成器
摘要:主要使用工具: github.com/urfave/cli初识cli工具包 package main import ( "go_cli/until" "log" "os" "github.com/urfave/cli" ) func main() { var opt until.Option var
阅读全文