自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Golang方法的本质及receive类型

go 方法本质

2024-05-30 09:12:28 681

原创 Golang中nil channel妙用

改进后的示例程序的最关键变化是在判断c1或c2被关闭后,显式地将c1或c2置为nil。我们知道,对一个nil channel执行获取操作,该操作将被阻塞,因此已经被置为nil的c1或c2的分支将再也不会被select选中执行。对于没有初始化的channel进行读写操作将会发生阻塞。此测试程序目的是依次输出5和7两个数字后退出,但是实际输出结果是在输出5之后,程序输出了许多0后才输出7并退出。但是nil channel并非一无是处,有时候妙用nil channel可以达到事半功倍的效果。

2024-05-24 23:22:45 166

原创 Go sync包中锁的知识总结

对于零值的sync.Mutex对象拷贝是安全的,因为相关锁状态都是零值,拷贝相当于创建一个新的零值sync.Mutex对象。锁一旦被使用过(即使已经解锁),也不建议被复制,因为锁对象中保存了其状态、信号量等信息,复制sync.Mutex锁后,对锁的操作结果都是未知的。互斥锁是临界区同步原语的首选,它常被用来对结构体对象的内部状态、缓存等进行保护,是使用最为广泛的临界区同步原语。在并发量较大的情况下,读写锁的写锁性能比互斥锁、读写锁的读锁都差,并且随着并发量增大,其写锁性能会继续下降。

2024-05-14 22:25:37 479

原创 Go切片实现原理及高效使用规范

Go切片实现原理及使用技巧

2024-05-08 20:32:44 305

原创 Go零值机制总结

Golang零值机制及使用限制

2024-05-07 22:52:55 125

原创 Golang正确大文件下载方式,避免OOM

​ 今天在golang http下载一个大文件时,报错OOM,通过堆栈发现时读取文件内容时申请内存超过系统内存大小,导致进程被杀。一、错误实现方式func downloadFile() { file, err := os.OpenFile("xxx.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666) if err != nil { return } defer func() { _ = file.Close() }() rsp, err

2021-06-08 23:48:18 5494

原创 Golang逐行读取gzip文件

一、不安全逐行读取gzip文件gzip.NewReader创建一个gzip文件输入对象bufio.NewReader创建一个带有固定缓冲区大小的文件输入对象func ReadLine(file *os.File) (string, error) { reader, err := gzip.NewReader(file) if err != nil { return "", err } bufReader := bufio.NewReader(reader) line, _, err

2021-05-21 00:00:01 1370

原创 Golang判断文件是否存在跨平台方案及实现原理

一、判断文件是否存在Golang判断文件是否存在,跨平台实现方案如下:func Exists(filename string) bool { stat, err := os.Stat(filename) if err != nil && os.IsNotExist(err) { return false } return !stat.IsDir()}测试用例:func TestExists(t *testing.T) { dir := "/Users/cow/

2021-05-20 23:30:33 483

原创 数据结构--树存储结构 & 深度优先遍历 & 广度优先遍历 通俗易懂

树的概念​ 首先,树是一种常用的非线性数据结构,是以边(Edge)相连的节点(Node)的集合,每个节点存储对应的值,当存在子节点时与之相连。根节点:是树的首个节点边:所有节点都由边相连,用于标识节点间的关系叶子结点:树的末端节点,它们没有子节点树的高度:由根节点出发,到子节点的最长路径长度(从下往上)树的深度:指对应节点到根节点路径长度(从上往下)空树:如果树节点个数为零,那么构成的树成为空树树的层:从一棵树的树根开始,树根所在层为第一层,树的孩子节点所在的层为第二层,以此类推。节点

2021-04-21 00:23:51 2509

原创 哈希表

一、哈希表1、定义​ 散列表(Hash table,哈希表),是根据key而直接进行访问的数据结构。可以通过把关键字映射到表中一个位置来访问记录,以加快查找的速度。整个映射函数叫做散列函数,存放记录的数组叫做散列表,在有些文章或开源代码中也称之为slot(槽)或bucket(桶)。2、原理###### 3、特点优点:通过关键实现一对一查找速度非常快缺点:存在冲突二、分类1、静态哈希​ 拥有固定的slot(桶)数,哈希函数对同样的key值永远映射出唯一的地址值。如果数据是固定不变的,那

2021-04-11 23:54:36 629

原创 HTTP DNS原理及HTTPDNS调度实现方式

一、HTTPDNS介绍​ 传统DNS解析存在的问题在上一篇文章中已经解释,那有没有一种调度精准、成本低廉、配置方便的基于域名的流量调度系统呢?HTTPDNS就应运而生 。​ 与传统的 DNS 解析不同,HTTPDNS 是自己搭建基于 HTTP 协议的服务器,利用 HTTP 协议与 DNS 服务器交互,代替了传统的基于 UDP 协议的 DNS 交互,绕开了运营商的 Local DNS,有效防止了域名劫持,提高域名解析效率。​ 当客户端需要 DNS 解析的时候,不再向 local 发送 DNS 查询报文,

2021-04-01 22:43:47 2080

原创 DNS完整解析流程

一、DNS介绍  域名(Domain Name)是一个标记主机或主机组的名称,相当于IP地址的别名。  域名系统(Domain Name Server)是将域名解析成IP地址的互联网基础服务,提供该服务的服务器成为域名解析服务器。二、域名结构域名系统是一个分布式系统,Internat采用树状结构命名,结构如下图所示:三、DNS解析过程1、DNS域名解析服务器分类本地域名服务器(Local DNS)如果通过DHCP配置,Local DNS由ISP提供根域名服务器(Root DNS

2021-04-01 22:38:43 7592 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除