随笔分类 -  Go

摘要:predator 是一款基于 fasthttp 开发的高性能爬虫框架。 当前版本虽然尚未完成全部功能,但已可使用。 使用 下面是一个示例,基本包含了当前已完成的所有功能,使用方法可以参考注释。 1 创建一个 Crawler 创建 时有一些可选项用来功能增强。所有可选项参考 "predator/opt 阅读全文
posted @ 2021-08-01 13:18 thepoy 阅读(533) 评论(0) 推荐(0)
摘要:比较简约的多色日志包,没有特别多的功能,仅提供在终端输出彩色日志的功能。 使用 在 文件中添加 包: 在其他文件中使用: error 和 fatal 消息会输出调用函数所在文件和调用代码行号。 运行结果: ,第一个 main 是文件名,第二个 main 是方法 / 函数名,冒号后面的是哪个文件中的第 阅读全文
posted @ 2021-05-16 20:23 thepoy 阅读(762) 评论(0) 推荐(0)
摘要:每个对象存储服务商都会提供时间戳防盗链的支持,原理基本一样,本文以七牛云为例,服务端是用 Go 实现的 API。 生成签名的 url 的时候,也要将新生成的 url 保存到 redis 中,防止每次访问都生成新的签名,即浪费服务器资源,又会增加 CDN 流量。 签名代码: 如果下次访问时没有从 re 阅读全文
posted @ 2021-05-12 10:59 thepoy 阅读(751) 评论(0) 推荐(0)
摘要:爬取掘金的热门推荐页面部分信息作为示例数据保存到 es 中进行查询。 本项目中对 es 基本的 创建 、 查询 和 删除 操作均有简单实现。 项目地址: "thep0y/juejin hot es example" 简介 查询时使用命令行进行,示例项目的命令如下: 可选命令为 、`search de 阅读全文
posted @ 2021-05-04 10:32 thepoy 阅读(124) 评论(0) 推荐(0)
摘要:本文代码来自于官方示例。 一、配置 此例演示的是配置客户端的传输 。 类例中的配置主要用于说明其作用,不适用于生产环境。 默认的传输就够用了。 二、自定义传输 自定义传输用于读取或操作请求和响应,自定义日志记录,将自定义 header 传递给请求等。 将自定义 header 添加到请求,记录有关请求 阅读全文
posted @ 2021-04-29 12:22 thepoy 阅读(1525) 评论(0) 推荐(0)
摘要:mailru/easyjson库的特点就是我们只需要提供结构体,然后用这些结构体生成编码解码的代码。 示例的项目名为elasticsearch/encoding/json。 一、创建 models 在项目中新建 model 目录,目录中新建两个文件model.go和response.go,在这两个文 阅读全文
posted @ 2021-04-29 12:13 thepoy 阅读(254) 评论(0) 推荐(0)
摘要:一、ElasticSearch 1 pull 的 docker 镜像不支持默认的 latest 标签,所以在 Pull 时需要指定标签: 2 创建网络连接 用来与其他容器服务进行通信,比如 Kibana。 3 创建容器 4 修改配置,允许跨域访问 5 安装 ik 分词器 es自带的分词器对中文分词不 阅读全文
posted @ 2021-04-24 16:26 thepoy 阅读(120) 评论(0) 推荐(0)
摘要:tags: [Golang, etcd, Docker] layout: article key: author: thepoy 一、用 docker 搭建集群 etcd 没有在 docker hub 中创建 image,所以自然拉取不到。 本文意在模拟使用步骤,所以创建三个 go 环境的容器,在每 阅读全文
posted @ 2021-04-20 21:15 thepoy 阅读(471) 评论(0) 推荐(0)
摘要:使用 docker 创建的三个 Zookeeper 服务端组成的集群,其 ip 地址分别为: 172.17.0.2 172.17.0.3 172.17.0.4 一、增删改查 1 增 / create 创建新节点一共有四种: 持久节点 临时节点 持久时序节点 临时时序节点 代码: 2 查 / get 阅读全文
posted @ 2021-04-18 19:54 thepoy 阅读(1272) 评论(0) 推荐(0)
摘要:官方包的注释: 包提供基础的同步原语, 、`sync.RWMutex sync.WaitGroup sync.Once sync.Cond`。 一、Mutex Go 语言的 由两个字段 和`sema state sema`是用来控制锁状态的信号量。 上述两个加起来只占 8 字节空间的结构体表过了 G 阅读全文
posted @ 2021-04-10 09:34 thepoy 阅读(364) 评论(0) 推荐(0)
摘要:上下文context.Context是用来设置终止时间、同步信号、传递请求相关的值的接口,与 Goroutine 关联密切。 context.Context接口需要实现四个方法: Deadline:返回context.Context被终止的时间,即完成任务的最终时限 Done:返回一个 Channe 阅读全文
posted @ 2021-04-06 08:20 thepoy 阅读(496) 评论(0) 推荐(0)
摘要:1 panic Go 语言的错误处理方法比较特别,需要返回error给调用者,但是如果遇到的是无法恢复的错误,返回error也没有意义,此时就需要主动触发panic。 但有些错误只能在运行时检查,如数组访问越界、空指针引用等,这些运行时错误会引发panic异常。 panic能够改变程序的控制流,调用 阅读全文
posted @ 2021-04-03 12:36 thepoy 阅读(122) 评论(0) 推荐(0)
摘要:一个没有垃圾回收(Garbage Collection,简称GC)机制的编程语言的内存管理问题绝对会让人头疼,一个友好的编程语言会设计一个垃圾回收机制——垃圾收集器,来自动回收不再使用的对象和内存空间。 Go 作为一个秉承着“少即是多”理念的编程语言,所以能为开发者考虑到的内容都应该由编程语言自己完 阅读全文
posted @ 2021-03-30 19:36 thepoy 阅读(2233) 评论(5) 推荐(0)
摘要:一、调度器的由来 调度本身是指操作系统中为每个任务分配其所需资源的方法。 在操作系充中,线程是任务执行的最小单位,是系统调度的基本单元。 虽然线程比进程轻量,但是在调度时也有比较大的额外开销,每个线程都会占用几 M 的内存,上下文切换时也会消耗几微秒的时间,这些都是高并发的阻碍。 Go 语言的诞生有 阅读全文
posted @ 2021-03-29 19:02 thepoy 阅读(540) 评论(0) 推荐(0)
摘要:Go 语言的 defer 会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。 作为一个编程语言中的关键字,defer 的实现一定是由编译器和运行时共同完成的,不过在深入源码分析它的实现之前我们还是需要了解 defer 关键字的常见使用场景以及使用时的注意事项 阅读全文
posted @ 2021-03-24 17:58 thepoy 阅读(141) 评论(0) 推荐(0)
摘要:tags: [Golang, 分布式] layout: article key: author: thepoy 一、分布式 id 生成器 在高并发场景中,通常需要类似 MySQL 自增 id 一样不断增长且不会重复的 id。 比如某电商双 11 时,在 0:00 开始,会有千万到亿级的订单涌入,每秒 阅读全文
posted @ 2021-03-24 15:45 thepoy 阅读(1264) 评论(0) 推荐(0)
摘要:Colly 的 Retry 函数,设计理念不知道是什么,一旦使用了 Retry 访问了一个本就有问题的链接,就会无限循环访问,永不停止。 我们就手动添加一个map用来计录链接的重试次数。 下面的代码简单有效,但只对GET方法有效。 // RetryCounter GET方法重试计数器 type Re 阅读全文
posted @ 2021-01-28 14:00 thepoy 阅读(401) 评论(0) 推荐(0)