当前位置:首页 > 文章列表 > Golang > Go教程 > Golang爬虫教程:Colly框架实战指南

Golang爬虫教程:Colly框架实战指南

2025-09-09 17:38:57 0浏览 收藏

**Golang爬虫入门:Colly框架实战教程,快速掌握数据抓取技巧** 想用Golang轻松编写爬虫?Colly框架绝对是你的首选!本文将带你快速入门Golang爬虫开发,使用Colly框架进行实战。首先,我们将学习如何安装Colly并创建一个基础爬虫,通过设置回调函数和访问目标URL,提取页面标题。接着,我们将深入研究如何抓取列表页中的链接,利用CSS选择器精准定位目标链接,并实现详情页的抓取。此外,本文还将介绍如何存储抓取到的数据,以及如何解决常见的爬虫问题,例如防止重复抓取、设置User-Agent、控制并发和限速等。对于动态加载的页面,我们还会提供一些处理建议。掌握这些要点,你就能轻松上手Colly爬虫开发,快速构建自己的数据抓取工具。

用Golang写爬虫不难,尤其使用colly框架时上手快。1. 安装colly并创建基础爬虫:执行go get github.com/gocolly/colly/v2,编写代码创建collector实例、设置回调函数、访问目标URL提取页面标题;2. 抓取列表页中的链接:通过c.OnHTML配合CSS选择器如.post-list a[href]提取详情链接,并可复用collector访问这些链接;3. 存储抓取数据:定义结构体如Article保存标题和URL,将结果存入变量后续导出为JSON或数据库;4. 防止重复抓取可通过WithDomain限制域名,设置User-Agent避免被屏蔽,控制并发和延迟提升大规模抓取效率,动态内容需结合chromedp等工具处理。掌握这些要点即可快速入门colly爬虫开发。

如何用Golang开发简易爬虫程序 使用colly框架入门实战

用Golang写爬虫其实不难,尤其当你使用colly这个框架时,上手非常快。Colly是Go语言中最受欢迎的爬虫库之一,结构清晰、性能好,适合做数据抓取类的小项目。如果你刚接触Go和网络爬虫,这篇文章可以帮你快速入门。

如何用Golang开发简易爬虫程序 使用colly框架入门实战

安装Colly并创建一个基础爬虫

首先你得确保Go环境已经配好,然后安装colly:

如何用Golang开发简易爬虫程序 使用colly框架入门实战
go get github.com/gocolly/colly/v2

接下来是最简单的例子:访问一个网页并打印页面标题。

package main

import (
    "fmt"
    "github.com/gocolly/colly/v2"
)

func main() {
    // 创建一个新的Collector实例
    c := colly.NewCollector()

    // 在每次抓取页面时触发
    c.OnHTML("html", func(e *colly.HTMLElement) {
        title := e.ChildText("title")
        fmt.Println("页面标题是:", title)
    })

    // 开始请求目标URL
    c.Visit("https://example.com")
}

