摘要:
一、关于 Go GC 优化的手段 设置 GOGC / debug.SetGCPercent() 这两种方式的原理和效果都是一样的,GOGC 默认值是 100,也就是下次 GC 触发的 heap 的大小是这次 GC 之后的 heap 的一倍。GO 的 GC 是标记-清除方式,当 GC 会触发时全量遍历 阅读全文
摘要:
一、sync.Cond 的使用场景 一句话总结:sync.Cond 条件变量用来协调想要访问共享资源的 那些 goroutine,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻塞的 goroutine。 1、sync.Cond 基于互斥锁/读写锁,它和互斥锁的区别是什么呢? 互斥锁 syn 阅读全文
摘要:
一、堆内存与栈内存 堆(Heap):一般来讲是人为手动进行管理,手动申请、分配、释放。堆适合不可预知大小的内存分配,这也意味着为此付出的代价是分配速度较慢,而且会形成内存碎片。 栈(Stack):由编译器进行管理,自动申请、分配、释放。一般不会太大,因此栈的分配和回收速度非常快;我们常见的函数参数( 阅读全文
摘要:
一、现状 在Go语言中,goroutine的创建成本很低,调度效率高,Go语言在设计时就是按以数万个goroutine为规范进行设计的,数十万个并不意外,但是goroutine在内存占用方面确实具有有限的成本,你不能创造无限数量的它们,比如这个例子: ch := generate() go func 阅读全文
摘要:
垃圾回收历史进程 一、为什么选择标记清除 1、判断对象存活的思路 在 GC 领域里,判断对象存活的主流思路是两个,「引用计数」和「可达性分析」。 2、引用计数 顾名思义,引用计数的思路就是给每个对象进行计数,每被其它对象引用一次,计数就 +1,引用失效后,计数就 -1。当计数器的数值为 0,就意味着 阅读全文
摘要:
一 、介绍 Pod是kubernetes的最⼩管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建 控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后 阅读全文
摘要:
一、gRPC介绍 gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 gRPC有四种服务方法: Unary RPCs,一元RPC。客户端发送一个请求到服务端,服务端响应一个请求。 r 阅读全文
摘要:
一、概述 当切片的容量不足时,我们会调用 runtime.growslice 函数为切片扩容,扩容是为切片分配新的内存空间并拷贝原切片中元素的过程,我们先来看新切片的容量是如何确定的,使用的是 growslice 函数 func growslice(et *_type, old slice, cap 阅读全文
摘要:
PHP 的朋友应该会被 PHP 中两大特性折服: 1、强大的 array,一切皆Array; 2、强大的函数库,函数类型非常丰富。 一、简单示例 1、例如:md5函数 Go版本写法: package main import ( "crypto/md5" "fmt" "io" ) func Md5(s 阅读全文
摘要:
一、CLI 命令(spf13/cobra) GitHub地址:https://github.com/spf13/cobra Cobra既是一个创建强大的现代CLI应用程序的库,也是一个生成应用程序和命令的程序。可以使用这个库来管理命令应用程序,执行runner应用程序,初始化配置,病启动Reast 阅读全文
摘要:
一、概括 使用哈希表的目的就是要快速查找到目标 key,然而,随着向 map 中添加的 key 越来越多,key 发生碰撞的概率也越来越大。bucket 中的 8 个 cell 会被逐渐塞满,查找、插入、删除 key 的效率也会越来越低。最理想的情况是一个 bucket 只装一个 key,这样,就能 阅读全文
摘要:
一、热加载是什么 热加载:当我们对代码进行修改时,程序能够自动重新加载并执行,这在我们开发中是非常便利的,可以快速进行代码测试,省去了每次手动重新编译。 二、使用Air进行热加载 地址:https://github.com/cosmtrek/air 具有以下特性: 彩色日志输出 自定义构建或二进制命 阅读全文
摘要:
一、map 是什么 map 是 Go 中用于存储 key-value 关系数据的数据结构,类似 C++ 中的 map,Python 中的 dict。Go 中 map 的使用很简单,但是对于初学者,经常会犯两个错误:没有初始化,并发读写。 1、未初始化的 map 都是 nil,直接赋值会报 panic 阅读全文
摘要:
一、哪些类型可以作为map的key ? 1、可比较的类型都可以作为map key boolean 布尔值 numeric 数字 包括整型、浮点型,以及复数 string 字符串 pointer 指针 两个指针类型相等,表示两指针指向同一个变量或者同为nil channel 通道 两个通道类型相等,表 阅读全文
摘要:
一、关于struct {} struct是Go中的关键字,用于定义结构类型 type User struct { Name string Age int } struct {} :表示struct类型 struct {} 是一种普通数据类型,一个无元素的结构体类型,通常在没有信息存储时使用。 优点是 阅读全文