Go
Go大杂烩
小马的马甲
这个作者很懒,什么都没留下…
展开
-
Golang死锁发生场景及排查
简单的死锁多发生在函数调用,A函数调用B函数(可能是其他人写的),获取同一把锁,死锁百分百出现。type SafeMap struct { m map[int]int lock sync.RWMutex}func main() { go StartHTTPDebuger() sm := &SafeMap{m: make(map[int]int)} A(sm)}func A(sm *SafeMap) int { sm.lock.Lock() defer sm.loc原创 2022-04-09 20:58:00 · 1193 阅读 · 0 评论 -
golang的Option选项模式
相信大家在调用一些官方包的函数时,经常会遇到传参为option可选项,尤其是加载配置。当一个函数可选参数较多或者以后需要拓展参数时,不妨使用Option选项模式。package mainimport "fmt"type Config struct { Host string Port int MaxNum int}type Option func(cfg *Config)func WithHost(host string) Option { return func(cfg *Co原创 2022-03-26 23:10:02 · 739 阅读 · 0 评论 -
【 golang内存逃逸】
golang内存逃逸golang中内存分配有栈(stack)和堆(heap)两种;栈分配:分配速度快,只需要CPU的两个指令“PUSH”和“RELEASE“进行分配和释放。堆分配:分配速度较慢,首先需要找到一块大小合适的内存块,之后还需要gc垃圾回收才能释放。golang中常见的内存逃逸场景1.函数内将局部变量指针返回,被外部引用,其生命周期大于栈,溢出。type User struct {}func NewUser() *User{ user := User{} return &a原创 2022-03-25 19:06:24 · 1878 阅读 · 0 评论 -
go并发模型GPM
线程模型的三种实现方式:用户级线程:M:1对应关系,多个用户态线程对应着一个内核线程,用户态线程的创建、终止、切换、同步等线程工作必须由自身来完成。内核级线程:1:1对应关系,直接调用操作系统的内核线程,所有线程的创建、终止、切换、同步等操作都由内核线程来完成。两级线程:M:N对应关系,这种线程模型会先创建多个内核级线程,然后用自身的用户级线程去对应创建的多个内核级线程,自身的用户级线程需要本身程序去调度,内核级的线程交给操作系统内核去调度。go实现了特殊的两级线程模型,用户调度器实现用户线程到KS原创 2021-10-16 22:37:44 · 334 阅读 · 0 评论 -
interface与nil比较
go语言中有两种类型的接口,一种是不带方法的接口,底层通过runtime.eface实现(empty face);另一种是带有一组方法的接口,底层通过runtime.iface实现。runtime.eface源码如下:type eface struct { _type *_type //指向类型的指针 data unsafe.Point //指向底层数据}type _type struct { size uintptr // type size ,size 字段存原创 2021-09-19 21:42:18 · 200 阅读 · 0 评论 -
golang中for range遍历切片
func main() { a := []int{1, 2, 3} var newArr []*int for _, v := range a { newArr = append(newArr, &v) } for _, v := range newArr { fmt.Println(*v) }}$ go run main.go333为什么不是1,2,3呢?原来go语言编译器会在编译阶段会将for range循环转成经典的for i 循环。代码如下:ha :=原创 2021-09-11 11:19:03 · 942 阅读 · 0 评论 -
2021-08-19
golang踩坑日记——协程在for循环里引用迭代变量func main(){ wg := sync.WaitGroup{} wg.Add(10) for i := 0; i < 10; i++ { go func() { fmt.Println("Ai: ", i) wg.Done() }() } wg.Wait()}输出结果:Ai: 10Ai: 10Ai: 10Ai: 10Ai: 10Ai: 10Ai: 10Ai原创 2021-08-19 16:35:53 · 49 阅读 · 0 评论