这段代码会访问example.com,提取它的</code>标签内容并输出。看起来简单,但已经包含了colly的基本结构:创建collector → 设置回调函数 → 发起请求。</p><img src="/uploads/20250909/175741069768bff589c49d9.jpg" alt="如何用Golang开发简易爬虫程序 使用colly框架入门实战"><hr><h3>抓取列表页中的链接</h3><p>实际开发中,我们经常需要从一个列表页里抓取多个条目的详情链接。比如新闻网站的首页,每条新闻都是一个链接。</p><p>假设你想抓取某个博客首页的所有文章链接,可以这样做:</p><pre class="brush:language-go;toolbar:false;">c.OnHTML(".post-list a[href]", func(e *colly.HTMLElement) { link := e.Attr("href") fmt.Println("发现文章链接:", link) })</pre><p>这里的关键点在于选择器要准确,<code>.post-list a[href]</code>表示在class为<code>post-list</code>的容器内找所有带<code>href</code>属性的<code>a</code>标签。你可以根据实际页面结构调整选择器。</p><p>如果想进一步访问这些链接,可以用另一个collector去处理详情页,或者复用当前collector,加上限制域名等设置。</p><hr><h3>存储抓取到的数据</h3><p>光打印出来不够实用,一般我们会把数据保存下来,比如JSON文件或数据库。</p><p>最简单的做法是定义一个结构体,把抓取结果存进去:</p><pre class="brush:language-go;toolbar:false;">type Article struct { Title string URL string } var articles []Article c.OnHTML(".post-list a[href]", func(e *colly.HTMLElement) { link := e.Attr("href") title := e.Text articles = append(articles, Article{ Title: title, URL: link, }) })</pre><p>之后你可以把这些数据导出成JSON,或者插入到SQLite、MySQL这样的数据库里。这部分就不展开讲了,重点还是放在爬虫本身逻辑上。</p><hr><h3>一些常见问题和建议</h3><ul><li><p><strong>防止重复抓取</strong>:可以用<code>colly.WithDomain("example.com")</code>限制域名,避免进入无关页面。</p></li><li><p><strong>设置User-Agent</strong>:有些网站会屏蔽默认的Go User-Agent,可以在初始化collector后加上:</p><pre class="brush:language-go;toolbar:false;">c.UserAgent = "Mozilla/5.0 (compatible; ExampleBot/1.0; +http://example.com/bot)"</pre></li><li><p><strong>控制并发和限速</strong>:对于大规模抓取,可以设置最大并发数和延迟:</p><pre class="brush:language-go;toolbar:false;">c.Limit(&colly.LimitRule{DomainGlob: "*", Parallelism: 2, Delay: 1 * time.Second})</pre></li><li><p><strong>处理JavaScript渲染页面</strong>:Colly本身只能抓静态HTML,无法执行JS。如果目标页面是动态加载的内容,就得考虑用其他工具配合,比如chromedp或selenium。</p></li></ul><hr><p>基本上就这些。用colly写个简易爬虫并不复杂,关键是熟悉HTML结构和CSS选择器的写法。多练几个小项目,就能掌握常见的抓取套路了。</p><p>文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《Golang爬虫教程:Colly框架实战指南》文章吧,也可关注golang学习网公众号了解相关技术文章。</p> </div> <div class="labsList"> </div> <div class="cateBox"> <div class="cateItem"> <a href="/article/310179.html" title="Python核心功能详解与应用解析" class="img_box"> <img src="/uploads/20250909/175741066668bff56a339f6.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="Python核心功能详解与应用解析">Python核心功能详解与应用解析 </a> <dl> <dt class="lineOverflow"><a href="/article/310179.html" title="Python核心功能详解与应用解析" class="aBlack">上一篇<i></i></a></dt> <dd class="lineTwoOverflow">Python核心功能详解与应用解析</dd> </dl> </div> <div class="cateItem"> <a href="/article/310181.html" title="Pandas删除ODS单元格注释方法" class="img_box"> <img src="/uploads/20250909/175741074068bff5b4737a0.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="Pandas删除ODS单元格注释方法"> </a> <dl> <dt class="lineOverflow"><a href="/article/310181.html" class="aBlack" title="Pandas删除ODS单元格注释方法">下一篇<i></i></a></dt> <dd class="lineTwoOverflow">Pandas删除ODS单元格注释方法</dd> </dl> </div> </div> </div> </div> <div class="leftContBox pt0"> <div class="pdl20"> <div class="contTit"> <a href="/articlelist.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit">最新文章</div> </div> </div> <ul class="newArticleList"> <li> <div class="contBox"> <a href="/article/621628.html" class="img_box" title="Go bytes.Buffer.Available 怎么判断可写空间:Grow、Append 与 ErrTooLarge 边界"> <img src="/uploads/20260823/1787497958-go-buffer-append-commit.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go bytes.Buffer.Available 怎么判断可写空间:Grow、Append 与 ErrTooLarge 边界"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  2小时前  |   <a href="/articletag/160_new_0_1.html" class="aLightGray" title="内存">内存</a> · <a href="/articletag/172_new_0_1.html" class="aLightGray" title="标准库">标准库</a> · <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/861_new_0_1.html" class="aLightGray" title="性能">性能</a> · <a href="/articletag/1864_new_0_1.html" class="aLightGray" title="bytes.Buffer">bytes.Buffer</a> · <a href="javascript:;" class="aLightGray" title="go bytes.Buffer">go bytes.Buffer</a> <a href="javascript:;" class="aLightGray" title="Buffer.Available">Buffer.Available</a> <a href="javascript:;" class="aLightGray" title="Buffer.Grow">Buffer.Grow</a> <a href="javascript:;" class="aLightGray" title="ErrTooLarge">ErrTooLarge</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/621628.html" class="aBlack" target="_blank" title="Go bytes.Buffer.Available 怎么判断可写空间:Grow、Append 与 ErrTooLarge 边界">Go bytes.Buffer.Available 怎么判断可写空间:Grow、Append 与 ErrTooLarge 边界</a> </dt> <dd class="cont2"> <span><i class="view"></i>465浏览</span> <span class="collectBtn user_collection" data-id="621628" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/621607.html" class="img_box" title="Go context.AfterFunc 怎么避免清理竞态:Stop 返回值与并发验证"> <img src="/uploads/20260823/1787467081-context-afterfunc-fixed.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go context.AfterFunc 怎么避免清理竞态:Stop 返回值与并发验证"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  10小时前  |   <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/778_new_0_1.html" class="aLightGray" title="Context">Context</a> · <a href="/articletag/1650_new_0_1.html" class="aLightGray" title="并发控制">并发控制</a> · <a href="javascript:;" class="aLightGray" title="context取消">context取消</a> <a href="javascript:;" class="aLightGray" title="Go context.AfterFunc">Go context.AfterFunc</a> <a href="javascript:;" class="aLightGray" title="并发清理">并发清理</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/621607.html" class="aBlack" target="_blank" title="Go context.AfterFunc 怎么避免清理竞态:Stop 返回值与并发验证">Go context.AfterFunc 怎么避免清理竞态:Stop 返回值与并发验证</a> </dt> <dd class="cont2"> <span><i class="view"></i>151浏览</span> <span class="collectBtn user_collection" data-id="621607" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/621593.html" class="img_box" title="Go os.File.ReadAt 并发读文件为什么不互相改偏移:ReaderAt、SectionReader 与验收"> <img src="/uploads/20260823/1787456846-readat-offsets.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go os.File.ReadAt 并发读文件为什么不互相改偏移:ReaderAt、SectionReader 与验收"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  13小时前  |   <a href="/articletag/917_new_0_1.html" class="aLightGray" title="并发读取">并发读取</a> · <a href="/articletag/39686_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a> · <a href="/articletag/40761_new_0_1.html" class="aLightGray" title="文件IO">文件IO</a> · <a href="javascript:;" class="aLightGray" title="Go">Go</a> <a href="javascript:;" class="aLightGray" title="SectionReader">SectionReader</a> <a href="javascript:;" class="aLightGray" title="os.File">os.File</a> <a href="javascript:;" class="aLightGray" title="ReadAt">ReadAt</a> <a href="javascript:;" class="aLightGray" title="ReaderAt">ReaderAt</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/621593.html" class="aBlack" target="_blank" title="Go os.File.ReadAt 并发读文件为什么不互相改偏移:ReaderAt、SectionReader 与验收">Go os.File.ReadAt 并发读文件为什么不互相改偏移:ReaderAt、SectionReader 与验收</a> </dt> <dd class="cont2"> <span><i class="view"></i>139浏览</span> <span class="collectBtn user_collection" data-id="621593" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/621578.html" class="img_box" title="Go http.Request.Clone 和 WithContext 怎么选:请求副本、Header 共享与取消边界"> <img src="/uploads/20260822/1787398729-request-cancel-budget.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go http.Request.Clone 和 WithContext 怎么选:请求副本、Header 共享与取消边界"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1天前  |   <a href="/articletag/19_new_0_1.html" class="aLightGray" title="并发">并发</a> · <a href="/articletag/540_new_0_1.html" class="aLightGray" title="HTTP">HTTP</a> · <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/778_new_0_1.html" class="aLightGray" title="Context">Context</a> · <a href="/articletag/39732_new_0_1.html" class="aLightGray" title="net/http">net/http</a> · <a href="/articletag/40748_new_0_1.html" class="aLightGray" title="请求改写">请求改写</a> · <a href="javascript:;" class="aLightGray" title="HTTP中间件">HTTP中间件</a> <a href="javascript:;" class="aLightGray" title="Go教程">Go教程</a> <a href="javascript:;" class="aLightGray" title="context取消">context取消</a> <a href="javascript:;" class="aLightGray" title="http.Request.Clone">http.Request.Clone</a> <a href="javascript:;" class="aLightGray" title="WithContext">WithContext</a> <a href="javascript:;" class="aLightGray" title="请求复制">请求复制</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/621578.html" class="aBlack" target="_blank" title="Go http.Request.Clone 和 WithContext 怎么选:请求副本、Header 共享与取消边界">Go http.Request.Clone 和 WithContext 怎么选:请求副本、Header 共享与取消边界</a> </dt> <dd class="cont2"> <span><i class="view"></i>238浏览</span> <span class="collectBtn user_collection" data-id="621578" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/621564.html" class="img_box" title="Go SSE 写出后浏览器为什么还收不到:ResponseController.Flush、代理缓冲与写超时"> <img src="/uploads/20260822/1787385268-go-sse-flush-chain.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go SSE 写出后浏览器为什么还收不到:ResponseController.Flush、代理缓冲与写超时"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1天前  |   <a href="/articletag/27659_new_0_1.html" class="aLightGray" title="sse">sse</a> · <a href="/articletag/39686_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a> · <a href="/articletag/39732_new_0_1.html" class="aLightGray" title="net/http">net/http</a> · <a href="/articletag/40106_new_0_1.html" class="aLightGray" title="流式响应">流式响应</a> · <a href="/articletag/40699_new_0_1.html" class="aLightGray" title="排障">排障</a> · <a href="javascript:;" class="aLightGray" title="Go">Go</a> <a href="javascript:;" class="aLightGray" title="SSE">SSE</a> <a href="javascript:;" class="aLightGray" title="FLUSH">FLUSH</a> <a href="javascript:;" class="aLightGray" title="ResponseController">ResponseController</a> <a href="javascript:;" class="aLightGray" title="写超时">写超时</a> <a href="javascript:;" class="aLightGray" title="代理缓冲">代理缓冲</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/621564.html" class="aBlack" target="_blank" title="Go SSE 写出后浏览器为什么还收不到:ResponseController.Flush、代理缓冲与写超时">Go SSE 写出后浏览器为什么还收不到:ResponseController.Flush、代理缓冲与写超时</a> </dt> <dd class="cont2"> <span><i class="view"></i>430浏览</span> <span class="collectBtn user_collection" data-id="621564" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620767.html" class="img_box" title="Go io.Pipe 为什么会互相等待:读写端关闭、错误传播与退出顺序"> <img src="/uploads/20260812/1786504909-go-iopipe-error.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go io.Pipe 为什么会互相等待:读写端关闭、错误传播与退出顺序"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   <a href="/articletag/19_new_0_1.html" class="aLightGray" title="并发">并发</a> · <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/690_new_0_1.html" class="aLightGray" title="IO">IO</a> · <a href="javascript:;" class="aLightGray" title="关闭">关闭</a> <a href="javascript:;" class="aLightGray" title="Go">Go</a> <a href="javascript:;" class="aLightGray" title="管道">管道</a> <a href="javascript:;" class="aLightGray" title="错误传播">错误传播</a> <a href="javascript:;" class="aLightGray" title="io.Pipe">io.Pipe</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620767.html" class="aBlack" target="_blank" title="Go io.Pipe 为什么会互相等待:读写端关闭、错误传播与退出顺序">Go io.Pipe 为什么会互相等待:读写端关闭、错误传播与退出顺序</a> </dt> <dd class="cont2"> <span><i class="view"></i>461浏览</span> <span class="collectBtn user_collection" data-id="620767" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620766.html" class="img_box" title="Go 泛型回调为什么推不出类型:函数值赋值、接口参数与显式实例化边界"> <img src="/uploads/20260812/1786504247-go-inference-boundary.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go 泛型回调为什么推不出类型:函数值赋值、接口参数与显式实例化边界"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   </span> </dd> <dt class="lineOverflow"> <a href="/article/620766.html" class="aBlack" target="_blank" title="Go 泛型回调为什么推不出类型:函数值赋值、接口参数与显式实例化边界">Go 泛型回调为什么推不出类型:函数值赋值、接口参数与显式实例化边界</a> </dt> <dd class="cont2"> <span><i class="view"></i>466浏览</span> <span class="collectBtn user_collection" data-id="620766" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620756.html" class="img_box" title="Go 1.25 的 synctest 怎么测定时器:把异步重试从真实等待改成可控推进"> <img src="/uploads/20260811/1786443197-synctest-boundary.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go 1.25 的 synctest 怎么测定时器:把异步重试从真实等待改成可控推进"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   </span> </dd> <dt class="lineOverflow"> <a href="/article/620756.html" class="aBlack" target="_blank" title="Go 1.25 的 synctest 怎么测定时器:把异步重试从真实等待改成可控推进">Go 1.25 的 synctest 怎么测定时器:把异步重试从真实等待改成可控推进</a> </dt> <dd class="cont2"> <span><i class="view"></i>405浏览</span> <span class="collectBtn user_collection" data-id="620756" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620746.html" class="img_box" title="goroutineleak 真的能找到 Go 协程泄漏吗:pprof 可达性判断与回滚边界"> <img src="/uploads/20260811/1786437929-goroutineleak-profile-check.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="goroutineleak 真的能找到 Go 协程泄漏吗:pprof 可达性判断与回滚边界"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   <a href="/articletag/19_new_0_1.html" class="aLightGray" title="并发">并发</a> · <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/2250_new_0_1.html" class="aLightGray" title="pprof">pprof</a> · <a href="/articletag/39721_new_0_1.html" class="aLightGray" title="性能排查">性能排查</a> · <a href="javascript:;" class="aLightGray" title="pprof">pprof</a> <a href="javascript:;" class="aLightGray" title="Go 1.26">Go 1.26</a> <a href="javascript:;" class="aLightGray" title="goroutineleak">goroutineleak</a> <a href="javascript:;" class="aLightGray" title="goroutine 泄漏">goroutine 泄漏</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620746.html" class="aBlack" target="_blank" title="goroutineleak 真的能找到 Go 协程泄漏吗:pprof 可达性判断与回滚边界">goroutineleak 真的能找到 Go 协程泄漏吗:pprof 可达性判断与回滚边界</a> </dt> <dd class="cont2"> <span><i class="view"></i>257浏览</span> <span class="collectBtn user_collection" data-id="620746" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620741.html" class="img_box" title="Go HTTPS 证书热切换怎么做:atomic.Value、GetCertificate 与失败回退"> <img src="/uploads/20260811/1786434725-image-1.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go HTTPS 证书热切换怎么做:atomic.Value、GetCertificate 与失败回退"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   <a href="/articletag/238_new_0_1.html" class="aLightGray" title="golang">golang</a> · <a href="/articletag/733_new_0_1.html" class="aLightGray" title="https">https</a> · <a href="/articletag/1481_new_0_1.html" class="aLightGray" title="TLS">TLS</a> · <a href="/articletag/39686_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a> · <a href="/articletag/40414_new_0_1.html" class="aLightGray" title="生产运维">生产运维</a> · <a href="/articletag/40543_new_0_1.html" class="aLightGray" title="证书轮换">证书轮换</a> · <a href="javascript:;" class="aLightGray" title="atomic.Value">atomic.Value</a> <a href="javascript:;" class="aLightGray" title="Go HTTPS证书热切换">Go HTTPS证书热切换</a> <a href="javascript:;" class="aLightGray" title="GetCertificate">GetCertificate</a> <a href="javascript:;" class="aLightGray" title="tls.Certificate">tls.Certificate</a> <a href="javascript:;" class="aLightGray" title="证书轮换">证书轮换</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620741.html" class="aBlack" target="_blank" title="Go HTTPS 证书热切换怎么做:atomic.Value、GetCertificate 与失败回退">Go HTTPS 证书热切换怎么做:atomic.Value、GetCertificate 与失败回退</a> </dt> <dd class="cont2"> <span><i class="view"></i>267浏览</span> <span class="collectBtn user_collection" data-id="620741" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620738.html" class="img_box" title="Go 并发限流用 channel 还是 semaphore:取消、阻塞与公平性怎么选"> <img src="/uploads/20260811/1786433489-go-limit-channel.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go 并发限流用 channel 还是 semaphore:取消、阻塞与公平性怎么选"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   <a href="/articletag/19_new_0_1.html" class="aLightGray" title="并发">并发</a> · <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/861_new_0_1.html" class="aLightGray" title="性能">性能</a> · <a href="javascript:;" class="aLightGray" title="channel">channel</a> <a href="javascript:;" class="aLightGray" title="context">context</a> <a href="javascript:;" class="aLightGray" title="Semaphore">Semaphore</a> <a href="javascript:;" class="aLightGray" title="Go并发限流">Go并发限流</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620738.html" class="aBlack" target="_blank" title="Go 并发限流用 channel 还是 semaphore:取消、阻塞与公平性怎么选">Go 并发限流用 channel 还是 semaphore:取消、阻塞与公平性怎么选</a> </dt> <dd class="cont2"> <span><i class="view"></i>384浏览</span> <span class="collectBtn user_collection" data-id="620738" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> <li> <div class="contBox"> <a href="/article/620732.html" class="img_box" title="Go 接浏览器 Beacon API:页面关闭时上报请求、Content-Type 与失败兜底"> <img src="/uploads/20260811/1786426963-beacon-queue.webp" onerror="this.src='/assets/images/moren/morentu.png'" alt="Go 接浏览器 Beacon API:页面关闭时上报请求、Content-Type 与失败兜底"> </a> <dl> <dd class="cont1"> <span> <a href="/articlelist/25_new_0_1.html" class="aLightGray" title="Golang">Golang</a> · <a href="/articlelist/44_new_0_1.html" class="aLightGray" title="Go教程">Go教程</a>   |  1星期前  |   <a href="/articletag/540_new_0_1.html" class="aLightGray" title="HTTP">HTTP</a> · <a href="/articletag/594_new_0_1.html" class="aLightGray" title="go">go</a> · <a href="/articletag/1307_new_0_1.html" class="aLightGray" title="浏览器">浏览器</a> · <a href="/articletag/40541_new_0_1.html" class="aLightGray" title="前端数据上报">前端数据上报</a> · <a href="javascript:;" class="aLightGray" title="Go Beacon API">Go Beacon API</a> <a href="javascript:;" class="aLightGray" title="navigator.sendBeacon">navigator.sendBeacon</a> <a href="javascript:;" class="aLightGray" title="页面关闭上报">页面关闭上报</a> <a href="javascript:;" class="aLightGray" title="Go HTTP 接收 Beacon">Go HTTP 接收 Beacon</a> <a href="javascript:;" class="aLightGray" title="keepalive fetch">keepalive fetch</a> </span> </dd> <dt class="lineOverflow"> <a href="/article/620732.html" class="aBlack" target="_blank" title="Go 接浏览器 Beacon API:页面关闭时上报请求、Content-Type 与失败兜底">Go 接浏览器 Beacon API:页面关闭时上报请求、Content-Type 与失败兜底</a> </dt> <dd class="cont2"> <span><i class="view"></i>140浏览</span> <span class="collectBtn user_collection" data-id="620732" data-type="article" title="收藏"><i class="collect"></i>收藏</span> </dd> </dl> </div> </li> </ul> </div> </div> <div class="mainRight"> <!-- 右侧广告位banner --> <div class="rightContBox" style="margin-top: 0px;"> <div class="rightTit"> <a href="/courselist.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit lineOverflow">课程推荐</div> </div> <ul class="lessonRecomRList"> <li> <a href="/course/9.html" class="img_box" target="_blank" title="前端进阶之JavaScript设计模式"> <img src="/uploads/20221222/52fd0f23a454c71029c2c72d206ed815.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="前端进阶之JavaScript设计模式"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/9.html" target="_blank" class="aBlack" title="前端进阶之JavaScript设计模式">前端进阶之JavaScript设计模式</a></dt> <dd class="cont1 lineTwoOverflow"> 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。 </dd> <dd class="cont2">543次学习</dd> </dl> </li> <li> <a href="/course/2.html" class="img_box" target="_blank" title="GO语言核心编程课程"> <img src="/uploads/20221221/634ad7404159bfefc6a54a564d437b5f.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="GO语言核心编程课程"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/2.html" target="_blank" class="aBlack" title="GO语言核心编程课程">GO语言核心编程课程</a></dt> <dd class="cont1 lineTwoOverflow"> 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。 </dd> <dd class="cont2">516次学习</dd> </dl> </li> <li> <a href="/course/74.html" class="img_box" target="_blank" title="简单聊聊mysql8与网络通信"> <img src="/uploads/20240103/bad35fe14edbd214bee16f88343ac57c.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="简单聊聊mysql8与网络通信"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/74.html" target="_blank" class="aBlack" title="简单聊聊mysql8与网络通信">简单聊聊mysql8与网络通信</a></dt> <dd class="cont1 lineTwoOverflow"> 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让 </dd> <dd class="cont2">500次学习</dd> </dl> </li> <li> <a href="/course/57.html" class="img_box" target="_blank" title="JavaScript正则表达式基础与实战"> <img src="/uploads/20221226/bbe4083bb3cb0dd135fb02c31c3785fb.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="JavaScript正则表达式基础与实战"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/57.html" target="_blank" class="aBlack" title="JavaScript正则表达式基础与实战">JavaScript正则表达式基础与实战</a></dt> <dd class="cont1 lineTwoOverflow"> 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。 </dd> <dd class="cont2">487次学习</dd> </dl> </li> <li> <a href="/course/28.html" class="img_box" target="_blank" title="从零制作响应式网站—Grid布局"> <img src="/uploads/20221223/ac110f88206daeab6c0cf38ebf5fe9ed.jpg" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="从零制作响应式网站—Grid布局"> </a> <dl> <dt class="lineTwoOverflow"><a href="/course/28.html" target="_blank" class="aBlack" title="从零制作响应式网站—Grid布局">从零制作响应式网站—Grid布局</a></dt> <dd class="cont1 lineTwoOverflow"> 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。 </dd> <dd class="cont2">485次学习</dd> </dl> </li> </ul> </div> <div class="rightContBox"> <div class="rightTit"> <a href="/ai.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit lineOverflow">AI推荐</div> </div> <ul class="lessonRecomRList"> <li> <a href="/ai/13109.html" target="_blank" title="ljg-skills - "Prompt之神"李继刚开源的 AI 技能集" class="img_box"> <img src="/uploads/ai/20260616/ljg-skills-icon-8bbe1468e5.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="ljg-skills - "Prompt之神"李继刚开源的 AI 技能集" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13109.html" class="aBlack" target="_blank" title="ljg-skills">ljg-skills</a></dt> <dd class="cont1 lineTwoOverflow"> ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。 </dd> <dd class="cont2">5161次使用</dd> </dl> </li> <li> <a href="/ai/13108.html" target="_blank" title="MELO音乐 - AI 音乐生成平台,支持多模态创作能力" class="img_box"> <img src="/uploads/ai/20260616/melo-icon-10bf590762.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="MELO音乐 - AI 音乐生成平台,支持多模态创作能力" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13108.html" class="aBlack" target="_blank" title="MELO音乐">MELO音乐</a></dt> <dd class="cont1 lineTwoOverflow"> MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款! </dd> <dd class="cont2">4678次使用</dd> </dl> </li> <li> <a href="/ai/13107.html" target="_blank" title="UniScribe - AI 免费在线音视频转文字平台" class="img_box"> <img src="/uploads/ai/20260616/uniscribe-icon-3c88366a15.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="UniScribe - AI 免费在线音视频转文字平台" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13107.html" class="aBlack" target="_blank" title="UniScribe">UniScribe</a></dt> <dd class="cont1 lineTwoOverflow"> UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。 </dd> <dd class="cont2">4633次使用</dd> </dl> </li> <li> <a href="/ai/13106.html" target="_blank" title="剧云 - 免费 AI 智能中文剧本创作平台" class="img_box"> <img src="/uploads/ai/20260615/d36c7176-icon-2b0cd581ce.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="剧云 - 免费 AI 智能中文剧本创作平台" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13106.html" class="aBlack" target="_blank" title="剧云">剧云</a></dt> <dd class="cont1 lineTwoOverflow"> 剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。 </dd> <dd class="cont2">4893次使用</dd> </dl> </li> <li> <a href="/ai/13105.html" target="_blank" title="万象有声 - AI 一站式有声内容创作平台" class="img_box"> <img src="/uploads/ai/20260615/50267bac-icon-c146b001b5.png" onerror="this.onerror='',this.src='/assets/images/moren/morentu.png'" alt="万象有声 - AI 一站式有声内容创作平台" style="object-fit:cover;width:100%;height:100%;"> </a> <dl> <dt class="lineTwoOverflow"><a href="/ai/13105.html" class="aBlack" target="_blank" title="万象有声">万象有声</a></dt> <dd class="cont1 lineTwoOverflow"> 万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单! </dd> <dd class="cont2">4844次使用</dd> </dl> </li> </ul> </div> <!-- 相关文章 --> <div class="rightContBox"> <div class="rightTit"> <a href="/articlelist.html" class="more" title="查看更多">查看更多<i class="iconfont"></i></a> <div class="tit lineOverflow">相关文章</div> </div> <ul class="aboutArticleRList"> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/619847.html" class="aBlack" title="Java 性能优化上线清单:从定位、改造到灰度发布">Java 性能优化上线清单:从定位、改造到灰度发布</a></dt> <dd> <span class="left">2026-06-11</span> <span class="right">860浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/619846.html" class="aBlack" title="Spring Boot 压测验证:Gatling、JMeter 与性能回归门禁">Spring Boot 压测验证:Gatling、JMeter 与性能回归门禁</a></dt> <dd> <span class="left">2026-06-11</span> <span class="right">843浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/619845.html" class="aBlack" title="Java NMT 非堆内存排查:Direct Buffer、线程栈与 Metaspace 分析">Java NMT 非堆内存排查:Direct Buffer、线程栈与 Metaspace 分析</a></dt> <dd> <span class="left">2026-06-11</span> <span class="right">826浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/619844.html" class="aBlack" title="Spring Boot 容器内存优化:JVM 堆、非堆与 MaxRAMPercentage">Spring Boot 容器内存优化:JVM 堆、非堆与 MaxRAMPercentage</a></dt> <dd> <span class="left">2026-06-11</span> <span class="right">809浏览</span> </dd> </dl> </li> <li> <dl> <dt class="lineTwoOverflow"><a href="/article/619843.html" class="aBlack" title="Tomcat 连接与线程参数调优:maxThreads、acceptCount 与 KeepAlive">Tomcat 连接与线程参数调优:maxThreads、acceptCount 与 KeepAlive</a></dt> <dd> <span class="left">2026-06-11</span> <span class="right">792浏览</span> </dd> </dl> </li> </ul> </div> </div> </div> <script src="/assets/js/frontend/common.js"></script> </body> </html>