Golang 中的 RSA 加解密算法
November 1, 2022
本文受到 Gitlab 中
crypgo
项目启发,
作者在 Medium 中发表了一篇博文,
RSA cryptography in Golang 作为说明。
读完后发现代码中存在一些小问题,因此重整代码实现,使其更加实用。
本文受到 Gitlab 中
crypgo
项目启发,
作者在 Medium 中发表了一篇博文,
RSA cryptography in Golang 作为说明。
读完后发现代码中存在一些小问题,因此重整代码实现,使其更加实用。
Profiling 是指在程序执行过程中,收集能够反映程序执行状态的数据。 在软件工程中,性能分析(performance analysis,也称为 profiling), 是以收集程序运行时信息为手段研究程序行为的分析方法,是一种动态程序分析的方法。
...本文转自: Go 里面的 unsafe 包详解
...Go 语言中最常见的、也是经常被人提及的设计模式就是 —— 不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。
先入先出
目前的 Channel 收发操作均遵循了先入先出(FIFO)的设计,具体规则如下:
粗略的讲,Go 语言中 map 采用的是哈希查找表, 由一个 key 通过哈希函数得到哈希值, 64 位系统中就生成一个 64 bit 的哈希值, 由这个哈希值将 key 对应到不同的桶(bucket)中, 当有多个哈希映射到相同的的桶中时,使用链表解决哈希冲突。
...计算机中提到的反射一般是指,程序借助某种手段检查自己结构的一种能力,通常就是借助编程语言中定义的类型(types
)。因此,反射是建立在类型系统上的。
slice 的底层数据是数组,slice 是对数组的封装,它描述一个数组的片段。两者都可以通过下标来访问单个元素。
数组是定长的,长度定义好之后,不能再更改。在 Go 中,数组是不常见的,因为其长度是类型的一部分,
限制了它的表达能力,比如 [3]int
和 [4]int
就是不同的类型。
而切片则非常灵活,它可以动态地扩容。切片的类型和长度无关。
数组就是一片连续的内存, slice 实际上是一个结构体,包含三个字段:长度、容量、底层数组。
Go 语言的内存模型规定了一个 goroutine 可以看到另外一个 goroutine 修改同一个变量的值的条件, 这类似 java 内存模型中内存可见性问题。当多个 goroutine 并发同时存取同一个数据时候必须把并发的存取的操作顺序化, 在 go 中可以实现操作顺序化的工具有高级的通道(channel)通信和同步原语比如 sync 包中的互斥锁(Mutex)、 读写锁(RWMutex)或者和 sync/atomic 中的原子操作。
...