Golang
文章平均质量分 87
xkzeee
这个作者很懒,什么都没留下…
展开
-
Go 生成base64图片验证码-超详细工具类
之前网上的很多例子都很旧了,这次我分享的是最新版本的使用先下载生成图片验证码所需要的依赖包 使用 创建的对象,存储的验证码为 10240 个,过期时间为 10分钟2.2 创建自定义的对象根据自己需求更改验证码存储上限,以下代码设置存储的验证码为 20240个,过期时间为 3分钟.....................原创 2022-06-22 14:52:41 · 3211 阅读 · 0 评论 -
Golang GMP调度模型详解
文章目录前言1. Goroutine调度器的基本概念2. Goruntine调度策略2.1 work stealing机制2.2 hand off 机制前言 线程数过多,意味着操作系统会不断地切换线程,频繁的上下文切换就成了性能瓶颈。 Golang的调度模型是GMP模型,它提供一种机制,可以在线程中自己实现调度,上下文切换更轻量,从而达到了线程数少,而并发数并不少的效果。而线程中调度的就原创 2022-05-02 22:10:46 · 3790 阅读 · 0 评论 -
Go defer的使用场景及影响分析
目录前言1. defer特性1.1. 多个defer语句,按照先进后出的方式执行1.2. 延迟函数的参数在defer声明时就决定了1.3. 延迟函数可能操作主函数的具名返回值1.3.1 函数是如何返回的1.3.2 例1:主函数拥有匿名返回值,返回字面值(不影响返回值)1.3.3 例2:主函数拥有匿名返回值,返回变量(不影响)1.3.4 例3:主函数拥有具名返回值(影响返回值)2. defer数据结构前言关键字 defer 用于注册延迟调用,每次 defer 都会把一个函数压入栈中,函数返回前再把延迟的函原创 2022-04-28 20:11:29 · 540 阅读 · 1 评论 -
Go string深度理解之数据类型编码解码
文章标题1 整数存储2 字符存储3 汉字存储4 多种类型结合的字符的解码编码4.1 编码模板4.2 解码1.4.3 编码1 整数存储一个比特可以是0或是1,八个比特组成一个字节,全为0时代表0,全为1时代表255,即一个字节可以表示255个数字、两个字节可以表示65536个数字2 字符存储通过字符集ASCII来进行中转例如 A:先根据ASCII码将A转为 65 ,再转为二进制01000001,如下图所示3 汉字存储ASCII字符集收录了128个字符,它的扩展字符集也只有256个,由此生出了原创 2022-04-27 22:08:05 · 583 阅读 · 0 评论 -
Go Tag的使用
文章目录前言1.Tag是什么2. Tag是Struct的一部分3. 获取Tag3. Tag存在的意义前言1.Tag是什么Tag 本身是一个字符串,但字符串中却是:以空格分隔键值 key:"value" key:"value" key:"value" key:"value"key :必须是非空字符串,字符串不能包含控制字符、空格、引号、冒号value:以双引号标记的字符串冒号前后不能有空格下述代码为错误和正确的示例:// 错误示例type MeError struct { Name s原创 2022-04-27 17:57:46 · 1363 阅读 · 0 评论 -
Go Map底层实现原理
文章目录前言1. map数据结构2. bucket 数据结构3. 哈希冲突前言说到键值对的存储,我们通常会想到哈希表,而哈希表通常会有一堆桶来存储键值对,一个键值对来了自然要选择一个桶,怎么选?先通过哈希函数把键处理一下,得到一个哈希值,从m个桶中选择一个,桶编号区间 [0, m-1]方法1:取模法 hash % m方法2:与运算法1. map数据结构map类型的变量本质上是一个指针,指向 *hmap 结构体type hmap struct { count int原创 2022-04-27 16:16:48 · 3031 阅读 · 0 评论 -
Go Map的使用
文章标题前言1.Map 定义2.Map的基本使用2 判断某个键是否存在3. map遍历4. delete()函数删除键值对5. 元素为map类型的切片前言map是一中无序的基于key-value的数据结构,Go语言中感的map是引用类型,必须初始化才能使用1.Map 定义KeyType:键的类型ValueType:值的类型map[KeyType] ValueType1. map类型的默认值为nil,它需要用make()函数来分配其内存。2. cap表示map的容量,这个参数不是必须的原创 2022-04-25 15:34:35 · 1404 阅读 · 0 评论 -
Go slice的基本使用及实现原理
文章目录前言1. 切片和数组的类型2. 切片 Slice 的基本使用2.1 切片的创建2.1.1 make()函数创建切片2.1.2 字面量创建切片2.2.3 数组创建切片2.2.4 使用 append 内置函数做切片追加3. 切片 Slice 的实现原理3.1 Slice 数据结构3.2 Slice 扩容4. 切片 Slice 练习题前言slice是数组的一个引用,所以它是引用类型。但它的自身是结构体,值拷贝传递,slice的长度是可以改变的,所有 切片slice 又称为动态数组,可以方便的进行扩容、原创 2022-04-25 09:38:24 · 685 阅读 · 0 评论 -
Go Channel的基本使用及底层原理详解
前言如果说 goroutine 是Go程序并发的执行体,channel就是它们之间的连接。Go语言采用的并发模型是CSP,提倡通过通信共享内存而不是通过共享内存而实现通信。channel是可以让一个 goroutine 发送特定值到另一个 goroutine 的通信机制。1.channel类型channel类型:未初始化的通道类型变量默认零值为nilvar 变量名称 chan 元素类型// 例如var ch1 chan int // 声明一个传递整型的通道var ch2 chan b原创 2022-04-22 15:41:51 · 5981 阅读 · 2 评论