ALOVN

志当存高远

Go语言中的panic和recover

golang panic and recover

panic 我们已经知道当前执行的goroutine中有一个defer链表的头指针,其实它也有一个panic链表头指针,panic链表链起来的是一个个_panic结构体。和defer链表一样,发生panic时也是在链表头插入新的_panic结构体。链表头上的panic就是当前正在执行的那一个。 1 2 3 4 5 6 //src/runtime/runtime2.go#L403 type...

Go语言中的defer

golang defer

关于defer我们知道它会在函数返回之前,倒序执行。 1 2 3 4 func A() { defer B() //code to to something } 像这样的一段代码,编译后的伪指令是这样的: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func A() { //第一个参数是defer函数的参数加返回值共占用多大空间 ...

Go语言中的闭包

golang closure function

funcval Go语言中函数是头等对象,可以作为参数传递,可以做函数的返回值,也可以绑定到变量,Go语言称这样的参数为 function value。 函数的指令在编译期间生成,而 function value 本质上是一个指针,但是并不直接指向函数指令入口,而是指向一个 runtime.funcval 结构体: 1 2 3 4 5 //src/runtime/runtime2.go...

Go语言中的函数调用栈

golang function

我们按照编程语言的语法定义的函数会被编译器编译为一堆堆机器指令,写入可执行文件,程序执行时可执行文件被加载到内存中,这些机器指令对应到虚拟地址空间中,位于代码段。 如果在一个函数中调用另外一个函数,编译器就会对应生成一条 call 指令,当程序执行到这条指令时,就会跳转到被调用函数的入口处开始执行,而每个函数的最后都有一条 ret 指令,负责在函数结束后跳回到调用处,继续执行。 函数执行...

Go语言中的map

golang map

哈希表 说到键值对的存储,就会想到哈希表,哈希表的实现通常会用一堆bucket桶来存储键值对。若要新增一个键值对到哈希表,就要选择一个桶,那么怎么选存到哪个桶? 选择桶算法 假设有m个桶(桶编号区间就为0到m-1),先通过哈希函数把『键』处理一下得到一个哈希值,现在要利用这个哈希值从一堆桶中选择一个,有两种方法比较常用: 1.取模法 取模法就是用哈希值与桶的个数m进行取模运算,得到...

Go语言中的内存对齐

golang memory alignment

内存对齐 CPU 要想从内存读取数据,需要通过地址总线把地址传输给内存,内存准备好数据后输出到数据总线交给CPU。 1 2 地址总线 数据总线 CPU —————————> RAM —————————> CPU 如果地址总线只有8根,那这个地址就只有8位,可以表示256个地址。因为表示不了更多的地址,就不能使用更大的内存,所以256就是8根地...

Go语言中的切片

golang slice

slice 结构 slice 有三个部分:元素存哪里、存了多少个元素、可以存多少个元素。 slice结构在golang源码中就是这样定义的: 1 2 3 4 5 type slice struct { array unsafe.Pointer len int cap int } 创建slice 创建一个slice 可以使用以下几种方式。 直接声明 声明一个整型sli...

Go语言中的字符串

golang string

字符集 一个bit可以是0也可以是1,8个bit组成一个byte。全为0时代表数字0,全为1时代表数字255: 1 2 00000000 //0 11111111 //255 一个byte可以表示256个数字。两个byte可以表示65536个数字, 整数可以这样存,那字符呢? 对收录的字符进行一一编号, 然后得到一个字符编号对照表,这就是字符集。一个字符按映射关系对应到一个数字。比...

Kubernetes RBAC 鉴权

Kubernetes RBAC

RBAC 全称 Role Based Access Control,Kubernetes是基于角色访问控制实现授权决策。管理员可通过 Kubernetes API 动态配置权限策略。 RBAC API 声明了四种 Kubernetes 对象:Role、ClusterRole、RoleBinding 和 ClusterRoleBinding。可以通过 kubectl 工具查看管理描述对象。 ...

Kubernetes 使用NFS动态卷

Kubernetes uses NFS dynamic volumes

K8S 通过引入 PV 和 PVC 的概念,可以让集群的管理人员和开发人员各司其职。不过也增加了额外 PV 和 PVC 创建、绑定、删除、回收等资源管理的工作,也显现出了存储方面的流程复杂和繁琐。 K8S 又引入了 StorageClass 动态卷的概念,可以使得存储能够灵活分配,可以按需请求自动创建存储卷。如果没有动态卷,集群管理员必须通过 Kubernetes 集群创建 Persist...