
记录一次 内存溢出 and 性能调优的经历
写在前面大家都知道 Golang 是一门带GC的语言。 大多数情况下我们不需要担心内存溢出问题。但是。。。并不代表他完全不会内存溢出,我将之前一个服务进行重构(改了150多个文件) 当我进行灰度发布的时候,发现:居然内存溢出了!左边是重构前的版本,右边是灰度发布版本。 可以清楚看到内存飙升 CPU

golang 协程中使用 context 细节
前言为了让我们服务承载更大的并发量,通常我们使用线程来优化自己的代码。线程是cpu的最小调度单位 频繁创建线程 显然是 很大的开销。 于是乎协程诞生了,轻量级线程 可随时切换。 在go 中 协程的 开销非常小 2kb 相比于 java 的 2mb 要小很多。GMP调度模型示例如何开一个携程呢?go

macos 下 goland # runtime/cgo ld: library not found for -lpthread clang-13: error: linker 问题解决
问题在使用goland进行debug时,报错 无法进行调试# runtime/cgold: library not found for -lpthreadclang-13: error: linker command failed with exit code 1 (use -v to see in

用go语言实现一个课表推送系统
项目介绍基于 golang 的一个定时消息推送系统。工作原理: CALLBACK流程:系统由 阻塞协程 触发器 任务管理器 三部分组成。实现流程: 务管理内有一个任务列表,通过注册任务,来向任务列表添加任务。然后启动一个阻塞协程去轮询任务列表,并且将当前时间通知到每一个任务。具体触发操作在任务函

go语言-module
开启goModuleset GO111MODULE=on goproxy设置模块代理加速下载goProxy基本命令go mod init 生成gomod文件go mod download 下载依赖go mod tidy 整理依赖go mod graph 查看依赖go mode edit 编辑mod文

go语言-channel和range,select
channel和rangepackage mainimport "fmt"func main() {c:= make(chan int)go func() {for i:=0;i<3;i++{c<-i}// 当不需要再次发送数据后需要关闭channel,如果被关闭可能

go语言-channel
作用goroutine之间互相通信无缓冲channelmake(chan xxx)无缓冲的channel会阻塞,必须等待从channel取出才结束package mainimport "fmt"func main() {// 无缓冲channelc:=make(chan int)

go语言-goroutine
创建一个协程golang创建协程的关键字是gogo xxxx()package mainimport ("fmt""time")func task(id int) {for {fmt.Println("child task:",id)t

go语言-结构体标签
用法type Box struct {Width int `info:"width" desc:"盒子宽度"`Height int `info:"height" desc:"盒子高度"`}通过反射获取package ma

go语言-interface
interface所有类型都实现了 interface{} 接口使用interface可以实现类型断言package mainimport "fmt"// 万能数据类型func Func(arg interface{}) {// 类型断言// xxx.(type)val,ok

go语言-面向对象编程
type给类型起别名 相当于 C的typedefpackage mainimport "fmt"func main() {// 给类型起别名// type 类型名 类型type INT intvar a INTfmt.Println(a)}定义结构体package mainimp

go语言-defer
用法defer 语句作用在当前函数执行完毕后,依次调用。(方法栈)示例package mainimport "fmt"func do() {defer fmt.Println("Hello:1")defer fmt.Println("Hello:2

go语言-const和iota
constgolang里const代表常量package mainimport "fmt"// 常量const STR = "Hello,World!"func main() {// 不可修改// STR="A"fmt.Println(ST