摘要: 写出可测试的 Go 代码 https://mp.weixin.qq.com/s/addWJ6zVj1vZgNjh3xeRQg 剔除干扰因素 假设我们现在有一个根据时间判断报警信息发送速率的模块,白天工作时间允许大量发送报警信息,而晚上则减小发送速率,凌晨不允许发送报警短信。 // judgeRate 阅读全文
posted @ 2022-05-27 18:00 凌易说-lingyisay 阅读(114) 评论(0) 推荐(0) 编辑
摘要: go Channel 简介 channel是用于goroutine的数据通信,在Go中通过goroutine+channel的方式,可以简单、高效地解决并发问题。 channel设计思想 Go语言的并发模型基于CSP(Communicating Sequential Processes)理论。Go的 阅读全文
posted @ 2022-05-27 17:54 凌易说-lingyisay 阅读(406) 评论(0) 推荐(0) 编辑
摘要: go原子操作 go原子性用法 用法示例1:原子性增加值 package main import ( "fmt" "sync" "sync/atomic" ) func main() { var count int32 var wg sync.WaitGroup for i := 0; i < 10; 阅读全文
posted @ 2022-05-27 17:46 凌易说-lingyisay 阅读(490) 评论(0) 推荐(0) 编辑
摘要: sync.Map 结构体 type Map struct { mu Mutex read atomic.Value // readOnly dirty map[interface{}]*entry misses int } sync.Map设计思想(读多写少) sync.Map 采用“空间换时间”的 阅读全文
posted @ 2022-05-27 17:44 凌易说-lingyisay 阅读(462) 评论(0) 推荐(0) 编辑
摘要: golang Map map描述了一种键与值的映射关系,开发者通常会通过键来查询其对应的值。map最常见的底层实现有两种:基于Hash散列和基于平衡树,两者的存取时间复杂度不同,Go语言的map属于前者范畴。 Hash算法有两大核心:设计Hash函数和解决Hash冲突。 Map使用 声明&初始化 | 阅读全文
posted @ 2022-05-27 17:42 凌易说-lingyisay 阅读(1194) 评论(0) 推荐(0) 编辑
摘要: Context Context简介 context包是在go1.7版本中引入到标准库中。 在context包中Context一个接口有四个具体实现和六个函数 context包含 goroutine 的运行状态、环境、现场等信息。 context的作用就是在不同的goroutine之间同步请求特定的数 阅读全文
posted @ 2022-05-27 17:27 凌易说-lingyisay 阅读(955) 评论(0) 推荐(0) 编辑
摘要: 垃圾回收gc Go V1.3标记-清除算法 具体过程 第一步:暂停程序(STW)业务逻辑, 分类出可达和不可达的对象,然后做上标记 第二步, 开始标记,程序找出它所有可达的对象,并做上标记 第三步, 标记完了之后,然后开始清除未标记的对象。 操作非常简单,但是有一点需要额外注意:mark and s 阅读全文
posted @ 2022-05-27 17:22 凌易说-lingyisay 阅读(502) 评论(0) 推荐(1) 编辑
摘要: 【详细】go内存逃逸 什么是内存逃逸 内存逃逸:go中从栈内存逃逸到堆内存。 在c语言中,默认只要不是malloc分配的内存或者全局的变量,都在栈上分配的。当函数要返回一个局部变量地址的时候,我就说这个变量(这块内存)想要逃逸,这就是内存逃逸。 go的编译器,在编译的时候会做逃逸分析,分析这个变量( 阅读全文
posted @ 2022-05-27 16:55 凌易说-lingyisay 阅读(541) 评论(0) 推荐(0) 编辑
摘要: golang 栈、堆 https://segmentfault.com/a/1190000017498101 https://juejin.cn/post/6943596197349163015 https://xie.infoq.cn/article/530c735982a391604d0eebe 阅读全文
posted @ 2022-05-27 16:54 凌易说-lingyisay 阅读(1690) 评论(0) 推荐(0) 编辑
摘要: 函数调用栈 -gcflags 使用go build -gcflags -S once.go也可以得到汇编代码 -objdump 最终的机器码的汇编可以通过go tool objdump生成。 https://mp.weixin.qq.com/s/zcqzarXMJrDUY5DLXZXY1Q 我们按照 阅读全文
posted @ 2022-05-27 16:52 凌易说-lingyisay 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 接口 https://draveness.me/golang/docs/part2-foundation/ch04-basic/golang-interface/#421-概述 在 Java 中:实现接口需要显式地声明接口并实现所有方法; 在 Go 中:实现接口的所有方法就隐式地实现了接口; 接口实 阅读全文
posted @ 2022-05-27 16:45 凌易说-lingyisay 阅读(55) 评论(0) 推荐(0) 编辑
摘要: RPC RPC简介 RPC是远程过程调用的简称,是分布式系统中不同节点间流行的通信方式。在互联网时代,RPC已经和IPC一样成为一个不可或缺的基础构件。因此Go语言的标准库也提供了一个简单的RPC实现,我们将以此为入口学习RPC的各种用法。 RPC是远程过程调用的缩写(Remote Procedur 阅读全文
posted @ 2022-05-27 16:42 凌易说-lingyisay 阅读(666) 评论(0) 推荐(0) 编辑
摘要: Linux find和grep的区别 find:查找文件或目录 find命令 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 find -name ' 阅读全文
posted @ 2022-05-27 16:32 凌易说-lingyisay 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 内存逃逸 什么是内存逃逸 内存逃逸:go中从栈内存逃逸到堆内存。 在c语言中,默认只要不是malloc分配的内存或者全局的变量,都在栈上分配的。当函数要返回一个局部变量地址的时候,我就说这个变量(这块内存)想要逃逸,这就是内存逃逸。 go的编译器,在编译的时候会做逃逸分析,分析这个变量(这块内存)是 阅读全文
posted @ 2022-05-27 16:31 凌易说-lingyisay 阅读(96) 评论(0) 推荐(0) 编辑
摘要: go slice 切片 https://juejin.cn/post/6979108608122290212 结构体 type slice struct { array unsafe.Pointer//指针 len int // 长度 cap int // 容量 } 定义的三种方式 1、var 切片 阅读全文
posted @ 2022-05-27 16:30 凌易说-lingyisay 阅读(42) 评论(0) 推荐(0) 编辑