<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title></title>
    <link>https://note.lican.site/</link>
    <description>Recent content on </description>
    <generator>Hugo</generator>
    <language>en</language>
    <copyright>© lican.asia All rights reserved</copyright>
    <lastBuildDate>Fri, 28 Nov 2025 10:31:00 +0800</lastBuildDate>
    <atom:link href="https://note.lican.site/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>UDP服务搭建</title>
      <link>https://note.lican.site/posts/udp%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Fri, 28 Nov 2025 10:31:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/udp%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h3 id=&#34;udp服务搭建&#34;&gt;UDP服务搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：客户有个小的环控设备，给用户体验温度环境的，采用我们温湿度传感器采集的数据，但用户仅提供了一个UDP接收地址，要求我们将数据传递到该地址&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/udp/1764295263473.png&#34; alt=&#34;1764295263473&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;什么是udp&#34;&gt;什么是UDP&lt;/h4&gt;&#xA;&lt;p&gt;UDP是一种无连接，不可靠，轻量级传输协议，用于快速发送数据包，但不保证数据一定能送达，不保证顺序，也不进行重传&lt;/p&gt;&#xA;&lt;h4 id=&#34;特点&#34;&gt;特点&lt;/h4&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;特性&lt;/th&gt;&#xA;          &lt;th&gt;UDP&lt;/th&gt;&#xA;          &lt;th&gt;TCP&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;连接方式&lt;/td&gt;&#xA;          &lt;td&gt;无连接（直接发数据）&lt;/td&gt;&#xA;          &lt;td&gt;面向连接（先握手建立连接）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;可靠性&lt;/td&gt;&#xA;          &lt;td&gt;不可靠（不保证送达）&lt;/td&gt;&#xA;          &lt;td&gt;可靠（保证传达，有序，不丢包）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;数据顺序&lt;/td&gt;&#xA;          &lt;td&gt;不保证顺序&lt;/td&gt;&#xA;          &lt;td&gt;保证顺序&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;数据重传&lt;/td&gt;&#xA;          &lt;td&gt;不重传丢失的数据包&lt;/td&gt;&#xA;          &lt;td&gt;会重传丢失或出错的数据包&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;流量控制/拥塞控制&lt;/td&gt;&#xA;          &lt;td&gt;没有&lt;/td&gt;&#xA;          &lt;td&gt;有（防止网络拥堵）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;传输速度&lt;/td&gt;&#xA;          &lt;td&gt;快（开销小，延迟低）&lt;/td&gt;&#xA;          &lt;td&gt;相对慢（因为要保证可靠）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;头部大小&lt;/td&gt;&#xA;          &lt;td&gt;8字节（很小）&lt;/td&gt;&#xA;          &lt;td&gt;至少20字节（较大）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;应用场景&lt;/td&gt;&#xA;          &lt;td&gt;实时性要求高，允许少量丢包的场景&lt;/td&gt;&#xA;          &lt;td&gt;要求可靠传输的场景（如网页，文件）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h4 id=&#34;工作原理&#34;&gt;工作原理&lt;/h4&gt;&#xA;&lt;p&gt;1.不需要事先建立连接：发送方直接把数据打包成UDP的数据包，然后扔到网络上，目标地址写清楚就行&lt;/p&gt;&#xA;&lt;p&gt;2、数据包独立传输：每个UDP数据包都是独立的，可能会走不同的路径，也可能丢失，乱序&lt;/p&gt;&#xA;&lt;p&gt;3、不关心对方是否收到：发出去就不管了，不会确认，不会重发，不会排序&lt;/p&gt;&#xA;&lt;p&gt;4.适合快速发送：因为没有复杂的控制机制，所以速度快，开销小，实时性强&lt;/p&gt;&#xA;&lt;h4 id=&#34;实现&#34;&gt;实现&lt;/h4&gt;&#xA;&lt;p&gt;在golang中依靠的是net&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;NewUDPSender&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;serverAddr&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;udpAddr&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ResolveUDPAddr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;udp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;serverAddr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DialUDP&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;udp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;udpAddr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;addr&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;udpAddr&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Send&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Lock&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unlock&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Write&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;调用：搭建好udp服务后，在需要发送udp数据的地方调用即可&lt;/p&gt;</description>
    </item>
    <item>
      <title>UDP服务搭建</title>
      <link>https://note.lican.site/tech/udp%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Fri, 28 Nov 2025 10:31:00 +0800</pubDate>
      <guid>https://note.lican.site/tech/udp%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h3 id=&#34;udp服务搭建&#34;&gt;UDP服务搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：客户有个小的环控设备，给用户体验温度环境的，采用我们温湿度传感器采集的数据，但用户仅提供了一个UDP接收地址，要求我们将数据传递到该地址&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/udp/1764295263473.png&#34; alt=&#34;1764295263473&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;什么是udp&#34;&gt;什么是UDP&lt;/h4&gt;&#xA;&lt;p&gt;UDP是一种无连接，不可靠，轻量级传输协议，用于快速发送数据包，但不保证数据一定能送达，不保证顺序，也不进行重传&lt;/p&gt;&#xA;&lt;h4 id=&#34;特点&#34;&gt;特点&lt;/h4&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;特性&lt;/th&gt;&#xA;          &lt;th&gt;UDP&lt;/th&gt;&#xA;          &lt;th&gt;TCP&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;连接方式&lt;/td&gt;&#xA;          &lt;td&gt;无连接（直接发数据）&lt;/td&gt;&#xA;          &lt;td&gt;面向连接（先握手建立连接）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;可靠性&lt;/td&gt;&#xA;          &lt;td&gt;不可靠（不保证送达）&lt;/td&gt;&#xA;          &lt;td&gt;可靠（保证传达，有序，不丢包）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;数据顺序&lt;/td&gt;&#xA;          &lt;td&gt;不保证顺序&lt;/td&gt;&#xA;          &lt;td&gt;保证顺序&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;数据重传&lt;/td&gt;&#xA;          &lt;td&gt;不重传丢失的数据包&lt;/td&gt;&#xA;          &lt;td&gt;会重传丢失或出错的数据包&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;流量控制/拥塞控制&lt;/td&gt;&#xA;          &lt;td&gt;没有&lt;/td&gt;&#xA;          &lt;td&gt;有（防止网络拥堵）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;传输速度&lt;/td&gt;&#xA;          &lt;td&gt;快（开销小，延迟低）&lt;/td&gt;&#xA;          &lt;td&gt;相对慢（因为要保证可靠）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;头部大小&lt;/td&gt;&#xA;          &lt;td&gt;8字节（很小）&lt;/td&gt;&#xA;          &lt;td&gt;至少20字节（较大）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;应用场景&lt;/td&gt;&#xA;          &lt;td&gt;实时性要求高，允许少量丢包的场景&lt;/td&gt;&#xA;          &lt;td&gt;要求可靠传输的场景（如网页，文件）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h4 id=&#34;工作原理&#34;&gt;工作原理&lt;/h4&gt;&#xA;&lt;p&gt;1.不需要事先建立连接：发送方直接把数据打包成UDP的数据包，然后扔到网络上，目标地址写清楚就行&lt;/p&gt;&#xA;&lt;p&gt;2、数据包独立传输：每个UDP数据包都是独立的，可能会走不同的路径，也可能丢失，乱序&lt;/p&gt;&#xA;&lt;p&gt;3、不关心对方是否收到：发出去就不管了，不会确认，不会重发，不会排序&lt;/p&gt;&#xA;&lt;p&gt;4.适合快速发送：因为没有复杂的控制机制，所以速度快，开销小，实时性强&lt;/p&gt;&#xA;&lt;h4 id=&#34;实现&#34;&gt;实现&lt;/h4&gt;&#xA;&lt;p&gt;在golang中依靠的是net&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;NewUDPSender&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;serverAddr&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;udpAddr&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ResolveUDPAddr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;udp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;serverAddr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DialUDP&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;udp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;udpAddr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;addr&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;udpAddr&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Send&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Lock&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unlock&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Write&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;UDPSender&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;调用：搭建好udp服务后，在需要发送udp数据的地方调用即可&lt;/p&gt;</description>
    </item>
    <item>
      <title>串口服务搭建</title>
      <link>https://note.lican.site/posts/%E4%B8%B2%E5%8F%A3%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Mon, 24 Nov 2025 14:43:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E4%B8%B2%E5%8F%A3%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h3 id=&#34;串口服务搭建&#34;&gt;串口服务搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：由于客户方需要根据我们环境监测设备采集的温湿度来通过PLC设备调控模拟现场的温湿度，我们需要将采集的数据传递给PLC设备，客户方只能通过Modbus 232串口来接收数据，因此，我们需要在原服务的基础上搭建一套支持串口传递数据的服务【9针插卡连接的是2，3，5针】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/serial/1763966932912.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;打开串口的参数&#34;&gt;打开串口的参数&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SerialConf&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;IsOpenSerial&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;is_open_serial&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 是否打开串口【串口开关】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;port_name&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 串口【windows中的COM1 -&amp;gt; Linux中ttys0】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;BaudRate&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;baud_rate&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 波特率【一般为9600】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;DataBits&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;data_bits&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 数据位，每个字节包含的数据位数，通常8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;stop_bits&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 停止位，每个字节的停止位数，通常为1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;         &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;parity&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 校验位，常见值none(无校验)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;read_timeout&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 读取超时时间&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;WriteTimeout&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;write_timeout&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 写入超时时间&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;SimulateMode&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;     &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;simulate_mode&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 调试模式，若为false表示不真正打开串口&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;AllowedClients&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;allowed_clients&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 允许访问的客户端列表&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;APIKey&lt;/span&gt;         &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;api_key&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// api访问秘钥&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;step1: 开启串口&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;NewSerialBus&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialConf&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBus&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 检查是否启用模拟模式&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IsOpenSerial&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;serial service is not open&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBusImpl&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;isOpen&lt;/span&gt;:   &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;simulate&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Config&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;:        &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Baud&lt;/span&gt;:        &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;BaudRate&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt;:        byte(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DataBits&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;:    &lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;:      &lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Duration&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;port&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;OpenPort&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;failed to open serial port&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Any&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;err: &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;警告: 无法打开串口 %s: %v，使用模拟模式&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBusImpl&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;isOpen&lt;/span&gt;:   &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;simulate&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;:   &lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;serial port open success&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Any&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;port: &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;成功打开串口: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBusImpl&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;port&lt;/span&gt;:   &lt;span style=&#34;color:#a6e22e&#34;&gt;port&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;isOpen&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;step2: 创建监听器&lt;/p&gt;</description>
    </item>
    <item>
      <title>串口服务搭建</title>
      <link>https://note.lican.site/tech/%E4%B8%B2%E5%8F%A3%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Mon, 24 Nov 2025 14:43:00 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E4%B8%B2%E5%8F%A3%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h3 id=&#34;串口服务搭建&#34;&gt;串口服务搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：由于客户方需要根据我们环境监测设备采集的温湿度来通过PLC设备调控模拟现场的温湿度，我们需要将采集的数据传递给PLC设备，客户方只能通过Modbus 232串口来接收数据，因此，我们需要在原服务的基础上搭建一套支持串口传递数据的服务【9针插卡连接的是2，3，5针】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/serial/1763966932912.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;打开串口的参数&#34;&gt;打开串口的参数&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SerialConf&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;IsOpenSerial&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;is_open_serial&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 是否打开串口【串口开关】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;port_name&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 串口【windows中的COM1 -&amp;gt; Linux中ttys0】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;BaudRate&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;baud_rate&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 波特率【一般为9600】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;DataBits&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;data_bits&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 数据位，每个字节包含的数据位数，通常8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;stop_bits&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 停止位，每个字节的停止位数，通常为1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;         &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;parity&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 校验位，常见值none(无校验)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;read_timeout&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 读取超时时间&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;WriteTimeout&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;      &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;write_timeout&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 写入超时时间&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;SimulateMode&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;     &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;simulate_mode&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 调试模式，若为false表示不真正打开串口&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;AllowedClients&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;allowed_clients&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 允许访问的客户端列表&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;APIKey&lt;/span&gt;         &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;`mapstructure:&amp;#34;api_key&amp;#34;`&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// api访问秘钥&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;step1: 开启串口&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;NewSerialBus&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialConf&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBus&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 检查是否启用模拟模式&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IsOpenSerial&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;serial service is not open&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBusImpl&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;isOpen&lt;/span&gt;:   &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;simulate&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Config&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;:        &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Baud&lt;/span&gt;:        &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;BaudRate&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Size&lt;/span&gt;:        byte(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DataBits&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;:    &lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StopBits&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;:      &lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Parity&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Duration&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;port&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;serial&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;OpenPort&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;failed to open serial port&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Any&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;err: &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;警告: 无法打开串口 %s: %v，使用模拟模式&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBusImpl&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;isOpen&lt;/span&gt;:   &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;simulate&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;:   &lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;serial port open success&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Any&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;port: &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;成功打开串口: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PortName&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SerialBusImpl&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;port&lt;/span&gt;:   &lt;span style=&#34;color:#a6e22e&#34;&gt;port&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;serialConfig&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;isOpen&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;step2: 创建监听器&lt;/p&gt;</description>
    </item>
    <item>
      <title>书籍汇总</title>
      <link>https://note.lican.site/article/%E4%B9%A6%E7%B1%8D%E6%B1%87%E6%80%BB/</link>
      <pubDate>Wed, 17 Sep 2025 13:42:18 +0800</pubDate>
      <guid>https://note.lican.site/article/%E4%B9%A6%E7%B1%8D%E6%B1%87%E6%80%BB/</guid>
      <description>&lt;p&gt;前言&lt;/p&gt;&#xA;&lt;p&gt;免费书籍汇总。&lt;/p&gt;&#xA;&lt;p&gt;没有注明语种的，都为英语资源。&lt;/p&gt;&#xA;&lt;p&gt;能下载到全网99% PDF电子书的方法 → &lt;a href=&#34;https://www.chendianrong.com/pdf#IT&#34;&gt;PDF下载&lt;/a&gt;  &lt;a href=&#34;https://www.chendianrong.com/pdf#IT&#34;&gt;https://www.chendianrong.com/pdf#IT&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;## 目录&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E4%B8%80web-%E5%BC%80%E5%8F%91&#34;&gt;一、Web 开发&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E4%BA%8C%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86&#34;&gt;二、系统管理&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E4%B8%89%E7%BC%96%E7%A8%8B%E8%AF%AD%E8%A8%80&#34;&gt;三、编程语言&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E5%9B%9B%E6%95%B0%E6%8D%AE%E5%BA%93&#34;&gt;四、数据库&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E4%BA%94%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91&#34;&gt;五、软件开发&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E5%85%AD%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&#34;&gt;六、人工智能&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E4%B8%83%E6%95%B0%E5%AD%A6%E7%90%86%E8%AE%BA&#34;&gt;七、数学理论&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;- &lt;a href=&#34;#%E5%85%AB%E5%85%B6%E4%BB%96&#34;&gt;八、其他&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;## 一、Web 开发&lt;/p&gt;&#xA;&lt;p&gt;### 1.1 JavaScript 语言&lt;/p&gt;&#xA;&lt;p&gt;\1. The Modern JavaScript Tutorial（&lt;a href=&#34;https://zh.javascript.info/&#34;&gt;中文&lt;/a&gt;，&lt;a href=&#34;https://javascript.info/&#34;&gt;英文&lt;/a&gt;）&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://github.com/getify/You-Dont-Know-JS&#34;&gt;你不知道的 JS&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;http://speakingjs.com/&#34;&gt;Speaking JavaScript&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://exploringjs.com/impatient-js/index.html&#34;&gt;急性子程序员的 JavaScript 教程&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://wangdoc.com/javascript/&#34;&gt;JavaScript 语言教程&lt;/a&gt;（中文）&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://github.com/nzakas/understandinges6/tree/master/manuscript&#34;&gt;理解 ES6&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://exploringjs.com/es6/&#34;&gt;探索 ES6&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://exploringjs.com/es2016-es2017.html&#34;&gt;探索 ES2016 和 ES2017&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://exploringjs.com/es2018-es2019/toc.html&#34;&gt;探索 ES2018 和 ES2019&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;http://es6.ruanyifeng.com/&#34;&gt;ES6 标准入门&lt;/a&gt;（中文）&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://eloquentjavascript.net/&#34;&gt;Eloquent JavaScript（第三版）&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. JavaScript 的前20年（JavaScript: The First 20 Years）（&lt;a href=&#34;https://cn.history.js.org/&#34;&gt;中文&lt;/a&gt;，&lt;a href=&#34;https://zenodo.org/record/3707008&#34;&gt;英文&lt;/a&gt;）&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://exploringjs.com/tackling-ts/&#34;&gt;TypeScript 教程&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. Node.js 入门（&lt;a href=&#34;https://www.nodebeginner.org/index-zh-cn.html&#34;&gt;中文&lt;/a&gt;，&lt;a href=&#34;https://www.nodebeginner.org/&#34;&gt;英文&lt;/a&gt;）&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://github.com/krasimir/react-in-patterns&#34;&gt;React 编程模式&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;\1. &lt;a href=&#34;https://github.com/tyroprogrammer/learn-react-app/tree/master/src/tutorial&#34;&gt;React 应用开发教程&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mqtt服务搭建</title>
      <link>https://note.lican.site/posts/mqtt%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Wed, 27 Aug 2025 15:10:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/mqtt%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h3 id=&#34;mqtt服务搭建&#34;&gt;Mqtt服务搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：物联网项目中， 很多时候要求设备与后台实现双向通信，因为设备时常处于内网或离线，此时Mqtt就派上用场了&lt;/p&gt;&#xA;&lt;p&gt;实现原理：emqx作为消息中间件，连接后台和设备的发布和订阅端，后台发布某个topic的消息，设备订阅某个topic的消息。后台也可以订阅某个topic的消息，设备也可以发布某个topic的消息，topic作为点对点的消息通道&lt;/p&gt;&#xA;&lt;p&gt;示例：一台云服务器向六台mini服务器发送采样指令，同时订阅六台mini服务器上报的数据&lt;/p&gt;&#xA;&lt;p&gt;Step1:我们在云服务器上使用docker-compose搭建emqx服务【我们使用的是5.0.26版本】&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;docker-compose.yaml&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;emqx&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;emqx:5.0.26&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;emqx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EMQX_CLUSTER__DISCOVERY_STRATEGY=static&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;healthcheck&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;test&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CMD&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/opt/emqx/bin/emqx_ctl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;interval&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;timeout&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;25s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;retries&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8083:8083&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8084:8084&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8883:8883&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;18083:18083&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1883:1883&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;18081:8081&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;www&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2M&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 单个文件大小为200k&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 最多10个文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;www&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后执行docker-compose up -d 就搭建好了【默认账号密码：admin/public】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756274462852.png&#34; alt=&#34;1756274462852&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;ip:18083是emqx管理端的页面&lt;/p&gt;&#xA;&lt;p&gt;ip:1883是emqx的mqtt的连接地址&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756274569757.png&#34; alt=&#34;1756274569757&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Step2: 设置客户端连接的账号密码已经秘钥&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;由于mqtt连接需要使用账号密码，所以需要设置【在侧边栏选择 客户端认证-内置数据库-用户管理-点击+】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756274725015.png&#34; alt=&#34;1756274725015&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;mqtt虽然是长连接，但由于某些情况，例如设备网络波动，连接超时等原因导致设备未能连上mqtt，后台发布的topic需要客户端在线才能订阅到，因此需要创建秘钥，在下发指令时，先判断客户端是否在线&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756275010425.png&#34; alt=&#34;1756275010425&#34;&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;示例代码&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;wqc&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;WaterQualityConfig&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;CheckWaterDeviceConnect&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;Connected&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ip&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Common&lt;/span&gt;{}.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetLocalIP&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ip&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:18083/api/v5/clients/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 用户名和密码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Key&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Secret&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 拼接 Basic Auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;basicAuth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Basic &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;base64&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StdEncoding&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EncodeToString&lt;/span&gt;([]byte(&lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewRequest&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 添加 Authorization 头&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Header&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;basicAuth&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CheckWaterDeviceConnect&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ClientID:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;url:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;basicAuth:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;basicAuth&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 发起请求&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Client&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Do&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;请求失败:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 根据 HTTP 响应状态码判断设备是否在线&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusOK&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// 200&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 设备在线，API 返回了客户端信息&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ioutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;设备在线，响应内容:&amp;#34;&lt;/span&gt;, string(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusNotFound&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// 404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 设备不在线&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;设备不在线（未找到）:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 其它状态码，比如 401（未授权）、500 等&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ioutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;查询设备状态失败，状态码: %d, 响应: %s\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusCode&lt;/span&gt;, string(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Step3: 在项目中配置mqtt的发布和订阅参数&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mqtt服务搭建</title>
      <link>https://note.lican.site/tech/mqtt%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Wed, 27 Aug 2025 15:10:00 +0800</pubDate>
      <guid>https://note.lican.site/tech/mqtt%E6%9C%8D%E5%8A%A1%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h3 id=&#34;mqtt服务搭建&#34;&gt;Mqtt服务搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：物联网项目中， 很多时候要求设备与后台实现双向通信，因为设备时常处于内网或离线，此时Mqtt就派上用场了&lt;/p&gt;&#xA;&lt;p&gt;实现原理：emqx作为消息中间件，连接后台和设备的发布和订阅端，后台发布某个topic的消息，设备订阅某个topic的消息。后台也可以订阅某个topic的消息，设备也可以发布某个topic的消息，topic作为点对点的消息通道&lt;/p&gt;&#xA;&lt;p&gt;示例：一台云服务器向六台mini服务器发送采样指令，同时订阅六台mini服务器上报的数据&lt;/p&gt;&#xA;&lt;p&gt;Step1:我们在云服务器上使用docker-compose搭建emqx服务【我们使用的是5.0.26版本】&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;docker-compose.yaml&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;emqx&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;emqx:5.0.26&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;emqx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EMQX_CLUSTER__DISCOVERY_STRATEGY=static&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;healthcheck&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;test&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CMD&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/opt/emqx/bin/emqx_ctl&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;interval&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;timeout&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;25s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;retries&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8083:8083&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8084:8084&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8883:8883&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;18083:18083&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1883:1883&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;18081:8081&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;www&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2M&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 单个文件大小为200k&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 最多10个文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;www&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后执行docker-compose up -d 就搭建好了【默认账号密码：admin/public】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756274462852.png&#34; alt=&#34;1756274462852&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;ip:18083是emqx管理端的页面&lt;/p&gt;&#xA;&lt;p&gt;ip:1883是emqx的mqtt的连接地址&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756274569757.png&#34; alt=&#34;1756274569757&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Step2: 设置客户端连接的账号密码已经秘钥&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;由于mqtt连接需要使用账号密码，所以需要设置【在侧边栏选择 客户端认证-内置数据库-用户管理-点击+】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756274725015.png&#34; alt=&#34;1756274725015&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;mqtt虽然是长连接，但由于某些情况，例如设备网络波动，连接超时等原因导致设备未能连上mqtt，后台发布的topic需要客户端在线才能订阅到，因此需要创建秘钥，在下发指令时，先判断客户端是否在线&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/mqtt/1756275010425.png&#34; alt=&#34;1756275010425&#34;&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;示例代码&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;wqc&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;WaterQualityConfig&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;CheckWaterDeviceConnect&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;Connected&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ip&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Common&lt;/span&gt;{}.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetLocalIP&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;http://&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ip&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:18083/api/v5/clients/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 用户名和密码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Key&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Secret&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 拼接 Basic Auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;basicAuth&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Basic &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;base64&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StdEncoding&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EncodeToString&lt;/span&gt;([]byte(&lt;span style=&#34;color:#a6e22e&#34;&gt;auth&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewRequest&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GET&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 添加 Authorization 头&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Header&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;basicAuth&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CheckWaterDeviceConnect&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ClientID:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;url:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;logger&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;basicAuth:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;basicAuth&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 发起请求&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Client&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Do&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;req&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;请求失败:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 根据 HTTP 响应状态码判断设备是否在线&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusOK&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// 200&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 设备在线，API 返回了客户端信息&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ioutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;设备在线，响应内容:&amp;#34;&lt;/span&gt;, string(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusCode&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusNotFound&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// 404&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 设备不在线&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;设备不在线（未找到）:&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ClientID&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 其它状态码，比如 401（未授权）、500 等&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ioutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Body&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;查询设备状态失败，状态码: %d, 响应: %s\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusCode&lt;/span&gt;, string(&lt;span style=&#34;color:#a6e22e&#34;&gt;body&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Step3: 在项目中配置mqtt的发布和订阅参数&lt;/p&gt;</description>
    </item>
    <item>
      <title>dnf端游私有化部署</title>
      <link>https://note.lican.site/project/dnf%E9%83%A8%E7%BD%B2%E6%AD%A5%E9%AA%A4/</link>
      <pubDate>Wed, 18 Jun 2025 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/dnf%E9%83%A8%E7%BD%B2%E6%AD%A5%E9%AA%A4/</guid>
      <description>&lt;h3 id=&#34;dnf私有化部署&#34;&gt;dnf私有化部署&lt;/h3&gt;&#xA;&lt;p&gt;1.安装桌面端&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;O&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;www&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;lican&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;asia&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssh&lt;/span&gt;;&lt;span style=&#34;color:#a6e22e&#34;&gt;chmod&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssh&lt;/span&gt;;.&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.输入1跑完命令【跑到一半，弹框提示服务器ip，点击回车，默认就是本机服务器ip】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761616522599.png&#34; alt=&#34;1761616522599&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761621198592.png&#34; alt=&#34;1761621198592&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;3.配置花枝登录器【W2nYgp2P6K】&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;复制网关文件&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761632041654.png&#34; alt=&#34;1761632041654&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761632170797.png&#34; alt=&#34;1761632170797&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;1.将root目录下的内容复制到服务器根目录/ 下，且赋予文件777权限&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761632127122.png&#34; alt=&#34;1761632127122&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;2.将usr/lib64目录下的两个文件复制到服务器的/usr/lib64目录下，且赋予文件777权限&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761632208589.png&#34; alt=&#34;1761632208589&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761632251777.png&#34; alt=&#34;1761632251777&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;3.上传对应的秘钥，pvf文件和等级补丁，我们这里搭建的是70版本，所以上传70版本的补丁&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;进入/home/neople/game目录&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;上传秘钥, pvf 文件和等级补丁&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633077500.png&#34; alt=&#34;1761633077500&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633119449.png&#34; alt=&#34;1761633119449&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;4.将秘钥也复制一份到/root目录下&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633186349.png&#34; alt=&#34;1761633186349&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;5.在/root目录下执行 ./Restart 启动登录器&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633218824.png&#34; alt=&#34;1761633218824&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;6.使用花枝登录器登陆配置相关信息&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633803607.png&#34; alt=&#34;1761633803607&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;开关管理，将版本修改为对应搭建的版本&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633856730.png&#34; alt=&#34;1761633856730&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;登录器设置&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761633978013.png&#34; alt=&#34;1761633978013&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;生成授权文件【登陆配置参数】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634010110.png&#34; alt=&#34;1761634010110&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;7.配置客户端&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对应等级的dnf源码包【我用的是70级】&lt;/li&gt;&#xA;&lt;li&gt;登录器配套客户端&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;7.1 我们创建一个空文件夹，命名为dnf&lt;/p&gt;&#xA;&lt;p&gt;7.2 将70等级源码包内容全部复制到dnf中&lt;/p&gt;&#xA;&lt;p&gt;7.3 将登录器配套客户端代码也全部复制到dnf中，一定要覆盖粘贴，这样dnf包内就是两个包文件的组合&lt;/p&gt;&#xA;&lt;p&gt;7.4 将花枝登录器生成的 pvf加密文件Script.pvf和授权文件HzTCP.dll也复制到dnf文件夹内【后面这个就是客户端】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634287019.png&#34; alt=&#34;1761634287019&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;8.进入服务器的/root下，执行./run 跑五国&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634367261.png&#34; alt=&#34;1761634367261&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;出现这个就表示成功&lt;/p&gt;&#xA;&lt;p&gt;9.进入dnf文件夹，找到登录器.exe文件，有三种，任意一种即可&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634431207.png&#34; alt=&#34;1761634431207&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634450206.png&#34; alt=&#34;1761634450206&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;10.当第一次进入时，会显示服务器已关闭&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634478360.png&#34; alt=&#34;1761634478360&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;此时，我们只需要重新跑一次五国即可，在/root目录下执行&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;./stop&lt;/li&gt;&#xA;&lt;li&gt;./run&lt;/li&gt;&#xA;&lt;li&gt;重新显示五国信息即可&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634526140.png&#34; alt=&#34;1761634526140&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/dnf/1761634540715.png&#34; alt=&#34;1761634540715&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>K8s安装</title>
      <link>https://note.lican.site/posts/k8s%E5%AE%89%E8%A3%85/</link>
      <pubDate>Mon, 24 Mar 2025 16:08:18 +0800</pubDate>
      <guid>https://note.lican.site/posts/k8s%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;k8s安装&#34;&gt;k8s安装&lt;/h3&gt;&#xA;&lt;p&gt;背景：和docker-compose一样，k8s也是容器编排工具，但k8s是一个更复杂的容器编排系统，用于管理大规模的容器化应用。&lt;/p&gt;&#xA;&lt;p&gt;核心定位&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;维度&lt;/th&gt;&#xA;          &lt;th&gt;Docker Compose&lt;/th&gt;&#xA;          &lt;th&gt;Kubernetes&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;目标场景&lt;/td&gt;&#xA;          &lt;td&gt;单机开发，测试环境(单节点)&lt;/td&gt;&#xA;          &lt;td&gt;生产多节点集群，大规模分布式应用&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;功能定位&lt;/td&gt;&#xA;          &lt;td&gt;定义和运行多容器应用(开发友好)&lt;/td&gt;&#xA;          &lt;td&gt;容器编排，集群管理，自动化运维&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;学习曲线&lt;/td&gt;&#xA;          &lt;td&gt;简单(YAML语法直观)&lt;/td&gt;&#xA;          &lt;td&gt;陡峭(需掌握Pod, Service, Ingress等核心概念)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;核心功能对比&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;功能&lt;/th&gt;&#xA;          &lt;th&gt;Docker Compose&lt;/th&gt;&#xA;          &lt;th&gt;Kubernetes&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;容器编排&lt;/td&gt;&#xA;          &lt;td&gt;单机多容器编排(通过docker-compose.yml)&lt;/td&gt;&#xA;          &lt;td&gt;跨节点容器编排(支持回滚更新，回滚，副本管理)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;扩展性&lt;/td&gt;&#xA;          &lt;td&gt;仅单机扩展(依赖宿主机资源)&lt;/td&gt;&#xA;          &lt;td&gt;动态扩缩容(HPA), 多接点集群自动调度&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;高可用性&lt;/td&gt;&#xA;          &lt;td&gt;不支持(单点故障风险)&lt;/td&gt;&#xA;          &lt;td&gt;支持(Pod自动重启，节点故障转移)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;网络管理&lt;/td&gt;&#xA;          &lt;td&gt;简单容器间网络(自定义网络)&lt;/td&gt;&#xA;          &lt;td&gt;复杂网络策略(NetworkPolicy, Service发现)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;存储管理&lt;/td&gt;&#xA;          &lt;td&gt;本地卷或命名卷&lt;/td&gt;&#xA;          &lt;td&gt;动态卷供应(PV/PVC),支持云存储和分布式存储&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;负载均衡&lt;/td&gt;&#xA;          &lt;td&gt;无内置负载均衡&lt;/td&gt;&#xA;          &lt;td&gt;Service和Ingress支持负载均衡&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;监控与日志&lt;/td&gt;&#xA;          &lt;td&gt;依赖外部工具(如Prometheus+Grafana)&lt;/td&gt;&#xA;          &lt;td&gt;集成监控(Metrics Server)，日志聚合方案丰富&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;适用场景&lt;/p&gt;&#xA;&lt;p&gt;Docker Compose适用场景&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;本地开发环境：快速启动多个关联服务(如前端+后端+数据库)&lt;/li&gt;&#xA;&lt;li&gt;单机测试：验证多容器应用的交互逻辑&lt;/li&gt;&#xA;&lt;li&gt;简单项目部署：小型项目或原型验证&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Kubernetes适用场景&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;生产环境部署：需要高可用性，自动恢复，滚动更新&lt;/li&gt;&#xA;&lt;li&gt;大规模集群管理：跨多个节点动态调度容器&lt;/li&gt;&#xA;&lt;li&gt;微服务架构：服务发现，流量管理，金丝雀发布&lt;/li&gt;&#xA;&lt;li&gt;混合云/多云部署：统一管理跨云平台的容器&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;配置文件示例：&lt;/p&gt;&#xA;&lt;p&gt;Docker Compose（docker-compose.yml）&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.8&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;web&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;latest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8080:80&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;db&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;postgres&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumns&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;db_data&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;postgresql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumns&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;db_data&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kubernetes（deployment.yaml + service.yaml）&lt;/p&gt;</description>
    </item>
    <item>
      <title>K8s安装</title>
      <link>https://note.lican.site/tech/k8s%E5%AE%89%E8%A3%85/</link>
      <pubDate>Mon, 24 Mar 2025 16:08:18 +0800</pubDate>
      <guid>https://note.lican.site/tech/k8s%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;k8s安装&#34;&gt;k8s安装&lt;/h3&gt;&#xA;&lt;p&gt;背景：和docker-compose一样，k8s也是容器编排工具，但k8s是一个更复杂的容器编排系统，用于管理大规模的容器化应用。&lt;/p&gt;&#xA;&lt;p&gt;核心定位&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;维度&lt;/th&gt;&#xA;          &lt;th&gt;Docker Compose&lt;/th&gt;&#xA;          &lt;th&gt;Kubernetes&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;目标场景&lt;/td&gt;&#xA;          &lt;td&gt;单机开发，测试环境(单节点)&lt;/td&gt;&#xA;          &lt;td&gt;生产多节点集群，大规模分布式应用&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;功能定位&lt;/td&gt;&#xA;          &lt;td&gt;定义和运行多容器应用(开发友好)&lt;/td&gt;&#xA;          &lt;td&gt;容器编排，集群管理，自动化运维&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;学习曲线&lt;/td&gt;&#xA;          &lt;td&gt;简单(YAML语法直观)&lt;/td&gt;&#xA;          &lt;td&gt;陡峭(需掌握Pod, Service, Ingress等核心概念)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;核心功能对比&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;功能&lt;/th&gt;&#xA;          &lt;th&gt;Docker Compose&lt;/th&gt;&#xA;          &lt;th&gt;Kubernetes&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;容器编排&lt;/td&gt;&#xA;          &lt;td&gt;单机多容器编排(通过docker-compose.yml)&lt;/td&gt;&#xA;          &lt;td&gt;跨节点容器编排(支持回滚更新，回滚，副本管理)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;扩展性&lt;/td&gt;&#xA;          &lt;td&gt;仅单机扩展(依赖宿主机资源)&lt;/td&gt;&#xA;          &lt;td&gt;动态扩缩容(HPA), 多接点集群自动调度&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;高可用性&lt;/td&gt;&#xA;          &lt;td&gt;不支持(单点故障风险)&lt;/td&gt;&#xA;          &lt;td&gt;支持(Pod自动重启，节点故障转移)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;网络管理&lt;/td&gt;&#xA;          &lt;td&gt;简单容器间网络(自定义网络)&lt;/td&gt;&#xA;          &lt;td&gt;复杂网络策略(NetworkPolicy, Service发现)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;存储管理&lt;/td&gt;&#xA;          &lt;td&gt;本地卷或命名卷&lt;/td&gt;&#xA;          &lt;td&gt;动态卷供应(PV/PVC),支持云存储和分布式存储&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;负载均衡&lt;/td&gt;&#xA;          &lt;td&gt;无内置负载均衡&lt;/td&gt;&#xA;          &lt;td&gt;Service和Ingress支持负载均衡&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;监控与日志&lt;/td&gt;&#xA;          &lt;td&gt;依赖外部工具(如Prometheus+Grafana)&lt;/td&gt;&#xA;          &lt;td&gt;集成监控(Metrics Server)，日志聚合方案丰富&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;适用场景&lt;/p&gt;&#xA;&lt;p&gt;Docker Compose适用场景&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;本地开发环境：快速启动多个关联服务(如前端+后端+数据库)&lt;/li&gt;&#xA;&lt;li&gt;单机测试：验证多容器应用的交互逻辑&lt;/li&gt;&#xA;&lt;li&gt;简单项目部署：小型项目或原型验证&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Kubernetes适用场景&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;生产环境部署：需要高可用性，自动恢复，滚动更新&lt;/li&gt;&#xA;&lt;li&gt;大规模集群管理：跨多个节点动态调度容器&lt;/li&gt;&#xA;&lt;li&gt;微服务架构：服务发现，流量管理，金丝雀发布&lt;/li&gt;&#xA;&lt;li&gt;混合云/多云部署：统一管理跨云平台的容器&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;配置文件示例：&lt;/p&gt;&#xA;&lt;p&gt;Docker Compose（docker-compose.yml）&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.8&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;web&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;latest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;8080:80&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;db&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;postgres&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumns&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;db_data&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;postgresql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumns&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;db_data&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Kubernetes（deployment.yaml + service.yaml）&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grafana&#43;Loki搭建日志系统</title>
      <link>https://note.lican.site/posts/grafana&#43;loki%E6%90%AD%E5%BB%BA%E6%97%A5%E5%BF%97%E7%B3%BB%E7%BB%9F/</link>
      <pubDate>Tue, 18 Mar 2025 17:53:55 +0800</pubDate>
      <guid>https://note.lican.site/posts/grafana&#43;loki%E6%90%AD%E5%BB%BA%E6%97%A5%E5%BF%97%E7%B3%BB%E7%BB%9F/</guid>
      <description>&lt;h3 id=&#34;grafanaloki搭建日志系统&#34;&gt;Grafana+Loki搭建日志系统&lt;/h3&gt;&#xA;&lt;h3 id=&#34;背景-之前搭建过elasticsearchkibanafilebeat的日志系统由于日志存储的位置是动态的filebeat采集目录需要对应更换当执行dockerc-compose-downdocker-compose-up原容器id会变存储的目录也会变所以觉得实用性不大所以使用grafanaloki搭建日志系统将容器的日志推送到loki上然后使用grafana配置loki数据源即可&#34;&gt;背景： 之前搭建过elasticsearch+kibana+filebeat的日志系统，由于日志存储的位置是动态的，filebeat采集目录需要对应更换，当执行dockerc-compose down;docker-compose up;原容器ID会变，存储的目录也会变，所以觉得实用性不大。所以使用grafana+loki搭建日志系统，将容器的日志推送到loki上，然后使用grafana配置loki数据源即可~&lt;/h3&gt;&#xA;&lt;p&gt;1.构建docker-compose.yaml文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Loki&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;日志搜集&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;2.4.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana_loki&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;31000:3100&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_AGENT_HOST&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_ENDPOINT&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//tempo:14268/api/traces # send traces to Tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_SAMPLER_TYPE&lt;/span&gt;=&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_SAMPLER_PARAM&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Promtail&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;日志搜集&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;2.4.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana_promtail&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;=&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Tempo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;日志追踪&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1.2.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-config.file=/etc/tempo.yaml&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana_tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;local&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;14268:14268&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jaeger&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ingest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3200:3200&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;55680&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;otlp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grpc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;55681&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;otlp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9411&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;zipkin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Grafana&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;界面查看&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;8.2.6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;30000:3000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;share&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Prometheus&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;指标监控&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;prometheus&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;prom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;prometheus&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.31.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;prometheus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9090:9090&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;站点监控&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;blackbox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exporter&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;prom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;blackbox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exporter&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;v0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.19.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blackbox_exporter&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9115:9115&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./blackbox_exporter/config.yml:/etc/blackbox_exporter/config.yml&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;系统监控&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;node_exporter&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;prom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exporter&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.3.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;node_exporter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--path.rootfs=/host&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;network_mode&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pid&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;unless&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stopped&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/:/host:ro,rslave&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动时，某些容器会失败，原因是配置文件没加载，针对上述容器，我们列举配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>Grafana&#43;Loki搭建日志系统</title>
      <link>https://note.lican.site/tech/grafana&#43;loki%E6%90%AD%E5%BB%BA%E6%97%A5%E5%BF%97%E7%B3%BB%E7%BB%9F/</link>
      <pubDate>Tue, 18 Mar 2025 17:53:55 +0800</pubDate>
      <guid>https://note.lican.site/tech/grafana&#43;loki%E6%90%AD%E5%BB%BA%E6%97%A5%E5%BF%97%E7%B3%BB%E7%BB%9F/</guid>
      <description>&lt;h3 id=&#34;grafanaloki搭建日志系统&#34;&gt;Grafana+Loki搭建日志系统&lt;/h3&gt;&#xA;&lt;h3 id=&#34;背景-之前搭建过elasticsearchkibanafilebeat的日志系统由于日志存储的位置是动态的filebeat采集目录需要对应更换当执行dockerc-compose-downdocker-compose-up原容器id会变存储的目录也会变所以觉得实用性不大所以使用grafanaloki搭建日志系统将容器的日志推送到loki上然后使用grafana配置loki数据源即可&#34;&gt;背景： 之前搭建过elasticsearch+kibana+filebeat的日志系统，由于日志存储的位置是动态的，filebeat采集目录需要对应更换，当执行dockerc-compose down;docker-compose up;原容器ID会变，存储的目录也会变，所以觉得实用性不大。所以使用grafana+loki搭建日志系统，将容器的日志推送到loki上，然后使用grafana配置loki数据源即可~&lt;/h3&gt;&#xA;&lt;p&gt;1.构建docker-compose.yaml文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Loki&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;日志搜集&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;2.4.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana_loki&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;31000:3100&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loki&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_AGENT_HOST&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_ENDPOINT&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//tempo:14268/api/traces # send traces to Tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_SAMPLER_TYPE&lt;/span&gt;=&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JAEGER_SAMPLER_PARAM&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Promtail&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;日志搜集&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;2.4.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana_promtail&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;: &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;=&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;promtail&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;config&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Tempo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;日志追踪&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1.2.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-config.file=/etc/tempo.yaml&amp;#34;&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana_tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;local&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yaml&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;14268:14268&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jaeger&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ingest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3200:3200&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tempo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;55680&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;otlp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grpc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;55681&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;otlp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9411&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;zipkin&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Grafana&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;界面查看&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;8.2.6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;30000:3000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;share&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Prometheus&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;指标监控&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;prometheus&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;prom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;prometheus&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.31.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;prometheus&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9090:9090&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;站点监控&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;blackbox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exporter&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;prom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;blackbox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exporter&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;v0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.19.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;blackbox_exporter&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9115:9115&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;./blackbox_exporter/config.yml:/etc/blackbox_exporter/config.yml&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;系统监控&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;node_exporter&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;prom&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;exporter&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.3.1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;node_exporter&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;--path.rootfs=/host&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;network_mode&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pid&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;unless&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stopped&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/:/host:ro,rslave&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;grafana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;启动时，某些容器会失败，原因是配置文件没加载，针对上述容器，我们列举配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>搭建多服务器管理工具Portainer</title>
      <link>https://note.lican.site/posts/%E6%90%AD%E5%BB%BA%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7portainer/</link>
      <pubDate>Mon, 17 Mar 2025 10:58:35 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E6%90%AD%E5%BB%BA%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7portainer/</guid>
      <description>&lt;h3 id=&#34;搭建多服务器管理工具portainer&#34;&gt;搭建多服务器管理工具Portainer&lt;/h3&gt;&#xA;&lt;p&gt;背景：我们有很多mini服务器【工业服务器】里面部署了很多容器，想找一款可以集中管理这些容器的工具，于是找到了Portainer&lt;/p&gt;&#xA;&lt;p&gt;1.安装Partainer&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;docker run -d -p 9000:9000 &amp;ndash;name portainer     &amp;ndash;restart always     -v /var/run/docker.sock:/var/run/docker.sock     portainer/portainer-ce&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;2.启动之后，执行docker ps | grep portainer, 查看运行状态&lt;img src=&#34;https://www.lican.asia/images/portainer/1741741989295.png&#34; alt=&#34;1741741989295&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;3.浏览器中访问ip:9000端口，即可打开portainer界面&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742118236.png&#34; alt=&#34;1741742118236&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;4.点击侧边栏的SETTINGS能看到本地的docker环境&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742207626.png&#34; alt=&#34;1741742207626&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;5.可以查看并操作对应的容器&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742244033.png&#34; alt=&#34;1741742244033&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742259964.png&#34; alt=&#34;1741742259964&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;6.添加/管理其它服务器的docker容器&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;点击侧边栏的Environments-&amp;gt;Add environment&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742349874.png&#34; alt=&#34;1741742349874&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;选择docker tab栏，添加配置&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742783532.png&#34; alt=&#34;1741742783532&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;添加时，可能提示 Failure&#xA;Cannot connect to the Dockerdaemon at&#xA;tcp://xxx:2375. ls thedocker daemon running?&lt;/p&gt;&#xA;&lt;p&gt;此时需要修改docker的配置，开启docker的tcp://ip:2375服务&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742945997.png&#34; alt=&#34;1741742945997&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;修改docker.service&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemd&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;system&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;添加以下配置&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;H&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tcp&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//0.0.0.0:2375 -H unix:///var/run/docker.sock&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741743171824.png&#34; alt=&#34;1741743171824&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;赋予docker.service权限&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chmod&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemd&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;system&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;重启docker&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;daemon&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;reload&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;然后点击添加&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741845871185.png&#34; alt=&#34;1741845871185&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>搭建多服务器管理工具Portainer</title>
      <link>https://note.lican.site/tech/%E6%90%AD%E5%BB%BA%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7portainer/</link>
      <pubDate>Mon, 17 Mar 2025 10:58:35 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E6%90%AD%E5%BB%BA%E5%A4%9A%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7portainer/</guid>
      <description>&lt;h3 id=&#34;搭建多服务器管理工具portainer&#34;&gt;搭建多服务器管理工具Portainer&lt;/h3&gt;&#xA;&lt;p&gt;背景：我们有很多mini服务器【工业服务器】里面部署了很多容器，想找一款可以集中管理这些容器的工具，于是找到了Portainer&lt;/p&gt;&#xA;&lt;p&gt;1.安装Partainer&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;docker run -d -p 9000:9000 &amp;ndash;name portainer     &amp;ndash;restart always     -v /var/run/docker.sock:/var/run/docker.sock     portainer/portainer-ce&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;2.启动之后，执行docker ps | grep portainer, 查看运行状态&lt;img src=&#34;https://www.lican.asia/images/portainer/1741741989295.png&#34; alt=&#34;1741741989295&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;3.浏览器中访问ip:9000端口，即可打开portainer界面&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742118236.png&#34; alt=&#34;1741742118236&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;4.点击侧边栏的SETTINGS能看到本地的docker环境&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742207626.png&#34; alt=&#34;1741742207626&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;5.可以查看并操作对应的容器&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742244033.png&#34; alt=&#34;1741742244033&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742259964.png&#34; alt=&#34;1741742259964&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;6.添加/管理其它服务器的docker容器&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;点击侧边栏的Environments-&amp;gt;Add environment&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742349874.png&#34; alt=&#34;1741742349874&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;选择docker tab栏，添加配置&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742783532.png&#34; alt=&#34;1741742783532&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;添加时，可能提示 Failure&#xA;Cannot connect to the Dockerdaemon at&#xA;tcp://xxx:2375. ls thedocker daemon running?&lt;/p&gt;&#xA;&lt;p&gt;此时需要修改docker的配置，开启docker的tcp://ip:2375服务&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741742945997.png&#34; alt=&#34;1741742945997&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;修改docker.service&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemd&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;system&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;添加以下配置&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;H&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tcp&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//0.0.0.0:2375 -H unix:///var/run/docker.sock&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741743171824.png&#34; alt=&#34;1741743171824&#34;&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;赋予docker.service权限&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chmod&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemd&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;system&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;service&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;重启docker&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;daemon&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;reload&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;然后点击添加&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/portainer/1741845871185.png&#34; alt=&#34;1741845871185&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>windows/linux使用ollama搭建ai模型</title>
      <link>https://note.lican.site/posts/windows%E6%9C%AC%E5%9C%B0%E4%BD%BF%E7%94%A8ollama%E6%90%AD%E5%BB%BAai%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Tue, 11 Mar 2025 10:47:23 +0800</pubDate>
      <guid>https://note.lican.site/posts/windows%E6%9C%AC%E5%9C%B0%E4%BD%BF%E7%94%A8ollama%E6%90%AD%E5%BB%BAai%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;h3 id=&#34;windowslinux使用ollama搭建ai模型&#34;&gt;windows/linux使用ollama搭建ai模型&lt;/h3&gt;&#xA;&lt;p&gt;背景：最近看到朋友圈挺多朋友私有化部署了ai模型，感觉挺6的，决定跟一波风，学习一下本地部署&lt;/p&gt;&#xA;&lt;p&gt;首先，我们需要安装模型载体，这里我们选用&lt;a href=&#34;https://ollama.com/&#34;&gt;ollama&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;1.访问&lt;a href=&#34;https://ollama.com/&#34;&gt;ollama&lt;/a&gt;官网，下载安装包Ollama.Setup&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;windows版本直接下载安装包，双击安装&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741328919736.png&#34; alt=&#34;1741328919736&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;linux版本官网上安装的指令是 &lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;下载速度急慢，有兴趣的朋友可以了解一下&lt;/p&gt;&#xA;&lt;p&gt;于是在网上找到一个解决方案，亲测有效&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;下载ollama_install&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sh并保存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fsSL&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//ollama.com/install.sh -o ollama_install.sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;使用github文件加速替换github下载地址&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sed&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;|&lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//ollama.com/download/ollama-linux|https://gh.llkk.cc/https://github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux|g&amp;#39; ollama_install.sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;替换后增加可执行权限&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chmod&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ollama_install&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;执行sh下载安装&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sh&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ollama_install&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2.安装后，可查看版本&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741328976483.png&#34; alt=&#34;1741328976483&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;3.选择合适的模型，我选择网友们推荐的qwen2【说是对中文支持比较好】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741329083246.png&#34; alt=&#34;1741329083246&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;4.安装模型【windows和linux操作一样】&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ollama&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;qwen2&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741337644929.png&#34; alt=&#34;1741337644929&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装完成之后就可以直接对话了&lt;/p&gt;&#xA;&lt;p&gt;7.07B的参数【1B=10亿】，会占用大量的系统资源&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741337915392.png&#34; alt=&#34;1741337915392&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741337952986.png&#34; alt=&#34;1741337952986&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;5.使用open-webui搭建可视化界面&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;使用docker搭建比较方便&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用docker搭建【换过快速地址】&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6000&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;add&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;internal&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gateway&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;backend&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ghcr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nju&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;edu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;使用docker-compose搭建&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.8&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;ghcr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nju&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;edu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3000:8080&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;extra_hosts&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;host.docker.internal:host-gateway&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;backend&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我用docker-compose搭建&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741338249077.png&#34; alt=&#34;1741338249077&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装完成之后，可以实用本地ip:3000端口访问，也可以配置nginx转发，使用域名访问&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741660941546.png&#34; alt=&#34;1741660941546&#34;&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;webui.conf&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;将此处替换为您的域名&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_session_timeout&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_ciphers&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ECDHE&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;RSA&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;AES128&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;GCM&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SHA256&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ECDHE&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ECDH&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;AES&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;HIGH&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;NULL&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;aNULL&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;MD5&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;ADH&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;RC4&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_protocols&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLSv1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLSv1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLSv1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//127.0.0.1:6000;  # 将请求转发到 open-webui&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;保留主机头&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Real&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remote_addr&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;客户端&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_add_x_forwarded_for&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;代理&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Proto&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;scheme&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;协议&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_http_version&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Upgrade&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http_upgrade&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Connection&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upgrade&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于线上服务器配置不够，只有4核16G，不足以支撑需要的最低配置，在webui调用api/models接口503超时，导致页面无法正常打开，有资源且感兴趣的同学可以试试&lt;/p&gt;</description>
    </item>
    <item>
      <title>windows/linux使用ollama搭建ai模型</title>
      <link>https://note.lican.site/tech/windows%E6%9C%AC%E5%9C%B0%E4%BD%BF%E7%94%A8ollama%E6%90%AD%E5%BB%BAai%E6%A8%A1%E5%9E%8B/</link>
      <pubDate>Tue, 11 Mar 2025 10:47:23 +0800</pubDate>
      <guid>https://note.lican.site/tech/windows%E6%9C%AC%E5%9C%B0%E4%BD%BF%E7%94%A8ollama%E6%90%AD%E5%BB%BAai%E6%A8%A1%E5%9E%8B/</guid>
      <description>&lt;h3 id=&#34;windowslinux使用ollama搭建ai模型&#34;&gt;windows/linux使用ollama搭建ai模型&lt;/h3&gt;&#xA;&lt;p&gt;背景：最近看到朋友圈挺多朋友私有化部署了ai模型，感觉挺6的，决定跟一波风，学习一下本地部署&lt;/p&gt;&#xA;&lt;p&gt;首先，我们需要安装模型载体，这里我们选用&lt;a href=&#34;https://ollama.com/&#34;&gt;ollama&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;1.访问&lt;a href=&#34;https://ollama.com/&#34;&gt;ollama&lt;/a&gt;官网，下载安装包Ollama.Setup&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;windows版本直接下载安装包，双击安装&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741328919736.png&#34; alt=&#34;1741328919736&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;linux版本官网上安装的指令是 &lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;下载速度急慢，有兴趣的朋友可以了解一下&lt;/p&gt;&#xA;&lt;p&gt;于是在网上找到一个解决方案，亲测有效&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;下载ollama_install&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sh并保存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fsSL&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//ollama.com/install.sh -o ollama_install.sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;使用github文件加速替换github下载地址&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sed&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;|&lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//ollama.com/download/ollama-linux|https://gh.llkk.cc/https://github.com/ollama/ollama/releases/download/v0.5.7/ollama-linux|g&amp;#39; ollama_install.sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;替换后增加可执行权限&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;chmod&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ollama_install&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;执行sh下载安装&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sh&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ollama_install&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2.安装后，可查看版本&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741328976483.png&#34; alt=&#34;1741328976483&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;3.选择合适的模型，我选择网友们推荐的qwen2【说是对中文支持比较好】&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741329083246.png&#34; alt=&#34;1741329083246&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;4.安装模型【windows和linux操作一样】&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ollama&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;qwen2&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741337644929.png&#34; alt=&#34;1741337644929&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装完成之后就可以直接对话了&lt;/p&gt;&#xA;&lt;p&gt;7.07B的参数【1B=10亿】，会占用大量的系统资源&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741337915392.png&#34; alt=&#34;1741337915392&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741337952986.png&#34; alt=&#34;1741337952986&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;5.使用open-webui搭建可视化界面&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;使用docker搭建比较方便&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用docker搭建【换过快速地址】&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6000&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;8080&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;add&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;internal&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gateway&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;backend&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ghcr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nju&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;edu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;使用docker-compose搭建&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.8&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;ghcr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nju&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;edu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3000:8080&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;extra_hosts&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;host.docker.internal:host-gateway&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;app&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;backend&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;open&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;webui&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我用docker-compose搭建&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741338249077.png&#34; alt=&#34;1741338249077&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装完成之后，可以实用本地ip:3000端口访问，也可以配置nginx转发，使用域名访问&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/webui/1741660941546.png&#34; alt=&#34;1741660941546&#34;&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;webui.conf&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;将此处替换为您的域名&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_session_timeout&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_ciphers&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ECDHE&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;RSA&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;AES128&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;GCM&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SHA256&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ECDHE&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ECDH&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;AES&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;HIGH&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;NULL&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;aNULL&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;MD5&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;ADH&lt;/span&gt;:!&lt;span style=&#34;color:#a6e22e&#34;&gt;RC4&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_protocols&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLSv1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLSv1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLSv1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//127.0.0.1:6000;  # 将请求转发到 open-webui&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;保留主机头&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Real&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remote_addr&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;客户端&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_add_x_forwarded_for&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;代理&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Proto&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;scheme&lt;/span&gt;;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;协议&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_http_version&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.1&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Upgrade&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http_upgrade&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Connection&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;upgrade&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;由于线上服务器配置不够，只有4核16G，不足以支撑需要的最低配置，在webui调用api/models接口503超时，导致页面无法正常打开，有资源且感兴趣的同学可以试试&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux服务器更换镜像源</title>
      <link>https://note.lican.site/posts/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9B%B4%E6%8D%A2%E6%BA%90/</link>
      <pubDate>Wed, 20 Nov 2024 15:13:53 +0800</pubDate>
      <guid>https://note.lican.site/posts/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9B%B4%E6%8D%A2%E6%BA%90/</guid>
      <description>&lt;h3 id=&#34;linux-服务器更换镜像源&#34;&gt;linux 服务器更换镜像源&lt;/h3&gt;&#xA;&lt;h5 id=&#34;背景&#34;&gt;背景&lt;/h5&gt;&#xA;&lt;p&gt;新买的centos服务器无法下载软件，提示&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Loading&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mirror&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;speeds&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cached&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hostfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Could&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;retrieve&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mirrorlist&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//mirrorlist.centos.org/?release=7&amp;amp;arch=x86_64&amp;amp;repo=os&amp;amp;infra=stock error was&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;14&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;“&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Could&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;mirrorlist&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;centos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;org&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;原因：是因为centos7在024年6月份停止维护，导致默认镜像不能使用，更改镜像即可&lt;/p&gt;&#xA;&lt;p&gt;步骤如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;step1:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mv&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CentOS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CentOS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;backup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;step2:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CentOS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//mirrors.aliyun.com/repo/Centos-7.repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;step3:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;step4:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;makecache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Linux服务器更换镜像源</title>
      <link>https://note.lican.site/tech/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9B%B4%E6%8D%A2%E6%BA%90/</link>
      <pubDate>Wed, 20 Nov 2024 15:13:53 +0800</pubDate>
      <guid>https://note.lican.site/tech/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9B%B4%E6%8D%A2%E6%BA%90/</guid>
      <description>&lt;h3 id=&#34;linux-服务器更换镜像源&#34;&gt;linux 服务器更换镜像源&lt;/h3&gt;&#xA;&lt;h5 id=&#34;背景&#34;&gt;背景&lt;/h5&gt;&#xA;&lt;p&gt;新买的centos服务器无法下载软件，提示&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Loading&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mirror&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;speeds&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cached&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hostfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Could&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;retrieve&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mirrorlist&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//mirrorlist.centos.org/?release=7&amp;amp;arch=x86_64&amp;amp;repo=os&amp;amp;infra=stock error was&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;14&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;“&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Could&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;resolve&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;mirrorlist&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;centos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;org&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;原因：是因为centos7在024年6月份停止维护，导致默认镜像不能使用，更改镜像即可&lt;/p&gt;&#xA;&lt;p&gt;步骤如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;step1:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mv&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CentOS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CentOS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;backup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;step2:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;curl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repos&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CentOS&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;repo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//mirrors.aliyun.com/repo/Centos-7.repo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;step3:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;all&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;step4:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;makecache&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>搭建vpn</title>
      <link>https://note.lican.site/posts/%E6%90%AD%E5%BB%BAvpn/</link>
      <pubDate>Fri, 15 Nov 2024 10:40:23 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E6%90%AD%E5%BB%BAvpn/</guid>
      <description>&lt;h3 id=&#34;搭建vpn&#34;&gt;搭建vpn&lt;/h3&gt;&#xA;&lt;p&gt;作用：可以访问服务器的内网ip&lt;/p&gt;&#xA;&lt;p&gt;目的：仅用于学习&lt;/p&gt;&#xA;&lt;p&gt;操作对象：阿里云服务器&lt;/p&gt;&#xA;&lt;p&gt;服务器内网ip：172.18.120.176&lt;/p&gt;&#xA;&lt;p&gt;安装vpn之前：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731568658726.png&#34; alt=&#34;1731568658726&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;步骤一：&lt;/p&gt;&#xA;&lt;p&gt;在指定目录下创建docker-compose.yml文件和配置文件vpn.env&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731568802257.png&#34; alt=&#34;1731568802257&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;docker-compose.yml&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.7&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;hwdsl2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ipsec&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;latest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;udp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4500&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;4500&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;udp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;env_file&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;env&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;privileged&lt;/span&gt;:  &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;vpn.env&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_IPSEC_PSK&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;LZsRCfAfG3c&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Y0X2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;共享密钥&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_USER&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;nbi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_PASSWORD&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;yBBWlm7xgjSqh5Ii&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_ADDL_USERS&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;lican&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xiaoming&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;多个用户空格分隔&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_ADDL_PASSWORDS&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;lican520&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xiaoming520&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;密码与账号对应&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_DNS_SRV1&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;114.114.114.114&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_DNS_SRV2&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;8.8.8.8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;步骤二：&lt;/p&gt;&#xA;&lt;p&gt;启动docker-compose&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;up&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731572180933.png&#34; alt=&#34;1731572180933&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;步骤三：&lt;/p&gt;&#xA;&lt;p&gt;登录云服务器，修改安全组，配置500和4500端口，类型为udp&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731572259429.png&#34; alt=&#34;1731572259429&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;此时服务端的vpn已搭建完成&lt;/p&gt;&#xA;&lt;p&gt;步骤四：&lt;/p&gt;&#xA;&lt;p&gt;安装客户端，并配置&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lican.asia/images/vpn/vpn-client-2.2.2-release.exe&#34;&gt;vpn-client-2.2.2-release.exe&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577288327.png&#34; alt=&#34;1731577288327&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth-zh.md&#34;&gt;配置详解&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577400079.png&#34; alt=&#34;1731577400079&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;配置后使用vpn.env内配置的用户登录&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577606956.png&#34; alt=&#34;1731577606956&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;成功之后就可以访问服务器的内网ip了&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577653041.png&#34; alt=&#34;1731577653041&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>搭建vpn</title>
      <link>https://note.lican.site/tech/%E6%90%AD%E5%BB%BAvpn/</link>
      <pubDate>Fri, 15 Nov 2024 10:40:23 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E6%90%AD%E5%BB%BAvpn/</guid>
      <description>&lt;h3 id=&#34;搭建vpn&#34;&gt;搭建vpn&lt;/h3&gt;&#xA;&lt;p&gt;作用：可以访问服务器的内网ip&lt;/p&gt;&#xA;&lt;p&gt;目的：仅用于学习&lt;/p&gt;&#xA;&lt;p&gt;操作对象：阿里云服务器&lt;/p&gt;&#xA;&lt;p&gt;服务器内网ip：172.18.120.176&lt;/p&gt;&#xA;&lt;p&gt;安装vpn之前：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731568658726.png&#34; alt=&#34;1731568658726&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;步骤一：&lt;/p&gt;&#xA;&lt;p&gt;在指定目录下创建docker-compose.yml文件和配置文件vpn.env&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731568802257.png&#34; alt=&#34;1731568802257&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;docker-compose.yml&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.7&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;hwdsl2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ipsec&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;latest&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;udp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4500&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;4500&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;udp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;env_file&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vpn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;env&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;privileged&lt;/span&gt;:  &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;vpn.env&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_IPSEC_PSK&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;LZsRCfAfG3c&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Y0X2&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;共享密钥&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_USER&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;nbi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_PASSWORD&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;yBBWlm7xgjSqh5Ii&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_ADDL_USERS&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;lican&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xiaoming&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;多个用户空格分隔&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_ADDL_PASSWORDS&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;lican520&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xiaoming520&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;密码与账号对应&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_DNS_SRV1&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;114.114.114.114&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VPN_DNS_SRV2&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;8.8.8.8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;步骤二：&lt;/p&gt;&#xA;&lt;p&gt;启动docker-compose&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;up&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731572180933.png&#34; alt=&#34;1731572180933&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;步骤三：&lt;/p&gt;&#xA;&lt;p&gt;登录云服务器，修改安全组，配置500和4500端口，类型为udp&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731572259429.png&#34; alt=&#34;1731572259429&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;此时服务端的vpn已搭建完成&lt;/p&gt;&#xA;&lt;p&gt;步骤四：&lt;/p&gt;&#xA;&lt;p&gt;安装客户端，并配置&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.lican.asia/images/vpn/vpn-client-2.2.2-release.exe&#34;&gt;vpn-client-2.2.2-release.exe&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577288327.png&#34; alt=&#34;1731577288327&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-xauth-zh.md&#34;&gt;配置详解&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577400079.png&#34; alt=&#34;1731577400079&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;配置后使用vpn.env内配置的用户登录&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577606956.png&#34; alt=&#34;1731577606956&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;成功之后就可以访问服务器的内网ip了&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/vpn/1731577653041.png&#34; alt=&#34;1731577653041&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用K6对接口进行压测</title>
      <link>https://note.lican.site/posts/%E4%BD%BF%E7%94%A8k6%E5%AF%B9%E6%8E%A5%E5%8F%A3%E5%8E%8B%E6%B5%8B/</link>
      <pubDate>Tue, 06 Aug 2024 17:40:12 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E4%BD%BF%E7%94%A8k6%E5%AF%B9%E6%8E%A5%E5%8F%A3%E5%8E%8B%E6%B5%8B/</guid>
      <description>&lt;h3 id=&#34;使用k6对接口进行压测&#34;&gt;使用K6对接口进行压测&lt;/h3&gt;&#xA;&lt;h3 id=&#34;背景&#34;&gt;背景&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在实际开发中，常常需要对接口进行性能测试，因此，少不了压测工具&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在网上找了几款压测工具，感觉k6安装和使用都比较方便&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;step1安装&#34;&gt;step1：安装&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在windows命令行工具输入&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;winget&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;安装完成后&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;查看版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.45.0&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;2023&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;06&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;19&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;T08&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;41&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;01&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0000&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.45.0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gc3b4587b&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;go1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.20.5&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;windows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;amd64&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step2使用&#34;&gt;Step2：使用&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在项目根目录下创建文件夹pressureTest&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;【&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;自定义&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在该文件夹下创建js文件&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;文件内容为压测的内容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;js&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step3示例&#34;&gt;Step3：示例&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;dataReceive.js&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;check&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt; } &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt; = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;vus&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 虚拟用户数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;duration&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 压测持续时间&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;function&lt;/span&gt; () {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt;(&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Example&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;API&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;function&lt;/span&gt; () {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 定义请求的payload数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;sn&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3500000200000001&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;timestamp&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1719904084&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_p0&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;上层温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p0_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;上层温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_p1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;中层温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.2&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p1_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;中层温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_p2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;下层温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.3&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p2_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;下次温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_in&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;空气温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.6&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p0_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;空气温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 发送POST请求&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;post&lt;/span&gt;(&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//brewing-sass.nongbotech.com/api/device/data/receive&amp;#39;, payload, {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Content&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 检查响应状态码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;check&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;: (&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;= &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 添加自定义指标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;responseTime&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;timings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;duration&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apiName&lt;/span&gt; = &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Example&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;API&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tags&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;receive&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;responseTime&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;responseTime&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleRate&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// 采样率，用于控制报告中指标的采样数量&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;customMetrics&lt;/span&gt; = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      [&lt;span style=&#34;color:#a6e22e&#34;&gt;apiName&lt;/span&gt;]: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;tags&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleRate&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 将自定义指标发送到k6的输出&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 根据需要可以将指标发送到InfluxDB等其他目标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;customMetricPayload&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;customMetrics&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;customMetricPayload&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// 每个虚拟用户执行完后等待1秒钟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step4-查看报告&#34;&gt;Step4: 查看报告&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;进入dataReceive.js目录，执行 k6 run dataReceive.js&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用K6对接口进行压测</title>
      <link>https://note.lican.site/tech/%E4%BD%BF%E7%94%A8k6%E5%AF%B9%E6%8E%A5%E5%8F%A3%E5%8E%8B%E6%B5%8B/</link>
      <pubDate>Tue, 06 Aug 2024 17:40:12 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E4%BD%BF%E7%94%A8k6%E5%AF%B9%E6%8E%A5%E5%8F%A3%E5%8E%8B%E6%B5%8B/</guid>
      <description>&lt;h3 id=&#34;使用k6对接口进行压测&#34;&gt;使用K6对接口进行压测&lt;/h3&gt;&#xA;&lt;h3 id=&#34;背景&#34;&gt;背景&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在实际开发中，常常需要对接口进行性能测试，因此，少不了压测工具&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在网上找了几款压测工具，感觉k6安装和使用都比较方便&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;step1安装&#34;&gt;step1：安装&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在windows命令行工具输入&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;winget&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;安装完成后&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;查看版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.45.0&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;2023&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;06&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;19&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;T08&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;41&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;01&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0000&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v0&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.45.0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gc3b4587b&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;go1&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.20.5&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;windows&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;amd64&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step2使用&#34;&gt;Step2：使用&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在项目根目录下创建文件夹pressureTest&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;【&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;自定义&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;】&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在该文件夹下创建js文件&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;文件内容为压测的内容&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;js&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step3示例&#34;&gt;Step3：示例&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;dataReceive.js&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;check&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt; } &lt;span style=&#34;color:#a6e22e&#34;&gt;from&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k6&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt; = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;vus&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;500&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 虚拟用户数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;duration&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#75715e&#34;&gt;// 压测持续时间&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;export&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;function&lt;/span&gt; () {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt;(&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Example&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;API&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;function&lt;/span&gt; () {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 定义请求的payload数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;payload&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;({&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;sn&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3500000200000001&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;timestamp&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1719904084&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;: [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_p0&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;上层温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.1&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p0_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;上层温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_p1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;中层温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.2&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p1_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;中层温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_p2&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;下层温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.3&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p2_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;下次温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;temp_in&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;空气温度&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;unit&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;°&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20.6&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;p0_temp_status&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;name_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;空气温度传感器状态&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_en&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;normal&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;status_zh&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;正常&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 发送POST请求&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;post&lt;/span&gt;(&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//brewing-sass.nongbotech.com/api/device/data/receive&amp;#39;, payload, {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;headers&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Content&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 检查响应状态码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;check&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;, {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;: (&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;) =&amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt;= &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 添加自定义指标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;responseTime&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;res&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;timings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;duration&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apiName&lt;/span&gt; = &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Example&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;API&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tags&lt;/span&gt; = { &lt;span style=&#34;color:#a6e22e&#34;&gt;endpoint&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;receive&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt; };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;responseTime&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;responseTime&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleRate&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;0.5&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// 采样率，用于控制报告中指标的采样数量&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;customMetrics&lt;/span&gt; = {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      [&lt;span style=&#34;color:#a6e22e&#34;&gt;apiName&lt;/span&gt;]: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;tags&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;sampleRate&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    };&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 将自定义指标发送到k6的输出&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 根据需要可以将指标发送到InfluxDB等其他目标&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;let&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;customMetricPayload&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;stringify&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;customMetrics&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;console&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;customMetricPayload&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sleep&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;); &lt;span style=&#34;color:#75715e&#34;&gt;// 每个虚拟用户执行完后等待1秒钟&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  });&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;step4-查看报告&#34;&gt;Step4: 查看报告&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;进入dataReceive.js目录，执行 k6 run dataReceive.js&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux系统安装并使用杀毒软件</title>
      <link>https://note.lican.site/posts/%E5%AE%89%E8%A3%85%E5%B9%B6%E4%BD%BF%E7%94%A8clamav/</link>
      <pubDate>Tue, 06 Aug 2024 17:26:10 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E5%AE%89%E8%A3%85%E5%B9%B6%E4%BD%BF%E7%94%A8clamav/</guid>
      <description>&lt;h3 id=&#34;linux系统安装并使用杀毒软件&#34;&gt;linux系统安装并使用杀毒软件&lt;/h3&gt;&#xA;&lt;h4 id=&#34;扫描工具clamav&#34;&gt;扫描工具：Clamav&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ClamAV 杀毒是Linux平台最受欢迎的杀毒软件。&lt;/li&gt;&#xA;&lt;li&gt;支持多种平台，如：Linux/Unix、MAC OS X、Windows、OpenVMS。&lt;/li&gt;&#xA;&lt;li&gt;ClamAV 是基于病毒扫描的命令行工具，但同时也有支持图形界面的ClamTK 工具。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Step1: 安装&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;安装之前更新一下系统软件包&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;centos&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ubuntu&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;upgrade&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;安装&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;centos&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;daemon&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ubuntu&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;daemon&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;版本查看&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Stpe2: 更新病毒库&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;先停止clamav&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;stop&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;freshclam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;更新病毒库&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;freshclam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;重启clamav并设置开机自启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;enable&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;freshclam&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Step3: 执行扫描&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;该命令仅能扫描出被感染的文件或程序&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;如果要扫描后自动删除&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;携带参数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;扫描并移除感染文件&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;慎用&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;将扫描结果输出到文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;l&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;logfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;扫描完成后&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clamav会输出报告&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-----------&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SCAN&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SUMMARY&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-----------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Known&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viruses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8696712&lt;/span&gt;        &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//病毒库总数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Engine&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.103.11&lt;/span&gt;       &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Scanned&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;directories&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;60379&lt;/span&gt;   &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//扫描文件夹数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Scanned&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;299909&lt;/span&gt;           &#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//扫描的文件总数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Infected&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &#x9;   &#x9;      &#x9;&#x9;&#x9;    &lt;span style=&#34;color:#75715e&#34;&gt;//感染文件数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Total&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;errors&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;26865&lt;/span&gt;  &#x9;&#x9;&#x9;&#x9;&#x9;   &lt;span style=&#34;color:#75715e&#34;&gt;//这些错误可能由多种原因引起，如文件权限、文件系统损坏、磁盘错误或扫描过程中的其他中断&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scanned&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18863.32&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MB&lt;/span&gt; &#x9;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//实际扫描数据大小&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;read&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;36136.95&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MB&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ratio&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.52&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &#x9;&#x9; &lt;span style=&#34;color:#75715e&#34;&gt;//扫描读取数据大小&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Time&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3982.683&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sec&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;66&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//耗时&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Start&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Date&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2024&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;08&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;06&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;46&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Date&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;2024&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;08&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;06&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;57&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;09&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果在centos下安装失败：启用EPEL仓库&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;epel&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;release&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>linux系统安装并使用杀毒软件</title>
      <link>https://note.lican.site/tech/%E5%AE%89%E8%A3%85%E5%B9%B6%E4%BD%BF%E7%94%A8clamav/</link>
      <pubDate>Tue, 06 Aug 2024 17:26:10 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E5%AE%89%E8%A3%85%E5%B9%B6%E4%BD%BF%E7%94%A8clamav/</guid>
      <description>&lt;h3 id=&#34;linux系统安装并使用杀毒软件&#34;&gt;linux系统安装并使用杀毒软件&lt;/h3&gt;&#xA;&lt;h4 id=&#34;扫描工具clamav&#34;&gt;扫描工具：Clamav&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ClamAV 杀毒是Linux平台最受欢迎的杀毒软件。&lt;/li&gt;&#xA;&lt;li&gt;支持多种平台，如：Linux/Unix、MAC OS X、Windows、OpenVMS。&lt;/li&gt;&#xA;&lt;li&gt;ClamAV 是基于病毒扫描的命令行工具，但同时也有支持图形界面的ClamTK 工具。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Step1: 安装&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;安装之前更新一下系统软件包&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;centos&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ubuntu&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;upgrade&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;安装&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;centos&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;daemon&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ubuntu&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;apt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;daemon&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;版本查看&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Stpe2: 更新病毒库&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;先停止clamav&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;stop&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;freshclam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;更新病毒库&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;freshclam&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;重启clamav并设置开机自启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;systemctl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;enable&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;freshclam&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;now&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Step3: 执行扫描&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;该命令仅能扫描出被感染的文件或程序&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;如果要扫描后自动删除&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;携带参数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;扫描并移除感染文件&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;慎用&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remove&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;将扫描结果输出到文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clamscan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;l&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;logfile&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;扫描完成后&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;clamav会输出报告&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-----------&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SCAN&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SUMMARY&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-----------&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Known&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;viruses&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;8696712&lt;/span&gt;        &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//病毒库总数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Engine&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0.103.11&lt;/span&gt;       &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Scanned&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;directories&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;60379&lt;/span&gt;   &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//扫描文件夹数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Scanned&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;299909&lt;/span&gt;           &#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//扫描的文件总数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Infected&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;files&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &#x9;   &#x9;      &#x9;&#x9;&#x9;    &lt;span style=&#34;color:#75715e&#34;&gt;//感染文件数&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Total&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;errors&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;26865&lt;/span&gt;  &#x9;&#x9;&#x9;&#x9;&#x9;   &lt;span style=&#34;color:#75715e&#34;&gt;//这些错误可能由多种原因引起，如文件权限、文件系统损坏、磁盘错误或扫描过程中的其他中断&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scanned&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;18863.32&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MB&lt;/span&gt; &#x9;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//实际扫描数据大小&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;read&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;36136.95&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MB&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;ratio&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.52&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) &#x9;&#x9; &lt;span style=&#34;color:#75715e&#34;&gt;//扫描读取数据大小&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Time&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;3982.683&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sec&lt;/span&gt; (&lt;span style=&#34;color:#ae81ff&#34;&gt;66&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;) &#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;//耗时&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Start&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Date&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2024&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;08&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;06&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;46&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Date&lt;/span&gt;:   &lt;span style=&#34;color:#ae81ff&#34;&gt;2024&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;08&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;06&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;57&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;09&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果在centos下安装失败：启用EPEL仓库&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;epel&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;release&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;yum&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;install&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;clamav&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>elasticsearch&#43;kibana&#43;filebeat搭建</title>
      <link>https://note.lican.site/posts/elasticsearch&#43;kibana&#43;filebeat%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Thu, 25 Jul 2024 10:45:53 +0800</pubDate>
      <guid>https://note.lican.site/posts/elasticsearch&#43;kibana&#43;filebeat%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h4 id=&#34;背景由于c端用户增多我们需要有一款针对用户的日志系统而不是登录容器分析日志从而提高效率快速定位问题&#34;&gt;背景：由于C端用户增多，我们需要有一款针对用户的日志系统，而不是登录容器分析日志，从而提高效率，快速定位问题&lt;/h4&gt;&#xA;&lt;p&gt;分析： 由于在上家公司接触到kibana，对查询语法和使用有一些基本认识，查询资料发现要搭建kibana，需要同时安装elasticsearch和filebeat&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;elasticsearch：分布式实时搜索分析引擎，用作全文搜索，结构化搜索和分析搜索，可以用来处理大数据量&lt;/li&gt;&#xA;&lt;li&gt;kibana：基于web界面，使用户能够直观地查看，分析和可视化存储在elasticsearch中的数据&lt;/li&gt;&#xA;&lt;li&gt;filebeat：轻量级日志采集器，用于转发和集中日志中的数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;step1-安装&#34;&gt;Step1: 安装&lt;/h5&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;使用dockerc-compose 搭建【此处省略docker-compose的安装】&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;docker-compose.yml 【注意：elasticsearch和kibana和filebeat最好使用同一个版本】&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.7&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;elastic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;co&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.17.3&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;使用你需要的版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lican&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;discovery&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;single&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;单节点模式&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;适合测试和开发环境&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xpack.security.enabled=false&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;如果不需要X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Pack安全特性&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以禁用它&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ES_JAVA_OPTS=-Xms512m -Xmx512m&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;设置JVM内存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9200:9200&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;映射Elasticsearch的HTTP端口到宿主机的9200端口&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9300:9300&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;映射Elasticsearch的TCP传输端口&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;用于集群节点间的通信&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;share&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;将数据保存在一个名为data的卷中&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;以便在容器停止后数据不会丢失&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;elastic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;co&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.17.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ELASTICSEARCH_HOSTS&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//elasticsearch:9200&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;I18N_LOCALE&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;zh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CN&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 配置中文&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;5601:5601&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;elastic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;co&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;beats&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.17.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;可能需要root权限来读取日志文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yml&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;share&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yml&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ro&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;配置文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ro&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;假设你的日志文件在&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log目录下&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;containers&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;映射目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置好编排文件后，启动&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;up&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;;  &lt;span style=&#34;color:#75715e&#34;&gt;// -d：后台启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ps&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// 查询运行状态&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当发现以下界面，表示安装并启动成功&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/elasticsearch/1.png&#34; alt=&#34;1721874295334&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;打开浏览器，通过服务器ip:端口访问，查看服务运行状态【请配置服务器端口的安全组】&lt;/p&gt;&#xA;&lt;p&gt;访问http://localhost:9200，出现以下界面，表示elasticsearch运行成功&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/elasticsearch/2.png&#34; alt=&#34;1721874424161&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;访问http://localhost:5601，出现以下界面，表示kibana运行成功&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/elasticsearch/4.png&#34; alt=&#34;1721874484318&#34;&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;step2-filebeat采集日志&#34;&gt;Step2: filebeat采集日志&lt;/h5&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;配置filebeat.yml 配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>elasticsearch&#43;kibana&#43;filebeat搭建</title>
      <link>https://note.lican.site/tech/elasticsearch&#43;kibana&#43;filebeat%E6%90%AD%E5%BB%BA/</link>
      <pubDate>Thu, 25 Jul 2024 10:45:53 +0800</pubDate>
      <guid>https://note.lican.site/tech/elasticsearch&#43;kibana&#43;filebeat%E6%90%AD%E5%BB%BA/</guid>
      <description>&lt;h4 id=&#34;背景由于c端用户增多我们需要有一款针对用户的日志系统而不是登录容器分析日志从而提高效率快速定位问题&#34;&gt;背景：由于C端用户增多，我们需要有一款针对用户的日志系统，而不是登录容器分析日志，从而提高效率，快速定位问题&lt;/h4&gt;&#xA;&lt;p&gt;分析： 由于在上家公司接触到kibana，对查询语法和使用有一些基本认识，查询资料发现要搭建kibana，需要同时安装elasticsearch和filebeat&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;elasticsearch：分布式实时搜索分析引擎，用作全文搜索，结构化搜索和分析搜索，可以用来处理大数据量&lt;/li&gt;&#xA;&lt;li&gt;kibana：基于web界面，使用户能够直观地查看，分析和可视化存储在elasticsearch中的数据&lt;/li&gt;&#xA;&lt;li&gt;filebeat：轻量级日志采集器，用于转发和集中日志中的数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h5 id=&#34;step1-安装&#34;&gt;Step1: 安装&lt;/h5&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;使用dockerc-compose 搭建【此处省略docker-compose的安装】&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;docker-compose.yml 【注意：elasticsearch和kibana和filebeat最好使用同一个版本】&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3.7&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;elastic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;co&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.17.3&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;使用你需要的版本&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lican&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;discovery&lt;/span&gt;.&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;single&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;node&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;单节点模式&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;适合测试和开发环境&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;xpack.security.enabled=false&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;如果不需要X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Pack安全特性&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以禁用它&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ES_JAVA_OPTS=-Xms512m -Xmx512m&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;设置JVM内存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9200:9200&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;映射Elasticsearch的HTTP端口到宿主机的9200端口&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9300:9300&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;映射Elasticsearch的TCP传输端口&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;用于集群节点间的通信&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;share&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;将数据保存在一个名为data的卷中&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;以便在容器停止后数据不会丢失&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;elastic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;co&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.17.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;kibana&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ELASTICSEARCH_HOSTS&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//elasticsearch:9200&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;I18N_LOCALE&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;zh&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;CN&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 配置中文&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ports&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;5601:5601&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;elastic&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;co&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;beats&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.17.3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;可能需要root权限来读取日志文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yml&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;share&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;filebeat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;yml&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ro&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;配置文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;ro&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;假设你的日志文件在&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log目录下&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;containers&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;映射目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elasticsearch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;local&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置好编排文件后，启动&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;up&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;;  &lt;span style=&#34;color:#75715e&#34;&gt;// -d：后台启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ps&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// 查询运行状态&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当发现以下界面，表示安装并启动成功&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/elasticsearch/1.png&#34; alt=&#34;1721874295334&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;打开浏览器，通过服务器ip:端口访问，查看服务运行状态【请配置服务器端口的安全组】&lt;/p&gt;&#xA;&lt;p&gt;访问http://localhost:9200，出现以下界面，表示elasticsearch运行成功&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/elasticsearch/2.png&#34; alt=&#34;1721874424161&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;访问http://localhost:5601，出现以下界面，表示kibana运行成功&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.asia/images/elasticsearch/4.png&#34; alt=&#34;1721874484318&#34;&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;step2-filebeat采集日志&#34;&gt;Step2: filebeat采集日志&lt;/h5&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;配置filebeat.yml 配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>狗猫鼠</title>
      <link>https://note.lican.site/article/%E7%8B%97%E7%8C%AB%E9%BC%A0/</link>
      <pubDate>Tue, 23 Jul 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E7%8B%97%E7%8C%AB%E9%BC%A0/</guid>
      <description>&lt;p&gt;从去年起，仿佛听得有人说我是仇猫的。那根据自然是在我的那一篇《兔和猫》；这是自画招供，当然无话可说，——但倒也毫不介意。一到今年，我可很有点担心了。我是常不免于弄弄笔墨的，写了下来，印了出去，对于有些人似乎总是搔着痒处的时候少，碰着痛处的时候多。万一不谨，甚而至于得罪了名人或名教授，或者更甚而至于得罪了“负有指导青年责任的前辈”之流，可就危险已极。为什么呢？因为这些大脚色是“不好惹”的。怎地“不好惹”呢？就是怕要浑身发热之后，做一封信登在报纸上，广告道：“看哪！狗不是仇猫的么？鲁迅先生却自己承认是仇猫的，而他还说要打‘落水狗’！”①这“逻辑”的奥义，即在用我的话，来证明我倒是狗，于是而凡有言说，全都根本推翻，即使我说二二得四，三三见九，也没有一字不错。这些既然都错，则绅士口头的二二得七，三三见千等等，自然就不错了。&lt;/p&gt;&#xA;&lt;p&gt;我于是就间或留心着查考它们成仇的“动机”。这也并非敢妄学现下的学者以动机来褒贬作品的那些时髦，不过想给自己预先洗刷洗刷。据我想，这在动物心理学家，是用不着费什么力气的，可惜我没有这学问。后来，在覃哈特博士（Dr.O.Dahmhardt）的《自然史底国民童话》里，总算发现了那原因了。据说，是这么一回事：动物们因为要商议要事，开了一个会议，鸟、鱼、兽都齐集了，单是缺了象。大家议定，派伙计去迎接它，拈到了当这差使的阄的就是狗。“我怎么找到那象呢？我没有见过它，也和它不认识。”它问。“那容易，”大众说，“它是驼背的。”狗去了，遇见一匹猫，立刻弓起脊梁来，它便招待，同行，将弓着脊梁的猫介绍给大家道：“象在这里！”但是大家都嗤笑它了。从此以后，狗和猫便成了仇家。&lt;/p&gt;&#xA;&lt;p&gt;日尔曼人走出森林虽然还不很久，学术文艺却已经很可观，便是书籍的装潢，玩具的工致，也无不令人心爱。独有这一篇童话却实在不漂亮；结怨也结得没有意思。猫的弓起脊梁，并不是希图冒充，故意摆架子的，其咎却在狗的自己没眼力。然而原因也总可以算作一个原因。我的仇猫，是和这大大两样的。&lt;/p&gt;&#xA;&lt;p&gt;其实人禽之辨，本不必这样严。在动物界，虽然并不如古人所幻想的那样舒适自由，可是噜苏做作的事总比人间少。它们适性任情，对就对，错就错，不说一句分辩话。虫蛆也许是不干净的，但它们并没有自命清高；鸷禽猛兽以较弱的动物为饵，不妨说是凶残的罢，但它们从来就没有竖过“公理”“正义”的旗子，使牺牲者直到被吃的时候为止，还是一味佩服赞叹它们。人呢，能直立了，自然是一大进步；能说话了，自然又是一大进步；能写字作文了，自然又是一大进步。然而也就堕落，因为那时也开始了说空话。说空话尚无不可，甚至于连自己也不知道说着违心之论，则对于只能嗥叫的动物，实在免不得“颜厚有忸怩”。假使真有一位一视同仁的造物主，高高在上，那么，对于人类的这些小聪明，也许倒以为多事，正如我们在万生园里，看见猴子翻筋斗，母象请安，虽然往往破颜一笑，但同时也觉得不舒服，甚至于感到悲哀，以为这些多余的聪明，倒不如没有的好罢。然而，既经为人，便也只好“党同伐异”，学着人们的说话，随俗来谈一谈，——辩一辩了。&lt;/p&gt;&#xA;&lt;p&gt;现在说起我仇猫的原因来，自己觉得是理由充足，而且光明正大的。一、它的性情就和别的猛兽不同，凡捕食雀、鼠，总不肯一口咬死，定要尽情玩弄，放走，又捉住，捉住，又放走，直待自己玩厌了，这才吃下去，颇与人们的幸灾乐祸，慢慢地折磨弱者的坏脾气相同。二、它不是和狮虎同族的么？可是有这么一副媚态！但这也许是限于天分之故罢，假使它的身材比现在大十倍，那就真不知道它所取的是怎么一种态度。然而，这些口实，仿佛又是现在提起笔来的时候添出来的，虽然也象是当时涌上心来的理由。要说得可靠一点，或者倒不如说不过因为它们配合时候的嗥叫，手续竟有这么繁重，闹得别人心烦，尤其是夜间要看书，睡觉的时候。当这些时候，我便要用长竹竿去攻击它们。狗们在大道上配合时，常有闲汉拿了木棍痛打；我曾见大勃吕该尔（P.Bruegeld.A）的一张铜版画AllegoriederWollust上，也画着这回事，可见这样的举动，是中外古今一致的。自从那执拗的奥国学者弗罗特（S.Freud）提倡了精神分析说——psychoanalysis，听说章士钊先生是译作“心解”的，虽然简古，可是实在难解得很——以来，我们的名人名教授也颇有隐隐约约，检来应用的了，这些事便不免又要归宿到性欲上去。打狗的事我不管，至于我的打猫，却只因为它们嚷嚷，此外并无恶意，我自信我的嫉妒心还没有这么博大，当现下“动辄获咎”之秋，这是不可不预先声明的。例如人们当配合之前，也很有些手续，新的是写情书，少则一束，多则一捆；旧的是什么“问名”“纳采”，磕头作揖，去年海昌蒋氏在北京举行婚礼，拜来拜去，就十足拜了三天，还印有一本红面子的《婚礼节文》，《序论》里大发议论道：“平心论之，既名为礼，当必繁重。专图简易，何用礼为？……然则世之有志于礼者，可以兴矣！不可退居于礼所不下之庶人矣！”然而我毫不生气，这是因为无须我到场；因此也可见我的仇猫，理由实在简简单单，只为了它们在我的耳朵边尽嚷的缘故。人们的各种礼式，局外人可以不见不闻，我就满不管，但如果当我正要看书或睡觉的时候，有人来勒令朗诵情书，奉陪作揖，那是为自卫起见，还要用长竹竿来抵御的。还有，平素不大交往的人，忽而寄给我一个红帖子，上面印着“为舍妹出阁”，“小儿完姻”，“敬请观礼”或“阖第光临”这些含有“阴险的暗示”的句子，使我不花钱便总觉得有些过意不去的，我也不十分高兴。&lt;/p&gt;&#xA;&lt;p&gt;但是，这都是近时的话。再一回忆，我的仇猫却远在能够说出这些理由之前，也许是还在十岁上下的时候了。至今还分明记得，那原因是极其简单的：只因为它吃老鼠，——吃了我饲养着的可爱的小小的隐鼠。&lt;/p&gt;&#xA;&lt;p&gt;听说西洋是不很喜欢黑猫的，不知道可确；但EdgarAllanPoe的小说里的黑猫，却实在有点骇人。日本的猫善于成精，传说中的“猫婆”，那食人的惨酷确是更可怕。中国古时候虽然曾有“猫鬼”，近来却很少听到猫的兴妖作怪，似乎古法已经失传，老实起来了。只是我在童年，总觉得它有点妖气，没有什么好感。那是一个我的幼时的夏夜，我躺在一株大桂树下的小板桌上乘凉，祖母摇着芭蕉扇坐在卓旁，给我猜谜，讲古事。忽然，桂树上沙沙地有趾爪的爬搔声，一对闪闪的眼睛在暗中随声而下，使我吃惊，也将祖母讲着的话打断，另讲猫的故事了——&lt;/p&gt;&#xA;&lt;p&gt;“你知道么？猫是老虎的先生。”她说。“小孩子怎么会知道呢，猫是老虎的师父。老虎本来是什么也不会的，就投到猫的门下来。猫就教给它扑的方法，捉的方法，吃的方法，象自己的捉老鼠一样。这些教完了；老虎想，本领都学到了，谁也比不过它了，只有老师的猫还比自己强，要是杀掉猫，自己便是最强的脚色了。它打定主意，就上前去扑猫。猫是早知道它的来意的，一跳，便上了树，老虎却只能眼睁睁地在树下蹲着。它还没有将一切本领传授完，还没有教给它上树。”&lt;/p&gt;&#xA;&lt;p&gt;这是侥幸的，我想，幸而老虎很性急，否则从桂树上就会爬下一匹老虎来。然而究竟很怕人，我要进屋子里睡觉去了。夜色更加黯然；桂叶瑟瑟地作响，微风也吹动了，想来草席定已微凉，躺着也不至于烦得翻来复去了。&lt;/p&gt;&#xA;&lt;p&gt;几百年的老屋中的豆油灯的微光下，是老鼠跳梁的世界，飘忽地走着，吱吱地叫着，那态度往往比“名人名教授”还轩昂。猫是饲养着的，然而吃饭不管事。祖母她们虽然常恨鼠子们啮破了箱柜，偷吃了东西，我却以为这也算不得什么大罪，也和我不相干，况且这类坏事大概是大个子的老鼠做的，决不能诬陷到我所爱的小鼠身上去。这类小鼠大抵在地上走动，只有拇指那么大，也不很畏惧人，我们那里叫它“隐鼠”，与专住在屋上的伟大者是两种。我的床前就帖着两张花纸，一是“八戒招赘”，满纸长嘴大耳，我以为不甚雅观；别的一张“老鼠成亲”却可爱，自新郎、新妇以至傧相、宾客、执事，没有一个不是尖腮细腿，象煞读书人的，但穿的都是红衫绿裤。我想，能举办这样大仪式的，一定只有我所喜欢的那些隐鼠。现在是粗俗了，在路上遇见人类的迎娶仪仗，也不过当作性交的广告看，不甚留心；但那时的想看“老鼠成亲”的仪式，却极其神往，即使象海昌蒋氏似的连拜三夜，怕也未必会看得心烦。正月十四的夜，是我不肯轻易便睡，等候它们的仪仗从床下出来的夜。然而仍然只看见几个光着身子的隐鼠在地面游行，不象正在办着喜事。直到我敖不住了，怏怏睡去，一睁眼却已经天明，到了灯节了。也许鼠族的婚仪，不但不分请帖，来收罗贺礼，虽是真的“观礼”，也绝对不欢迎的罢，我想，这是它们向来的习惯，无法抗议的。&lt;/p&gt;&#xA;&lt;p&gt;老鼠的大敌其实并不是猫。春后，你听到它“咋！咋咋咋咋！”地叫着，大家称为“老鼠数铜钱”的，便知道它的可怕的屠伯已经光临了。这声音是表现绝望的惊恐的，虽然遇见猫，还不至于这样叫。猫自然也可怕，但老鼠只要窜进一个小洞去，它也就奈何不得，逃命的机会还很多。独有那可怕的屠伯——蛇，身体是细长的，圆径和鼠子差不多，凡鼠子能到的地方，它也能到，追逐的时间也格外长，而且万难幸免，当“数钱”的时候，大概是已经没有第二步办法的了。&lt;/p&gt;&#xA;&lt;p&gt;有一回，我就听得一间空屋里有着这种“数钱”的声音，推门进去，一条蛇伏在横梁上，看地上，躺着一匹隐鼠，口角流血，但两胁还是一起一落的。取来给躺在一个纸盒子里，大半天，竟醒过来了，渐渐地能够饮食，行走，到第二日，似乎就复了原，但是不逃走。放在地上，也时时跑到人面前来，而且缘腿而上，一直爬到膝髁。给放在饭桌上，便检吃些菜渣，舔舔碗沿；放在我的书桌上，则从容地游行，看见砚台便舔吃了研着的墨汁。这使我非常惊喜了。我听父亲说过的，中国有一种墨猴，只有拇指一般大，全身的毛是漆黑而且发亮的。它睡在笔筒里，一听到磨墨，便跳出来，等着，等到人写完字，套上笔，就舔尽了砚上的余墨，仍旧跳进笔筒里去了。我就极愿意有这样的一个墨猴，可是得不到；问那里有，那里买的呢，谁也不知道。“慰情聊胜无”，这隐鼠总可以算是我的墨猴了罢，虽然它舔吃墨汁，并不一定肯等到我写完字。&lt;/p&gt;&#xA;&lt;p&gt;现在已经记不分明，这样地大约有一两月；有一天，我忽然感到寂寞了，真所谓“若有所失”。我的隐鼠，是常在眼前游行的，或桌上，或地上。而这一日却大半天没有见，大家吃午饭了，也不见它走出来，平时，是一定出现的。我再等着，再等它一半天，然而仍然没有见。&lt;/p&gt;&#xA;&lt;p&gt;长妈妈，一个一向带领着我的女工，也许是以为我等得太苦了罢，轻轻地来告诉我一句话。这即刻使我愤怒而且悲哀，决心和猫们为敌。她说：隐鼠是昨天晚上被猫吃去了！&lt;/p&gt;&#xA;&lt;p&gt;当我失掉了所爱的，心中有着空虚时，我要充填以报仇的恶念！&lt;/p&gt;&#xA;&lt;p&gt;我的报仇，就从家里饲养着的一匹花猫起手，逐渐推广，至于凡所遇见的诸猫。最先不过是追赶，袭击；后来却愈加巧妙了，能飞石击中它们的头，或诱入空屋里面，打得它垂头丧气。这作战继续得颇长久，此后似乎猫都不来近我了。但对于它们纵使怎样战胜，大约也算不得一个英雄；况且中国毕生和猫打仗的人也未必多，所以一切韬略、战绩，还是全部省略了罢。&lt;/p&gt;&#xA;&lt;p&gt;但许多天之后，也许是已经经过了大半年，我竟偶然得到一个意外的消息：那隐鼠其实并非被猫所害，倒是它缘着长妈妈的腿要爬上去，被她一脚踏死了。&lt;/p&gt;&#xA;&lt;p&gt;这确是先前所没有料想到的。现在我已经记不清当时是怎样一个感想，但和猫的感情却终于没有融和；到了北京，还因为它伤害了兔的儿女们，便旧隙夹新嫌，使出更辣的辣手。“仇猫”的话柄，也从此传扬开来。然而在现在，这些早已是过去的事了，我已经改变态度，对猫颇为客气，倘其万不得已，则赶走而已，决不打伤它们，更何况杀害。这是我近几年的进步。经验既多，一旦大悟，知道猫的偷鱼肉，拖小鸡，深夜大叫，人们自然十之九是憎恶的，而这憎恶是在猫身上。假如我出而为人们驱除这憎恶，打伤或杀害了它，它便立刻变为可怜，那憎恶倒移在我身上了。所以，目下的办法，是凡遇猫们捣乱，至于有人讨厌时，我便站出去，在门口大声叱曰：“嘘！滚！”小小平静，即回书房，这样，就长保着御侮保家的资格。其实这方法，中国的官兵就常在实做的，他们总不肯扫清土匪或扑灭敌人，因为这么一来，就要不被重视，甚至于因失其用处而被裁汰。我想，如果能将这方法推广应用，我大概也总可望成为所谓“指导青年”的“前辈”的罢，但现下也还未决心实践，正在研究而且推敲。&lt;/p&gt;&#xA;&lt;p&gt;一九二六年二月二十一日&lt;/p&gt;</description>
    </item>
    <item>
      <title>父亲的病</title>
      <link>https://note.lican.site/article/%E7%88%B6%E4%BA%B2%E7%9A%84%E7%97%85/</link>
      <pubDate>Mon, 22 Jul 2024 13:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E7%88%B6%E4%BA%B2%E7%9A%84%E7%97%85/</guid>
      <description>&lt;p&gt;大约十多年前罢，S城中曾经盛传过一个名医的故事：&lt;/p&gt;&#xA;&lt;p&gt;他出诊原来是一元四角，特拔十元，深夜加倍，出城又加倍。有一夜，一家城外人家的闺女生急病，来请他了，因为他其实已经阔得不耐烦，便非一百元不去。他们只得都依他。待去时，却只是草草地一看，说道“不要紧的”，开一张方，拿了一百元就走。那病家似乎很有钱，第二天又来请了。他一到门，只见主人笑面承迎，道，“昨晚服了先生的药，好得多了，所以再请你来复诊一回。”仍旧引到房里，老妈子便将病人的手拉出帐外来。他一按，冷冰冰的，也没有脉，于是点点头道，“唔，这病我明白了。”从从容容走到桌前，取了药方纸，提笔写道：&lt;/p&gt;&#xA;&lt;p&gt;“凭票付英洋壹百元正。”下面是署名，画押。&lt;/p&gt;&#xA;&lt;p&gt;“先生，这病看来很不轻了，用药怕还得重一点罢。”主人在背后说。&lt;/p&gt;&#xA;&lt;p&gt;“可以，”他说。于是另开了一张方：&lt;/p&gt;&#xA;&lt;p&gt;“凭票付英洋贰百元正。”下面仍是署名，画押。&lt;/p&gt;&#xA;&lt;p&gt;这样，主人就收了药方，很客气地送他出来了。&lt;/p&gt;&#xA;&lt;p&gt;我曾经和这名医周旋过两整年，因为他隔日一回，来诊我父亲的病。那时虽然已经很有名，但还不至于阔得这样不耐烦；可是&lt;a href=&#34;https://baike.baidu.com/item/%E8%AF%8A%E9%87%91/8662933?fromModule=lemma_inlink&#34;&gt;诊金&lt;/a&gt;却已经是一元四角。现在的都市上，诊金一次十元并不算奇，可是那时是一元四角已是巨款，很不容易张罗的了；又何况是隔日一次。他大概的确有些特别，据舆论说，用药就与众不同。我不知道药品，所觉得的，就是“药引”的难得，新方一换，就得忙一大场。&lt;a href=&#34;https://baike.baidu.com/item/%E5%85%88%E4%B9%B0/7942256?fromModule=lemma_inlink&#34;&gt;先买&lt;/a&gt;药，再寻药引。“生姜”两片，&lt;a href=&#34;https://baike.baidu.com/item/%E7%AB%B9%E5%8F%B6/17355424?fromModule=lemma_inlink&#34;&gt;竹叶&lt;/a&gt;十片去尖，他是不用的了。起码是&lt;a href=&#34;https://baike.baidu.com/item/%E8%8A%A6%E6%A0%B9/399955?fromModule=lemma_inlink&#34;&gt;芦根&lt;/a&gt;，须到河边去掘；一到经霜三年的甘蔗，便至少也得搜寻两三天。可是说也奇怪，大约后来总没有购求不到的。&lt;/p&gt;&#xA;&lt;p&gt;据舆论说，神妙就在这地方。先前有一个病人，百药无效；待到遇见了什么&lt;a href=&#34;https://baike.baidu.com/item/%E5%8F%B6%E5%A4%A9%E5%A3%AB/429763?fromModule=lemma_inlink&#34;&gt;叶天士&lt;/a&gt;先生，只在旧方上加了&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%80%E5%91%B3%E8%8D%AF/1268204?fromModule=lemma_inlink&#34;&gt;一味药&lt;/a&gt;引：梧桐叶。只一服，便霍然而愈了。“医者，意也。”其时是秋天，而梧桐先知秋气。其先百药不投，今以秋气动之，以&lt;a href=&#34;https://baike.baidu.com/item/%E6%B0%94%E6%84%9F/1415405?fromModule=lemma_inlink&#34;&gt;气感&lt;/a&gt;气，所以……。我虽然并不了然，但也十分佩服，知道凡有灵药，一定是很不容易得到的，求仙的人，甚至于还要拼了性命，跑进深山里去采呢。&lt;/p&gt;&#xA;&lt;p&gt;这样有两年，渐渐地熟识，几乎是朋友了。父亲的水肿是逐日利害，将要不能起床；我对于经霜三年的甘蔗之流也逐渐失了信仰，采办药引似乎再没有先前一般踊跃了。正在这时候，他有一天来诊，问过病状，便极其诚恳地说：“我所有的学问，都用尽了。这里还有一位陈莲河先生，本领比我高。我荐他来看一看，我可以写一封信。可是，病是不要紧的，不过经他的手，可以格外好得快……”&lt;/p&gt;&#xA;&lt;p&gt;这一天似乎大家都有些不欢，仍然由我恭敬地送他上轿。进来时，看见父亲的脸色很异样，和大家谈论，大意是说自己的病大概没有希望的了；他因为看了两年，毫无效验，脸又太熟了，未免有些难以为情，所以等到危急时候，便荐一个生手自代，和自己完全脱了干系。但另外有什么法子呢？本城的名医，除他之外，实在也只有一个陈莲河了。明天就请陈莲河。&lt;/p&gt;&#xA;&lt;p&gt;陈莲河的诊金也是一元四角。但前回的名医的脸是圆而胖的，他却长而胖了：这一点颇不同。还有用药也不同。前回的名医是一个人还可以办的，这一回却是一个人有些办不妥帖了，因为他一张药方上，总兼有一种特别的丸散和一种奇特的药引。&lt;/p&gt;&#xA;&lt;p&gt;芦根和经霜三年的甘蔗，他就从来没有用过。最平常的是“&lt;a href=&#34;https://baike.baidu.com/item/%E8%9F%8B%E8%9F%80/769303?fromModule=lemma_inlink&#34;&gt;蟋蟀&lt;/a&gt;一对”，旁注小字道：“要原配，即本在一窠中者。”似乎昆虫也要贞节，续弦或再醮，连做药资格也丧失了。但这差使在我并不为难，走进&lt;a href=&#34;https://baike.baidu.com/item/%E7%99%BE%E8%8D%89%E5%9B%AD/9198649?fromModule=lemma_inlink&#34;&gt;百草园&lt;/a&gt;，十对也容易得，将它们用线一缚，活活地掷入沸汤中完事。然而还有“平地木十株”呢，这可谁也不知道是什么东西了，问药店，问乡下人，问卖草药的，问老年人，问读书人，问木匠，都只是摇摇头，临末才记起了那远房的叔祖，爱种一点花木的老人，跑去一问，他果然知道，是生在山中树下的一种小树，能结红子如小&lt;a href=&#34;https://baike.baidu.com/item/%E7%8F%8A%E7%91%9A%E7%8F%A0/5012744?fromModule=lemma_inlink&#34;&gt;珊瑚珠&lt;/a&gt;的，普通都称为“&lt;a href=&#34;https://baike.baidu.com/item/%E8%80%81%E5%BC%97%E5%A4%A7/3997173?fromModule=lemma_inlink&#34;&gt;老弗大&lt;/a&gt;”。&lt;/p&gt;&#xA;&lt;p&gt;“踏破铁鞋无觅处，得来全不费功夫。”药引寻到了，然而还有一种特别的&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%B8%E8%8D%AF/4074277?fromModule=lemma_inlink&#34;&gt;丸药&lt;/a&gt;：败鼓皮丸。这“败鼓皮丸”就是用打破的旧鼓皮做成；水肿一名鼓胀，一用打破的鼓皮自然就可以克伏他。清朝的刚毅因为憎恨“&lt;a href=&#34;https://baike.baidu.com/item/%E6%B4%8B%E9%AC%BC%E5%AD%90/773033?fromModule=lemma_inlink&#34;&gt;洋鬼子&lt;/a&gt;”，预备打他们，练了些兵称作“虎神营”，取虎能食羊，神能伏鬼的意思，也就是这道理。可惜这一种神药，全城中只有一家出售的，离我家就有五里，但这却不像平地木那样，必须暗中摸索了，陈莲河先生开方之后，就恳切详细地给我们说明。&lt;/p&gt;&#xA;&lt;p&gt;“我有一种丹，”有一回陈莲河先生说，“点在舌上，我想一定可以见效。因为舌乃心之灵苗……价钱也并不贵，只要两块钱一盒……”&lt;/p&gt;&#xA;&lt;p&gt;我父亲沉思了一会，摇摇头。&lt;/p&gt;&#xA;&lt;p&gt;“我这样用药还会不大见效，”有一回陈莲河先生又说，“我想，可以请人看一看，可有什么冤愆（qiān）……医能医病，不能医命，对不对？自然，这也许是前世的事……”&lt;/p&gt;&#xA;&lt;p&gt;我的父亲沉思了一会，摇摇头。&lt;/p&gt;&#xA;&lt;p&gt;凡国手，都能够起死回生的，我们走过医生的门前，常可以看见这样的扁额。现在是让步一点了，连医生自己也说道：“西医长于&lt;a href=&#34;https://baike.baidu.com/item/%E5%A4%96%E7%A7%91/7147896?fromModule=lemma_inlink&#34;&gt;外科&lt;/a&gt;，中医长于内科。”但是S城那时不但没有西医，并且谁也还没有想到天下有所谓西医，因此无论什么，都只能由轩辕岐伯的嫡派门徒包办。轩辕时候是巫医不分的，所以直到现在，他的门徒就还见鬼，而且觉得“舌乃心之灵苗”。这就是中国人的“命”，连名医也无从医治的。&lt;/p&gt;&#xA;&lt;p&gt;不肯用灵丹点在舌头上，又想不出“冤愆”来，自然，单吃了一百多天的“败鼓皮丸”有什么用呢？依然打不破水肿，父亲终于躺在床上喘气了。还请一回陈莲河先生，这回是特拔，大洋十元。他仍旧泰然地开了一张方，但已停止败鼓皮丸不用，药引也不很神妙了，所以只消半天，药就煎好，灌下去，却从口角上回了出来。&lt;/p&gt;&#xA;&lt;p&gt;从此我便不再和陈莲河先生周旋，只在街上有时看见他坐在三名&lt;a href=&#34;https://baike.baidu.com/item/%E8%BD%BF%E5%A4%AB/1319586?fromModule=lemma_inlink&#34;&gt;轿夫&lt;/a&gt;的快轿里飞一般抬过；听说他现在还康健，一面行医，一面还做中医什么学报，正在和只长于外科的西医奋斗哩。&lt;/p&gt;&#xA;&lt;p&gt;中西的思想&lt;a href=&#34;https://baike.baidu.com/item/%E7%A1%AE%E4%B9%8E/1827075?fromModule=lemma_inlink&#34;&gt;确乎&lt;/a&gt;有一点不同。听说中国的孝子们，一到将要“罪孽深重祸延父母”的时候，就买几斤人参，&lt;a href=&#34;https://baike.baidu.com/item/%E7%85%8E%E6%B1%A4/875302?fromModule=lemma_inlink&#34;&gt;煎汤&lt;/a&gt;灌下去，希望父母多喘几天气，即使半天也好。我的一位教医学的先生却教给我医生的职务道：可医的应该给他医治，不可医的应该给他死得没有痛苦。——但这先生自然是西医。&lt;/p&gt;&#xA;&lt;p&gt;父亲的喘气颇长久，连我也听得很吃力，然而谁也不能帮助他。我有时竟至于电光一闪似的想道：“还是快一点喘完了罢……”立刻觉得这思想就不该，就是犯了罪；但同时又觉得这思想实在是正当的，我很爱我的父亲。便是现在，也还是这样想。&lt;/p&gt;&#xA;&lt;p&gt;早晨，住在一门里的&lt;a href=&#34;https://baike.baidu.com/item/%E8%A1%8D%E5%A4%AA%E5%A4%AA/5891642?fromModule=lemma_inlink&#34;&gt;衍太太&lt;/a&gt;进来了。她是一个精通礼节的妇人，说我们不应该空等着。于是给他换衣服；又将纸锭和一种什么《高王经》烧成灰，用纸包了给他捏在拳头里……&lt;/p&gt;&#xA;&lt;p&gt;“叫呀，你父亲要断气了。快叫呀！”衍太太说。&lt;/p&gt;&#xA;&lt;p&gt;“父亲！父亲！”我就叫起来。&lt;/p&gt;&#xA;&lt;p&gt;“大声！他听不见。还不快叫？！”&lt;/p&gt;&#xA;&lt;p&gt;“父亲！！！父亲！！！”&lt;/p&gt;&#xA;&lt;p&gt;他已经平静下去的脸，忽然紧张了，将眼微微一睁，仿佛有一些苦痛。&lt;/p&gt;&#xA;&lt;p&gt;“叫呀！快叫呀！”她催促说。&lt;/p&gt;&#xA;&lt;p&gt;“父亲！！！”&lt;/p&gt;&#xA;&lt;p&gt;“什么呢？……不要嚷……不……”他低低地说，又较急地喘着气，好一会，这才复了原状，平静下去了。&lt;/p&gt;&#xA;&lt;p&gt;“父亲！！！”我还叫他，一直到他咽了气。&lt;/p&gt;&#xA;&lt;p&gt;我现在还听到那时的自己的这声音，每听到时，就觉得这却是我对于父亲的最大的错处。&lt;/p&gt;&#xA;&lt;p&gt;十月七日。&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang中使用excelize导出表格</title>
      <link>https://note.lican.site/posts/golang%E7%9A%84excelize%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/</link>
      <pubDate>Fri, 19 Jul 2024 16:22:21 +0800</pubDate>
      <guid>https://note.lican.site/posts/golang%E7%9A%84excelize%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/</guid>
      <description>&lt;h3 id=&#34;golang中使用excelize导出表格&#34;&gt;golang中使用excelize导出表格&lt;/h3&gt;&#xA;&lt;h4 id=&#34;背景客户每天定点取一组数据填入excel中记录发酵周期内温度变化并根据公式计算报表值现希望通过系统完成该操作&#34;&gt;背景：客户每天定点取一组数据填入excel中，记录发酵周期内温度变化，并根据公式计算报表值，现希望通过系统完成该操作&lt;/h4&gt;&#xA;&lt;h4 id=&#34;分析&#34;&gt;分析&lt;/h4&gt;&#xA;&lt;p&gt;针对golang的几款兼容性好的excel包有tealeg, excelize, openxlsx等，对比语法，选择了excelize&lt;/p&gt;&#xA;&lt;h5 id=&#34;step1-下载安装包&#34;&gt;Step1: 下载安装包&lt;/h5&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;方式一&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;：&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在go&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mod文件中&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;填写&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;github&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;xuri&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;excelize&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.6.1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;然后执行&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tidy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;方式二&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;：&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;在终端输入go&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;github&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;xuri&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;excelize&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;step2-查询数据&#34;&gt;Step2: 查询数据&lt;/h5&gt;&#xA;&lt;p&gt;根据客户要求，查询窖池中固定时间点的一条数据，分上中下层，当设备未上报该时间点数据时，取时间点前后教近的一条，该步骤省略&amp;hellip;&lt;/p&gt;&#xA;&lt;h5 id=&#34;step3-处理表格&#34;&gt;Step3: 处理表格&lt;/h5&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 创建一个新的Excel文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;excelize&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewFile&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;注意，同一个excel单元格只能设置一次样式，多次设置会覆盖&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 如果一个单元格的样式较多，可以把样式一次性加上&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;styleID&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewStyle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&amp;#34;font&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;size&amp;#34;:12,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;bold&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&amp;#34;alignment&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;horizontal&amp;#34;: &amp;#34;center&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;vertical&amp;#34;: &amp;#34;center&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;}`&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellStyle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;styleColor&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;// 设置样式&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 合并单元格&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MergeCell&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A2&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 设置单元格值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellValue&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OperationName&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 设置行高&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetRowHeight&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;22.0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 表格的填充需根据excel的横纵两个轴循环写入 eg:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// 循环填入数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dataGroup&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;lie1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetColumnLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetColumnLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dataGroup&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unix&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CreatedTime&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;timeStr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Format&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;01月02日 15:04&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellValue&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;timeStr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellValue&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Value&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellStyle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;styleCenter&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 移动到下一列&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;step3-保存文件&#34;&gt;Step3: 保存文件&lt;/h5&gt;&#xA;&lt;p&gt;excel表格数据填充完毕后，保存文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>golang中使用excelize导出表格</title>
      <link>https://note.lican.site/tech/golang%E7%9A%84excelize%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/</link>
      <pubDate>Fri, 19 Jul 2024 16:22:21 +0800</pubDate>
      <guid>https://note.lican.site/tech/golang%E7%9A%84excelize%E4%BD%BF%E7%94%A8%E5%BF%83%E5%BE%97/</guid>
      <description>&lt;h3 id=&#34;golang中使用excelize导出表格&#34;&gt;golang中使用excelize导出表格&lt;/h3&gt;&#xA;&lt;h4 id=&#34;背景客户每天定点取一组数据填入excel中记录发酵周期内温度变化并根据公式计算报表值现希望通过系统完成该操作&#34;&gt;背景：客户每天定点取一组数据填入excel中，记录发酵周期内温度变化，并根据公式计算报表值，现希望通过系统完成该操作&lt;/h4&gt;&#xA;&lt;h4 id=&#34;分析&#34;&gt;分析&lt;/h4&gt;&#xA;&lt;p&gt;针对golang的几款兼容性好的excel包有tealeg, excelize, openxlsx等，对比语法，选择了excelize&lt;/p&gt;&#xA;&lt;h5 id=&#34;step1-下载安装包&#34;&gt;Step1: 下载安装包&lt;/h5&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;方式一&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;：&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;在go&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mod文件中&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;填写&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;github&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;xuri&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;excelize&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.6.1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;然后执行&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mod&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tidy&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;方式二&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;：&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;在终端输入go&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;github&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;xuri&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;excelize&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;step2-查询数据&#34;&gt;Step2: 查询数据&lt;/h5&gt;&#xA;&lt;p&gt;根据客户要求，查询窖池中固定时间点的一条数据，分上中下层，当设备未上报该时间点数据时，取时间点前后教近的一条，该步骤省略&amp;hellip;&lt;/p&gt;&#xA;&lt;h5 id=&#34;step3-处理表格&#34;&gt;Step3: 处理表格&lt;/h5&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 创建一个新的Excel文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;excelize&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewFile&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;注意，同一个excel单元格只能设置一次样式，多次设置会覆盖&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 如果一个单元格的样式较多，可以把样式一次性加上&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;styleID&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewStyle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;`{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&amp;#34;font&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;size&amp;#34;:12,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;bold&amp;#34;: true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&amp;#34;alignment&amp;#34;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;horizontal&amp;#34;: &amp;#34;center&amp;#34;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;&#x9;&amp;#34;vertical&amp;#34;: &amp;#34;center&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&#x9;}`&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellStyle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;styleColor&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;// 设置样式&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 合并单元格&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MergeCell&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A2&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 设置单元格值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellValue&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OperationName&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 设置行高&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetRowHeight&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;22.0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 表格的填充需根据excel的横纵两个轴循环写入 eg:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; { &lt;span style=&#34;color:#75715e&#34;&gt;// 循环填入数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dataGroup&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;lie1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetColumnLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetColumnLetter&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dataGroup&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unix&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CreatedTime&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;timeStr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Format&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;01月02日 15:04&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellValue&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;timeStr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellValue&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Value&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetCellStyle&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Sheet1&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%d&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lie2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;styleCenter&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;rowIndex&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;columnIndex&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 移动到下一列&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h5 id=&#34;step3-保存文件&#34;&gt;Step3: 保存文件&lt;/h5&gt;&#xA;&lt;p&gt;excel表格数据填充完毕后，保存文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>windows开机自启动应用</title>
      <link>https://note.lican.site/posts/%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8%E8%AE%BE%E7%BD%AE/</link>
      <pubDate>Fri, 12 Jul 2024 16:57:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8%E8%AE%BE%E7%BD%AE/</guid>
      <description>&lt;h3 id=&#34;windows开机自启动应用&#34;&gt;windows开机自启动应用&lt;/h3&gt;&#xA;&lt;h4 id=&#34;背景&#34;&gt;背景&lt;/h4&gt;&#xA;&lt;p&gt;客户有一款竖行屏，要定向展示某个内容，具体内容是打开谷歌浏览器访问某个链接，并隐藏地址栏全屏展示&lt;/p&gt;&#xA;&lt;h4 id=&#34;分析&#34;&gt;分析&lt;/h4&gt;&#xA;&lt;p&gt;开启自启动可以通过windows系统自带的功能，但要实现隐藏地址栏并全屏显示则需借助第三方工具AHK&lt;/p&gt;&#xA;&lt;h5 id=&#34;step1-下载ahk&#34;&gt;Step1: 下载ahk&lt;/h5&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://autohotkey.com/&#34;&gt;AHK官网&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h5 id=&#34;step2-编写ahk脚本&#34;&gt;Step2: 编写ahk脚本&lt;/h5&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;创建hjb.ahk&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;NoEnv&lt;/span&gt;  ; &lt;span style=&#34;color:#a6e22e&#34;&gt;Recommended&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;performance&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;compatibility&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;with&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;future&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AutoHotkey&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;releases&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Warn&lt;/span&gt;  ; &lt;span style=&#34;color:#a6e22e&#34;&gt;Enable&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;warnings&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;assist&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;with&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;detecting&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;common&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;errors&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SendMode&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Input&lt;/span&gt;  ; &lt;span style=&#34;color:#a6e22e&#34;&gt;Recommended&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scripts&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;due&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;to&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;its&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;superior&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;speed&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reliability&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SetWorkingDir&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;A_ScriptDir&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;  ; &lt;span style=&#34;color:#a6e22e&#34;&gt;Ensures&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;consistent&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;starting&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;directory&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Run&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;C:\Program Files\Google\Chrome\Application\chrome.exe&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//117.173.165.135:60080/#/brewing_process?organization_id=1702188317321555&amp;amp;header_device_id=1720583071272198&amp;amp;footer_device_id=1706751284514993 --start-maximized --kiosk&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;WinWaitActive&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ahk_exe&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;chrome&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;exe&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Send&lt;/span&gt;, {&lt;span style=&#34;color:#a6e22e&#34;&gt;F11&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;注意，在windows电脑上找到浏览器地址，例如我的google浏览器的运行地址是C:\Program Files\Google\Chrome\Application\chrome.exe， 然后空格写上要访问的地址&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.site/images/1720774094310.png&#34; alt=&#34;1720774094310&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在安装了AHK软件的情况下，双击hjb.ahk文件，即可全屏打开访问的地址并隐藏地址栏&lt;/p&gt;&#xA;&lt;h5 id=&#34;step3-将hjbahk文件放入开机自启动项中&#34;&gt;Step3: 将hjb.ahk文件放入开机自启动项中&lt;/h5&gt;&#xA;&lt;p&gt;Win+R打开cmd：输入shell:startup 打开开机自启动文件夹&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.site/images/1720774262011.png&#34; alt=&#34;1720774262011&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;将hjb.ahk文件复制到该文件夹中即可&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.lican.site/images/1720774311169.png&#34; alt=&#34;1720774311169&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>gitea&#43;drone配置自动化部署</title>
      <link>https://note.lican.site/posts/gitea&#43;drone%E6%90%AD%E5%BB%BA%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/</link>
      <pubDate>Thu, 04 Jul 2024 14:00:28 +0800</pubDate>
      <guid>https://note.lican.site/posts/gitea&#43;drone%E6%90%AD%E5%BB%BA%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/</guid>
      <description>&lt;h3 id=&#34;git--drone搭建项目自动部署&#34;&gt;git + drone搭建项目自动部署&lt;/h3&gt;&#xA;&lt;h4 id=&#34;step1下载安装gitea&#34;&gt;step1：下载安装gitea&lt;/h4&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;docker-compose.yml&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;www&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;gitea&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gitea/gitea:1.16.9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gitea&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;USER_UID=1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;USER_GID=1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_TYPE=mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_HOST= mysql:3306&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_NAME=gitea&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_USER=root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_PASSWD=lican520&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;www&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./gitea:/data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./etc/timezone:/etc/timezone:ro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./etc/localtime:/etc/localtime:ro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;expose&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;3000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;100M&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 单个文件大小为200k&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 最多10个文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意：当docker-compose无法拉取gitea安装包时，可以从&lt;a href=&#34;https://pan.baidu.com/s/1geZWmAslEEevfs5yWlCFzA?pwd=1234&#34;&gt;gitea.tar&lt;/a&gt;拉取，我们通过&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gitea&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;tar&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gitea&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gitea&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1.16.9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存的安装包，下载后， 仅需docker load -i gitea.tar即可&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;安装之前，需要先安装一个mysql容器，gitea依赖mysql存储&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;服务启动后，可以配置nginx转发，配置域名，通过域名访问&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate&lt;/span&gt;      .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate_key&lt;/span&gt;  .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;args&lt;/span&gt; ~&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^go-get=1&amp;#34;&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;condition&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;goget&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt; ~ ^&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;zA&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Z0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9_&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;zA&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Z0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9_&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;condition&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;${condition}path&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;condition&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;gogetpath&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta content=&amp;#39;git.nongbotech.com/$1/$2 git https://git.nongbotech.com/$1/$2.git&amp;#39; name=&amp;#39;go-import&amp;#39;&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;/html&amp;gt;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Origin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//gitea:3000;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过域名访问后，配置数据库登录参数，即可来到登录页面，登录后，可创建代码仓库&lt;/p&gt;</description>
    </item>
    <item>
      <title>gitea&#43;drone配置自动化部署</title>
      <link>https://note.lican.site/tech/gitea&#43;drone%E6%90%AD%E5%BB%BA%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/</link>
      <pubDate>Thu, 04 Jul 2024 14:00:28 +0800</pubDate>
      <guid>https://note.lican.site/tech/gitea&#43;drone%E6%90%AD%E5%BB%BA%E9%A1%B9%E7%9B%AE%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/</guid>
      <description>&lt;h3 id=&#34;git--drone搭建项目自动部署&#34;&gt;git + drone搭建项目自动部署&lt;/h3&gt;&#xA;&lt;h4 id=&#34;step1下载安装gitea&#34;&gt;step1：下载安装gitea&lt;/h4&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;docker-compose.yml&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;www&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;external&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;gitea&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gitea/gitea:1.16.9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;gitea&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;USER_UID=1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;USER_GID=1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_TYPE=mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_HOST= mysql:3306&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_NAME=gitea&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_USER=root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;DB_PASSWD=lican520&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;networks&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;www&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./gitea:/data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./etc/timezone:/etc/timezone:ro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./etc/localtime:/etc/localtime:ro&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;expose&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;3000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;100M&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 单个文件大小为200k&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;         &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 最多10个文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意：当docker-compose无法拉取gitea安装包时，可以从&lt;a href=&#34;https://pan.baidu.com/s/1geZWmAslEEevfs5yWlCFzA?pwd=1234&#34;&gt;gitea.tar&lt;/a&gt;拉取，我们通过&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;o&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gitea&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;tar&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gitea&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gitea&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;1.16.9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;保存的安装包，下载后， 仅需docker load -i gitea.tar即可&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;安装之前，需要先安装一个mysql容器，gitea依赖mysql存储&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;服务启动后，可以配置nginx转发，配置域名，通过域名访问&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate&lt;/span&gt;      .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate_key&lt;/span&gt;  .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;args&lt;/span&gt; ~&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^go-get=1&amp;#34;&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;condition&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;goget&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;uri&lt;/span&gt; ~ ^&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;zA&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Z0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9_&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;([&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;zA&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Z0&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9_&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;set&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;condition&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;${condition}path&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;condition&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;gogetpath&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;200&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta content=&amp;#39;git.nongbotech.com/$1/$2 git https://git.nongbotech.com/$1/$2.git&amp;#39; name=&amp;#39;go-import&amp;#39;&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;/html&amp;gt;&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Origin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//gitea:3000;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过域名访问后，配置数据库登录参数，即可来到登录页面，登录后，可创建代码仓库&lt;/p&gt;</description>
    </item>
    <item>
      <title>git复制新项目时重置提交次数</title>
      <link>https://note.lican.site/posts/git%E5%A4%8D%E5%88%B6%E6%96%B0%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8F%90%E4%BA%A4%E6%AC%A1%E6%95%B0/</link>
      <pubDate>Thu, 04 Jul 2024 13:59:28 +0800</pubDate>
      <guid>https://note.lican.site/posts/git%E5%A4%8D%E5%88%B6%E6%96%B0%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8F%90%E4%BA%A4%E6%AC%A1%E6%95%B0/</guid>
      <description>&lt;h3 id=&#34;删除所有git-log&#34;&gt;删除所有git log&lt;/h3&gt;&#xA;&lt;p&gt;新创建一个项目时，会复制一个项目框架，可能保留了一些历史提交次数&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1709609348657.png&#34; alt=&#34;1709609348657&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;checkout&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;orphan&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;commit&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;empty&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Initial commit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;checkout&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;master&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hard&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;origin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;force&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行完以上命令，就会清空新仓库的历史提交次数而不影响代码&lt;/p&gt;</description>
    </item>
    <item>
      <title>git复制新项目时重置提交次数</title>
      <link>https://note.lican.site/tech/git%E5%A4%8D%E5%88%B6%E6%96%B0%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8F%90%E4%BA%A4%E6%AC%A1%E6%95%B0/</link>
      <pubDate>Thu, 04 Jul 2024 13:59:28 +0800</pubDate>
      <guid>https://note.lican.site/tech/git%E5%A4%8D%E5%88%B6%E6%96%B0%E9%A1%B9%E7%9B%AE%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8F%90%E4%BA%A4%E6%AC%A1%E6%95%B0/</guid>
      <description>&lt;h3 id=&#34;删除所有git-log&#34;&gt;删除所有git log&lt;/h3&gt;&#xA;&lt;p&gt;新创建一个项目时，会复制一个项目框架，可能保留了一些历史提交次数&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;C:%5CUsers%5CAdministrator%5CAppData%5CRoaming%5CTypora%5Ctypora-user-images%5C1709609348657.png&#34; alt=&#34;1709609348657&#34;&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;checkout&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;orphan&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;commit&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;empty&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Initial commit&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;checkout&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;master&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;reset&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hard&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;new&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;branch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;git&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;push&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;origin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;force&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行完以上命令，就会清空新仓库的历史提交次数而不影响代码&lt;/p&gt;</description>
    </item>
    <item>
      <title>时运赋</title>
      <link>https://note.lican.site/article/%E6%97%B6%E8%BF%90%E8%B5%8B/</link>
      <pubDate>Wed, 03 Jul 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E6%97%B6%E8%BF%90%E8%B5%8B/</guid>
      <description>&lt;h3 id=&#34;时运赋&#34;&gt;时运赋&lt;/h3&gt;&#xA;&lt;p&gt;时也，命也，运也。&lt;/p&gt;&#xA;&lt;p&gt;天有不测风云，人有旦夕祸福。&lt;/p&gt;&#xA;&lt;p&gt;蜈蚣百足，行不及蛇。&lt;/p&gt;&#xA;&lt;p&gt;灵鸡有翼，飞不如鸭。&lt;/p&gt;&#xA;&lt;p&gt;马有千里之程，无人不能自往。&lt;/p&gt;&#xA;&lt;p&gt;人有凌云之志，非运不能腾达。&lt;/p&gt;&#xA;&lt;p&gt;文章盖世，孔子尚困于陈邦。&lt;/p&gt;&#xA;&lt;p&gt;武略超群，太公垂钓渭水。&lt;/p&gt;&#xA;&lt;p&gt;盗跖年长，不是善良之辈。&lt;/p&gt;&#xA;&lt;p&gt;颜回命短，实非凶恶之徒。&lt;/p&gt;&#xA;&lt;p&gt;尧舜至圣，却生不肖之子。&lt;/p&gt;&#xA;&lt;p&gt;瞽叟顽呆，反生大圣之儿。&lt;/p&gt;&#xA;&lt;p&gt;张良本是布衣，萧何称谓县吏。&lt;/p&gt;&#xA;&lt;p&gt;晏子身无五尺，封为齐国首相。&lt;/p&gt;&#xA;&lt;p&gt;孔明卧居草庐，能做蜀汉军师。&lt;/p&gt;&#xA;&lt;p&gt;韩信手无缚鸡之力，封为汉朝大将。&lt;/p&gt;&#xA;&lt;p&gt;冯唐有安邦之志，到老半官无封。&lt;/p&gt;&#xA;&lt;p&gt;李广有射虎之威，终身不第。&lt;/p&gt;&#xA;&lt;p&gt;楚王虽雄，难免乌江自刎。汉王虽若，却有万里江山。&lt;/p&gt;&#xA;&lt;p&gt;满腹经纶，白发不第。&lt;/p&gt;&#xA;&lt;p&gt;才疏学浅，少年登科。&lt;/p&gt;&#xA;&lt;p&gt;有先富而后贫，有先贫而后富。&lt;/p&gt;&#xA;&lt;p&gt;蛟龙未遇，潜身于鱼虾之间。&lt;/p&gt;&#xA;&lt;p&gt;君子失时，拱手于小人之下。&lt;/p&gt;&#xA;&lt;p&gt;天不得时，日月无光。&lt;/p&gt;&#xA;&lt;p&gt;地不得时，草木不长。&lt;/p&gt;&#xA;&lt;p&gt;水不得时，风浪不平。&lt;/p&gt;&#xA;&lt;p&gt;人不得时，利运不通。&lt;/p&gt;&#xA;&lt;p&gt;盖，人生在世，富贵不能移，贫贱不可欺。此乃天地循环，终而复始者也！&lt;/p&gt;</description>
    </item>
    <item>
      <title>狂人日记</title>
      <link>https://note.lican.site/article/%E7%8B%82%E4%BA%BA%E6%97%A5%E8%AE%B0/</link>
      <pubDate>Tue, 02 Jul 2024 16:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E7%8B%82%E4%BA%BA%E6%97%A5%E8%AE%B0/</guid>
      <description>&lt;p&gt;一&lt;/p&gt;&#xA;&lt;p&gt;今天晚上，很好的月光。&lt;/p&gt;&#xA;&lt;p&gt;我不见他，已是三十多年；今天见了，精神分外爽快。才知道以前的三十多年，全是发昏；然而须十分小心。不然，那赵家的狗，何以看我两眼呢？&lt;/p&gt;&#xA;&lt;p&gt;我怕得有理。&lt;/p&gt;&#xA;&lt;p&gt;二&lt;/p&gt;&#xA;&lt;p&gt;今天全没月光，我知道不妙。早上小心出门，赵贵翁的眼色便怪：似乎怕我，似乎想害我。还有七八个人，交头接耳的议论我，张着嘴，对我笑了一笑；我便从头直冷到脚根，晓得他们布置，都已妥当了。&lt;/p&gt;&#xA;&lt;p&gt;我可不怕，仍旧走我的路。前面一伙小孩子，也在那里议论我；眼色也同赵贵翁一样，脸色也铁青。我想我同小孩子有什么仇，他也这样。忍不住大声说，“你告诉我！”他们可就跑了。&lt;/p&gt;&#xA;&lt;p&gt;我想：我同赵贵翁有什么仇，同路上的人又有什么仇；只有廿年以前，把古久先生的陈年流水簿子⑶，踹了一脚，古久先生很不高兴。赵贵翁虽然不认识他，一定也听到风声，代抱不平；约定路上的人，同我作冤对。但是小孩子呢？那时候，他们还没有出世，何以今天也睁着怪眼睛，似乎怕我，似乎想害我。这真教我怕，教我纳罕而且伤心。&lt;/p&gt;&#xA;&lt;p&gt;我明白了。这是他们娘老子教的！&lt;/p&gt;&#xA;&lt;p&gt;三&lt;/p&gt;&#xA;&lt;p&gt;晚上总是睡不着。凡事须得研究，才会明白。&lt;/p&gt;&#xA;&lt;p&gt;他们——也有给知县打枷过的，也有给绅士掌过嘴的，也有衙役占了他妻子的，也有老子娘被债主逼死的；他们那时候的脸色，全没有昨天这么怕，也没有这么凶。&lt;/p&gt;&#xA;&lt;p&gt;最奇怪的是昨天街上的那个女人，打他儿子，嘴里说道，“老子呀！我要咬你几口才出气！”他眼睛却看着我。我出了一惊，遮掩不住；那青面獠牙的一伙人，便都哄笑起来。陈  老五赶上前，硬把我拖回家中了。&lt;/p&gt;&#xA;&lt;p&gt;拖我回家，家里的人都装作不认识我；他们的脸色，也全同别人一样。进了书房，便反扣上门，宛然是关了一只鸡鸭。这一件事，越教我猜不出底细。&lt;/p&gt;&#xA;&lt;p&gt;前几天，狼子村的佃户来告荒，对我大哥说，他们村里的一个大恶人，给大家打死了；几个人便挖出他的心肝来，用油煎炒了吃，可以壮壮胆子。我插了一句嘴，佃户和大哥便都看我几眼。今天才晓得他们的眼光，全同外面的那伙人一模一样。&lt;/p&gt;&#xA;&lt;p&gt;想起来，我从顶上直冷到脚跟。&lt;/p&gt;&#xA;&lt;p&gt;他们会吃人，就未必不会吃我。&lt;/p&gt;&#xA;&lt;p&gt;你看那女人“咬你几口”的话，和一伙青面獠牙人的笑，和前天佃户的话，明明是暗号。我看出他话中全是毒，笑中全是刀。他们的牙齿，全是白厉厉的排着，这就是吃人的家伙。&lt;/p&gt;&#xA;&lt;p&gt;照我自己想，虽然不是恶人，自从踹了古家的簿子，可就难说了。他们似乎别有心思，我全猜不出。况且他们一翻脸，便说人是恶人。我还记得大哥教我做论，无论怎样好人，翻他几句，他便打上几个圈；原谅坏人几句，他便说“翻天妙手，与众不同”。我那里猜得到他们的心思，究竟怎样；况且是要吃的时候。&lt;/p&gt;&#xA;&lt;p&gt;凡事总须研究，才会明白。古来时常吃人，我也还记得，可是不甚清楚。我翻开历史一查，这历史没有年代，歪歪斜斜的每叶上都写着“仁义道德”几个字。我横竖睡不着，仔细看了半夜，才从字缝里看出字来，满本都写着两个字是“吃人”！&lt;/p&gt;&#xA;&lt;p&gt;书上写着这许多字，佃户说了这许多话，却都笑吟吟的睁着怪眼看我。&lt;/p&gt;&#xA;&lt;p&gt;我也是人，他们想要吃我了！&lt;/p&gt;&#xA;&lt;p&gt;四&lt;/p&gt;&#xA;&lt;p&gt;早上，我静坐了一会儿。陈老五送进饭来，一碗菜，一碗蒸鱼；这鱼的眼睛，白而且硬，张着嘴，同那一伙想吃人的人一样。吃了几筷，滑溜溜的不知是鱼是人，便把他兜肚连肠的吐出。&lt;/p&gt;&#xA;&lt;p&gt;我说“老五，对大哥说，我闷得慌，想到园里走走。”老五不答应，走了；停一会，可就来开了门。&lt;/p&gt;&#xA;&lt;p&gt;我也不动，研究他们如何摆布我；知道他们一定不肯放松。果然！我大哥引了一个老头子，慢慢走来；他满眼凶光，怕我看出，只是低头向着地，从眼镜横边暗暗看我。大哥说，“今天你仿佛很好。”我说“是的。”大哥说，“今天请何先生来，给你诊一诊。”我说“可以！”其实我岂不知道这老头子是刽子手扮的！无非借了看脉这名目，揣一揣肥瘠：因这功劳，也分一片肉吃。我也不怕；虽然不吃人，胆子却比他们还壮。伸出两个拳头，看他如何下手。老头子坐着，闭了眼睛，摸了好一会，呆了好一会；便张开他鬼眼睛说，“不要乱想。静静的养几天，就好了。”&lt;/p&gt;&#xA;&lt;p&gt;不要乱想，静静的养！养肥了，他们是自然可以多吃；我有什么好处，怎么会“好了”？他们这群人，又想吃人，又是鬼鬼祟祟，想法子遮掩，不敢直截下手，真要令我笑死。我忍不住，便放声大笑起来，十分快活。自己晓得这笑声里面，有的是义勇和正气。老头子和大哥，都失了色，被我这勇气正气镇压住了。&lt;/p&gt;&#xA;&lt;p&gt;但是我有勇气，他们便越想吃我，沾光一点这勇气。老头子跨出门，走不多远，便低声对大哥说道，“赶紧吃罢！”大哥点点头。原来也有你！这一件大发见，虽似意外，也在意中：合伙吃我的人，便是我的哥哥！&lt;/p&gt;&#xA;&lt;p&gt;吃人的是我哥哥！&lt;/p&gt;&#xA;&lt;p&gt;我是吃人的人的兄弟！&lt;/p&gt;&#xA;&lt;p&gt;我自己被人吃了，可仍然是吃人的人的兄弟！&lt;/p&gt;&#xA;&lt;p&gt;五&lt;/p&gt;&#xA;&lt;p&gt;这几天是退一步想：假使那老头子不是刽子手扮的，真是医生，也仍然是吃人的人。他们的祖师李时珍做的“本草什么”⑷上，明明写着人肉可以煎吃；他还能说自己不吃人么？&lt;/p&gt;&#xA;&lt;p&gt;至于我家大哥，也毫不冤枉他。他对我讲书的时候，亲口说过可以“易子而食”⑸；又一回偶然议论起一个不好的人，他便说不但该杀，还当“食肉寝皮”⑹。我那时年纪还小，心跳了好半天。前天狼子村佃户来说吃心肝的事，他也毫不奇怪，不住的点头。可见心思是同从前一样狠。既然可以“易子而食”，便什么都易得，什么人都吃得。我从前单听他讲道理，也胡涂过去；现在晓得他讲道理的时候，不但唇边还抹着人油，而且心里满装着吃人的意思。&lt;/p&gt;&#xA;&lt;p&gt;六&lt;/p&gt;&#xA;&lt;p&gt;黑漆漆的，不知是日是夜。赵家的狗又叫起来了。&lt;/p&gt;&#xA;&lt;p&gt;狮子似的凶心，兔子的怯弱，狐狸的狡猾，……&lt;/p&gt;&#xA;&lt;p&gt;七&lt;/p&gt;&#xA;&lt;p&gt;我晓得他们的方法，直捷杀了，是不肯的，而且也不敢，怕有祸祟。所以他们大家连络，布满了罗网，逼我自戕。试看前几天街上男女的样子，和这几天我大哥的作为，便足可悟出八九分了。最好是解下腰带，挂在梁上，自己紧紧勒死；他们没有杀人的罪名，又偿了心愿，自然都欢天喜地的发出一种呜呜咽咽的笑声。否则惊吓忧愁死了，虽则略瘦，也还可以首肯几下。&lt;/p&gt;&#xA;&lt;p&gt;他们是只会吃死肉的！——记得什么书上说，有一种东西，叫“海乙那”⑺的，眼光和样子都很难看；时常吃死肉，连极大的骨头，都细细嚼烂，咽下肚子去，想起来也教人害怕。“海乙那”是狼的亲眷，狼是狗的本家。前天赵家的狗，看我几眼，可见他也同谋，早已接洽。老头子眼看着地，岂能瞒得我过。&lt;/p&gt;&#xA;&lt;p&gt;最可怜的是我的大哥，他也是人，何以毫不害怕；而且合伙吃我呢？还是历来惯了，不以为非呢？还是丧了良心，明知故犯呢？&lt;/p&gt;&#xA;&lt;p&gt;我诅咒吃人的人，先从他起头；要劝转吃人的人，也先从他下手。&lt;/p&gt;&#xA;&lt;p&gt;八&lt;/p&gt;&#xA;&lt;p&gt;其实这种道理，到了现在，他们也该早已懂得，……&lt;/p&gt;&#xA;&lt;p&gt;忽然来了一个人；年纪不过二十左右，相貌是不很看得清楚，满面笑容，对了我点头，他的笑也不像真笑。我便问他，“吃人的事，对么？”他仍然笑着说，“不是荒年，怎么会吃人。”我立刻就晓得，他也是一伙，喜欢吃人的；便自勇气百倍，偏要问他。&lt;/p&gt;&#xA;&lt;p&gt;“对么？”&lt;/p&gt;&#xA;&lt;p&gt;“这等事问他什么。你真会……说笑话。……今天天气很好。”&lt;/p&gt;&#xA;&lt;p&gt;天气是好，月色也很亮了。可是我要问你，“对么？”&lt;/p&gt;&#xA;&lt;p&gt;他不以为然了。含含胡胡的答道，“不……”&lt;/p&gt;&#xA;&lt;p&gt;“不对？他们何以竟吃？！”&lt;/p&gt;&#xA;&lt;p&gt;“没有的事……”&lt;/p&gt;&#xA;&lt;p&gt;“没有的事？狼子村现吃；还有书上都写着，通红斩新！”&lt;/p&gt;&#xA;&lt;p&gt;他便变了脸，铁一般青。睁着眼说，“有许有的，这是从来如此……”&lt;/p&gt;&#xA;&lt;p&gt;“从来如此，便对么？”&lt;/p&gt;&#xA;&lt;p&gt;“我不同你讲这些道理；总之你不该说，你说便是你错！”&lt;/p&gt;&#xA;&lt;p&gt;我直跳起来，张开眼，这人便不见了。全身出了一大片汗。他的年纪，比我大哥小得远，居然也是一伙；这一定是他娘老子先教的。还怕已经教给他儿子了；所以连小孩子，也都恶狠狠的看我。&lt;/p&gt;&#xA;&lt;p&gt;九&lt;/p&gt;&#xA;&lt;p&gt;自己想吃人，又怕被别人吃了，都用着疑心极深的眼光，面面相觑。……&lt;/p&gt;&#xA;&lt;p&gt;去了这心思，放心做事走路吃饭睡觉，何等舒服。这只是一条门槛，一个关头。他们可是父子兄弟夫妇朋友师生仇敌和各不相识的人，都结成一伙，互相劝勉，互相牵掣，死也不肯跨过这一步。&lt;/p&gt;&#xA;&lt;p&gt;十&lt;/p&gt;&#xA;&lt;p&gt;大清早，去寻我大哥；他立在堂门外看天，我便走到他背后，拦住门，格外沉静，格外和气的对他说，&lt;/p&gt;&#xA;&lt;p&gt;“大哥，我有话告诉你。”&lt;/p&gt;&#xA;&lt;p&gt;“你说就是，”他赶紧回过脸来，点点头。&lt;/p&gt;&#xA;&lt;p&gt;“我只有几句话，可是说不出来。大哥，大约当初野蛮的人，都吃过一点人。后来因为心思不同，有的不吃人了，一味要好，便变了人，变了真的人。有的却还吃，——也同虫子一样，有的变了鱼鸟猴子，一直变到人。有的不要好，至今还是虫子。这吃人的人比不吃人的人，何等惭愧。怕比虫子的惭愧猴子，还差得很远很远。&lt;/p&gt;&#xA;&lt;p&gt;“易牙⑻蒸了他儿子，给桀纣吃，还是一直从前的事。谁晓得从盘古开辟天地以后，一直吃到易牙的儿子；从易牙的儿子，一直吃到徐锡林⑼；从徐锡林，又一直吃到狼子村捉住的人。去年城里杀了犯人，还有一个生痨病的人，用馒头蘸血舐。&lt;/p&gt;&#xA;&lt;p&gt;“他们要吃我，你一个人，原也无法可想；然而又何必去入伙。吃人的人，什么事做不  出；他们会吃我，也会吃你，一伙里面，也会自吃。但只要转一步，只要立刻改了，也就是人人太平。虽然从来如此，我们今天也可以格外要好，说是不能！大哥，我相信你能说，前天佃户要减租，你说过不能。”&lt;/p&gt;&#xA;&lt;p&gt;当初，他还只是冷笑，随后眼光便凶狠起来，一到说破他们的隐情，那就满脸都变成青色了。大门外立着一伙人，赵贵翁和他的狗，也在里面，都探头探脑的挨进来。有的是看不出面貌，似乎用布蒙着；有的是仍旧青面獠牙，抿着嘴笑。我认识他们是一伙，都是吃人的人。可是也晓得他们心思很不一样，一种是以为从来如此，应该吃的；一种是知道不该吃，&lt;/p&gt;&#xA;&lt;p&gt;可是仍然要吃，又怕别人说破他，所以听了我的话，越发气愤不过，可是抿着嘴冷笑。&lt;/p&gt;&#xA;&lt;p&gt;这时候，大哥也忽然显出凶相，高声喝道，&lt;/p&gt;&#xA;&lt;p&gt;“都出去！疯子有什么好看！”&lt;/p&gt;&#xA;&lt;p&gt;这时候，我又懂得一件他们的巧妙了。他们岂但不肯改，而且早已布置；预备下一个疯子的名目罩上我。将来吃了，不但太平无事，怕还会有人见情。佃户说的大家吃了一个恶人，正是这方法。这是他们的老谱！&lt;/p&gt;&#xA;&lt;p&gt;陈老五也气愤愤的直走进来。如何按得住我的口，我偏要对这伙人说，&lt;/p&gt;&#xA;&lt;p&gt;“你们可以改了，从真心改起！要晓得将来容不得吃人的人，活在世上。&lt;/p&gt;&#xA;&lt;p&gt;“你们要不改，自己也会吃尽。即使生得多，也会给真的人除灭了，同猎人打完狼子一  样！——同虫子一样！”&lt;/p&gt;&#xA;&lt;p&gt;那一伙人，都被陈老五赶走了。大哥也不知那里去了。陈老五劝我回屋子里去。屋里面全是黑沉沉的。横梁和椽子都在头上发抖；抖了一会，就大起来，堆在我身上。&lt;/p&gt;&#xA;&lt;p&gt;万分沉重，动弹不得；他的意思是要我死。我晓得他的沉重是假的，便挣扎出来，出了一身汗。可是偏要说，&lt;/p&gt;&#xA;&lt;p&gt;“你们立刻改了，从真心改起！你们要晓得将来是容不得吃人的人，……”&lt;/p&gt;</description>
    </item>
    <item>
      <title>弟子规</title>
      <link>https://note.lican.site/article/%E5%BC%9F%E5%AD%90%E8%A7%84/</link>
      <pubDate>Mon, 01 Jul 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E5%BC%9F%E5%AD%90%E8%A7%84/</guid>
      <description>&lt;p&gt;​&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;&#x9;弟子规，圣人训。&lt;/p&gt;&#xA;&lt;p&gt;首孝悌，次谨信。&lt;/p&gt;&#xA;&lt;p&gt;泛爱众，而亲仁。&lt;/p&gt;&#xA;&lt;p&gt;有余力，则学文。&lt;/p&gt;&#xA;&lt;p&gt;父母呼，应勿缓。&lt;/p&gt;&#xA;&lt;p&gt;父母命，行勿懒。&lt;/p&gt;&#xA;&lt;p&gt;父母教，须敬听。&lt;/p&gt;&#xA;&lt;p&gt;父母责，须顺承。&lt;/p&gt;&#xA;&lt;p&gt;冬则温，夏则凊。&lt;/p&gt;&#xA;&lt;p&gt;晨则省，昏则定。&lt;/p&gt;&#xA;&lt;p&gt;出必告，反必面。&lt;/p&gt;&#xA;&lt;p&gt;居有常，业无变。&lt;/p&gt;&#xA;&lt;p&gt;事虽小，勿擅为。&lt;/p&gt;&#xA;&lt;p&gt;苟擅为，子道亏。&lt;/p&gt;&#xA;&lt;p&gt;物虽小，勿私藏。&lt;/p&gt;&#xA;&lt;p&gt;苟私藏，亲心伤。&lt;/p&gt;&#xA;&lt;p&gt;亲所好，力为具。&lt;/p&gt;&#xA;&lt;p&gt;亲所恶，谨为去。&lt;/p&gt;&#xA;&lt;p&gt;身有伤，贻亲忧。&lt;/p&gt;&#xA;&lt;p&gt;德有伤，贻亲羞。&lt;/p&gt;&#xA;&lt;p&gt;亲爱我，孝何难。&lt;/p&gt;&#xA;&lt;p&gt;亲憎我，孝方贤。&lt;/p&gt;&#xA;&lt;p&gt;亲有过，谏使更。&lt;/p&gt;&#xA;&lt;p&gt;怡吾色，柔吾声。&lt;/p&gt;&#xA;&lt;p&gt;谏不入，悦复谏。&lt;/p&gt;&#xA;&lt;p&gt;号泣随，挞无怨。&lt;/p&gt;&#xA;&lt;p&gt;亲有疾，药先尝。&lt;/p&gt;&#xA;&lt;p&gt;昼夜侍，不离床。&lt;/p&gt;&#xA;&lt;p&gt;丧三年，常悲咽。&lt;/p&gt;&#xA;&lt;p&gt;居处变，酒肉绝。&lt;/p&gt;&#xA;&lt;p&gt;丧尽礼，祭尽诚。&lt;/p&gt;&#xA;&lt;p&gt;事死者，如事生。&lt;/p&gt;&#xA;&lt;p&gt;兄道友，弟道恭。&lt;/p&gt;&#xA;&lt;p&gt;兄弟睦，孝在中。&lt;/p&gt;&#xA;&lt;p&gt;财物轻，怨何生。&lt;/p&gt;&#xA;&lt;p&gt;言语忍，忿自泯。&lt;/p&gt;&#xA;&lt;p&gt;或饮食，或坐走。&lt;/p&gt;&#xA;&lt;p&gt;长者先，幼者后。&lt;/p&gt;&#xA;&lt;p&gt;长呼人，即代叫。&lt;/p&gt;&#xA;&lt;p&gt;人不在，己即到。&lt;/p&gt;&#xA;&lt;p&gt;称尊长，勿呼名。&lt;/p&gt;&#xA;&lt;p&gt;对尊长，勿见能。&lt;/p&gt;&#xA;&lt;p&gt;路遇长，疾趋揖。&lt;/p&gt;&#xA;&lt;p&gt;长无言，退恭立。&lt;/p&gt;&#xA;&lt;p&gt;骑下马，乘下车。&lt;/p&gt;&#xA;&lt;p&gt;过犹待，百步余。&lt;/p&gt;&#xA;&lt;p&gt;长者立，幼勿坐。&lt;/p&gt;&#xA;&lt;p&gt;长者坐，命乃坐。&lt;/p&gt;&#xA;&lt;p&gt;尊长前，声要低。&lt;/p&gt;&#xA;&lt;p&gt;低不闻，却非宜。&lt;/p&gt;&#xA;&lt;p&gt;进必趋，退必迟。&lt;/p&gt;&#xA;&lt;p&gt;问起对，视勿移。&lt;/p&gt;&#xA;&lt;p&gt;事诸父，如事父。&lt;/p&gt;&#xA;&lt;p&gt;事诸兄，如事兄。&lt;/p&gt;&#xA;&lt;p&gt;朝起早，夜眠迟。&lt;/p&gt;&#xA;&lt;p&gt;老易至，惜此时。&lt;/p&gt;&#xA;&lt;p&gt;晨必盥，兼漱口。&lt;/p&gt;&#xA;&lt;p&gt;便溺回，辄净手。&lt;/p&gt;&#xA;&lt;p&gt;冠必正，纽必结。&lt;/p&gt;&#xA;&lt;p&gt;袜与履，俱紧切。&lt;/p&gt;&#xA;&lt;p&gt;置冠服，有定位。&lt;/p&gt;&#xA;&lt;p&gt;勿乱顿，致污秽。&lt;/p&gt;&#xA;&lt;p&gt;衣贵洁，不贵华。&lt;/p&gt;&#xA;&lt;p&gt;上循分，下称家。&lt;/p&gt;&#xA;&lt;p&gt;对饮食，勿拣择。&lt;/p&gt;&#xA;&lt;p&gt;食适可，勿过则。&lt;/p&gt;&#xA;&lt;p&gt;年方少，勿饮酒。&lt;/p&gt;&#xA;&lt;p&gt;饮酒醉，最为丑。&lt;/p&gt;&#xA;&lt;p&gt;步从容，立端正。&lt;/p&gt;</description>
    </item>
    <item>
      <title>阿长与山海经</title>
      <link>https://note.lican.site/article/%E9%98%BF%E9%95%BF%E4%B8%8E%E5%B1%B1%E6%B5%B7%E7%BB%8F/</link>
      <pubDate>Mon, 01 Jul 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E9%98%BF%E9%95%BF%E4%B8%8E%E5%B1%B1%E6%B5%B7%E7%BB%8F/</guid>
      <description>&lt;p&gt;阿长(?～1899)，鲁迅称她为长妈妈，浙江绍兴东浦大门楼人。她是鲁迅儿时的保姆。&lt;/p&gt;&#xA;&lt;p&gt;长妈妈的夫家姓余，有一个过继的儿子叫五九，是做裁缝的，她有一个女儿，后来招进了一个女婿。&lt;/p&gt;&#xA;&lt;p&gt;“长妈妈只是许多旧式女人中的一个，做了一辈子的老妈子(乡下叫做‘做妈妈&amp;rsquo;)，平时也不回家去，直到临死。”长妈妈患有羊角风，1899年4月“初六日雨中放舟至大树港看戏，鸿寿堂徽班，长妈妈发病，辰刻身故”。&lt;/p&gt;&#xA;&lt;p&gt;鲁迅对长妈妈怀有深厚的感情，在《朝花夕拾》中，有好几篇文章回忆到与长妈妈有关的往事，其中《阿长与〈山海经〉》是专门回忆和纪念她的。&lt;/p&gt;&#xA;&lt;p&gt;其实，这个来自东浦的长妈妈身材矮小，周家原先的保姆个子高大，按周家工友王鹤照的说法：章福庆的妻子阮氏——“庆太娘”才是真正的长妈妈，只是叫惯了，也把东浦的那位叫做长妈妈。不过，笔者曾特地为此函询周建人夫妇，回答是否定的意见，周作人日记里的“章妈”也是东浦的那位长妈妈死后再雇请的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;原文&#34;&gt;原文&lt;/h2&gt;&#xA;&lt;p&gt;长妈妈，已经说过，是一个一向带领着我的女工，说得阔气一点，就是我的保姆。我的母亲和许多别的人都这样称呼她，似乎略带些客气的意思。只有祖母叫她阿长。我平时叫她“阿妈”，连“长”字也不带;但到憎恶她的时候，——例如知道了谋死我那隐鼠的却是她的时候，就叫她阿长。&lt;/p&gt;&#xA;&lt;p&gt;我们那里没有姓长的;她生得黄胖而矮，“长”也不是形容词。又不是她的名字，记得她自己说过，她的名字是叫作什么姑娘的。什么姑娘，我现在已经忘却了，总之不是长姑娘;也终于不知道她姓什么。记得她也曾告诉过我这个名称的来历：先前的先前，我家有一个女工，身材生得很高大，这就是真阿长。后来她回去了，我那什么姑娘才来补她的缺，然而大家因为叫惯了，没有再改口，于是她从此也就成为长妈妈了。&lt;/p&gt;&#xA;&lt;p&gt;虽然背地里说人长短不是好事情，但倘使要我说句真心话，我可只得说：我实在不大佩服她。最讨厌的是常喜欢切切察察，向人们低声絮说④些什么事。还竖起第二个手指，在空中上下摇动，或者点着对手或自己的鼻尖。我的家里一有些小风波，不知怎的我总疑心和这“切切察察”有些关系。又不许我走动，拔一株草，翻一块石头，就说我顽皮，要告诉我的母亲去了。一到夏天，睡觉时她又伸开两脚两手，在床中间摆成一个“大”字，挤得我没有余地翻身，久睡在一角的席子上，又已经烤得那么热。推她呢，不动;叫她呢，也不闻。&lt;/p&gt;&#xA;&lt;p&gt;“长妈妈生得那么胖，一定很怕热罢?晚上的睡相，怕不见得很好罢?……”&lt;/p&gt;&#xA;&lt;p&gt;母亲听到我多回诉苦之后，曾经这样地问过她。我也知道这意思是要她多给我一些空席。她不开口。但到夜里，我热得醒来的时候，却仍然看见满床摆着一个“大”字，一条臂膊还搁在我的颈子上。我想，这实在是无法可想了。&lt;/p&gt;&#xA;&lt;p&gt;但是她懂得许多规矩;这些规矩，也大概是我所不耐烦的。一年中最高兴的时节，自然要数除夕了。辞岁之岁，从长辈得到压岁钱，红纸包着，放在枕边，只要过一宵，便可以随意使用。睡在枕上，看着红包，想到明天买来的小鼓、刀枪、泥人、糖菩萨……。然而她进来，又将一个福橘放在床头了。&lt;/p&gt;&#xA;&lt;p&gt;“哥儿，你牢牢记住!”她极其郑重地说。“明天是正月初一，清早一睁开眼睛，第一句话就得对我说：‘阿妈，恭喜恭喜!’记得么?你要记着，这是一年的运气的事情。不许说别的话!说过之后，还得吃一点福橘。”她又拿起那橘子来在我的眼前摇了两摇，“那么，一年到头，顺顺流流⑤……。”&lt;/p&gt;&#xA;&lt;p&gt;梦里也记得元旦的，第二天醒得特别早，一醒，就要坐起来。她却立刻伸出臂膊，一把将我按住。我惊异地看她时，只见她惶急地看着我。&lt;/p&gt;&#xA;&lt;p&gt;她又有所要求似的，摇着我的肩。我忽而记得了——&lt;/p&gt;&#xA;&lt;p&gt;“阿妈，恭喜……。”&lt;/p&gt;&#xA;&lt;p&gt;“恭喜恭喜!大家恭喜!真聪明!恭喜恭喜!”她于是十分欢喜似的，笑将起来，同时将一点冰冷的东西，塞在我的嘴里。我大吃一惊之后，也就忽而记得，这就是所谓福橘，元旦辟头⑦的磨难，总算已经受完，可以下床玩耍去了。&lt;/p&gt;&#xA;&lt;p&gt;她教给我的道理还很多，例如说人死了，不该说死掉，必须说“老掉了”;死了人，生了孩子的屋子里，不应该走进去;饭粒落在地上，必须拣起来，最好是吃下去;晒裤子用的竹竿底下，是万不可钻过去的……。此外，现在大抵忘却了，只有元旦的古怪仪式记得最清楚。总之：都是些烦琐之至，至今想起来还觉得非常麻烦的事情。&lt;/p&gt;&#xA;&lt;p&gt;然而我有一时也对她发生过空前的敬意。她常常对我讲“长毛”。她之所谓“长毛” 者，不但洪秀全⑨军，似乎连后来一切土匪强盗都在内，但除却革命党，因为那时还没有。她说得长毛非常可怕，他们的话就听不懂。她说先前长毛进城的时候，我家全都逃到海边去了，只留一个门房和年老的煮饭老妈子看家。后来长毛果然进门来了，那老妈子便叫他们“大王”，——据说对长毛就应该这样叫，——诉说自己的饥饿。长毛笑道：“那么，这东西就给你吃了罢!”将一个圆圆的东西掷了过来，还带着一条小辫子，正是那门房的头。煮饭老妈子从此就骇破了胆，后来一提起，还是立刻面如土色，自己轻轻地拍着胸脯道：“阿呀，骇死我了，骇死我了……。”&lt;/p&gt;&#xA;&lt;p&gt;我那时似乎倒并不怕，因为我觉得这些事和我毫不相干的，我不是一个门房。但她大概也即觉到了，说道：“像你似的小孩子，长毛也要掳的，掳去做小长毛。还有好看的姑娘，也要掳。”&lt;/p&gt;&#xA;&lt;p&gt;“那么，你是不要紧的。”我以为她一定最安全了，既不做门房，又不是小孩子，也生得不好看，况且颈子上还有许多炙疮疤。&lt;/p&gt;&#xA;&lt;p&gt;“那里的话?!”她严肃地说。“我们就没有用么?我们也要被掳去。城外有兵来攻的时候，长毛就叫我们脱下裤子，一排一排地站在城墙上，外面的大炮就放不出来;再要放，就炸了!”&lt;/p&gt;&#xA;&lt;p&gt;这实在是出于我意想之外的，不能不惊异。我一向只以为她满肚子是麻烦的礼节罢了，却不料她还有这样伟大的神力。从此对于她就有了特别的敬意，似乎实在深不可测;夜间的伸开手脚，占领全床，那当然是情有可原的了，倒应该我退让。&lt;/p&gt;&#xA;&lt;p&gt;这种敬意，虽然也逐渐淡薄起来，但完全消失，大概是在知道她谋害了我的隐鼠之后。那时就极严重地诘问，而且当面叫她阿长。我想我又不真做小长毛，不去攻城，也不放炮，更不怕炮炸，我惧惮她什么呢!&lt;/p&gt;&#xA;&lt;p&gt;但当我哀悼隐鼠，给它复仇的时候，一面又在渴慕着绘图的《山海经》了。这渴慕是从一个远房的叔祖⑩惹起来的。他是一个胖胖的，和蔼的老人，爱种一点花木，如珠兰、茉莉之类，还有极其少见的，据说从北边带回去的马缨花。他的太太却正相反，什么也莫名其妙，曾将晒衣服的竹竿搁在珠兰的枝条上，枝折了，还要愤愤地咒骂道：“死尸!”这老人是个寂寞者，因为无人可谈，就很爱和孩子们往来，有时简直称我们为“小友”。在我们聚族而居的宅子里，只有他书多，而且特别。制艺和试帖诗，自然也是有的;但我却只在他的书斋里，看见过陆玑的《毛诗草木鸟兽虫鱼疏》，还有许多名目很生的书籍。我那时最爱看的是 《花镜》，上面有许多图。他说给我听，曾经有过一部绘图的《山海经》，画着人面的兽，九头的蛇，三脚的鸟，生着翅膀的人，没有头而以两乳当作眼睛的怪物，……可惜现在不知道放在那里了。&lt;/p&gt;&#xA;&lt;p&gt;我很愿意看看这样的图画，但不好意思力逼他去寻找，他是很疏懒的。问别人呢，谁也不肯真实地回答我。压岁钱还有几百文，买罢，又没有好机会。有书买的大街离我家远得很，我一年中只能在正月间去玩一趟，那时候，两家书店都紧紧地关着门。&lt;/p&gt;&#xA;&lt;p&gt;玩的时候倒是没有什么的，但一坐下，我就记得绘图的《山海经》。&lt;/p&gt;&#xA;&lt;p&gt;大概是太过于念念不忘了，连阿长也来问《山海经》是怎么一回事。这是我向来没有和她说过的，我知道她并非学者，说了也无益;但既然来问，也就都对她说了。&lt;/p&gt;&#xA;&lt;p&gt;过了十多天，或者一个月罢，我还记得，是她告假回家以后的四五天，她穿着新的蓝布衫回来了，一见面，就将一包书递给我，高兴地说道：&lt;/p&gt;&#xA;&lt;p&gt;“哥儿，有画儿的‘三哼经’，我给你买来了!”&lt;/p&gt;&#xA;&lt;p&gt;我似乎遇着了一个霹雳，全体都震悚起来;赶紧去接过来，打开纸包，是四本小小的书，略略一翻，人面的兽，九头的蛇，……果然都在内。&lt;/p&gt;&#xA;&lt;p&gt;这又使我发生新的敬意了，别人不肯做，或不能做的事，她却能够做成功。她确有伟大的神力。谋害隐鼠的怨恨，从此完全消灭了。&lt;/p&gt;&#xA;&lt;p&gt;这四本书，乃是我最初得到，最为心爱的宝书。&lt;/p&gt;&#xA;&lt;p&gt;书的模样，到现在还在眼前。可是从还在眼前的模样来说，却是一部刻印都十分粗拙的本子。纸张很黄;图象也很坏，甚至于几乎全用直线凑合，连动物的眼睛也都是长方形的。但那是我最为心爱的宝书，看起来，确是人面的兽;九头的蛇;一脚的牛;袋子似的帝江; 没有头而“以乳为目，以脐为口”，还要“执干戚而舞”的刑天。&lt;/p&gt;&#xA;&lt;p&gt;此后我就更其搜集绘图的书，于是有了石印的《尔雅音图》和《毛诗品物图考》，又有了《点石斋丛画》和《诗画舫》。《山海经》也另买了一部石印的，每卷都有图赞，绿色的画，字是红的，比那木刻的精致得多了。这一部直到前年还在，是缩印的郝懿行疏。木刻的却已经记不清是什么时候失掉了。&lt;/p&gt;&#xA;&lt;p&gt;我的保姆，长妈妈即阿长，辞了这人世，大概也有了三十年了罢。我终于不知道她的姓名，她的经历，仅知道有一个过继的儿子，她大约是青年守寡的孤孀。&lt;/p&gt;&#xA;&lt;p&gt;仁厚黑暗的地母呵，愿在你怀里永安她的魂灵!&lt;/p&gt;</description>
    </item>
    <item>
      <title>藤野先生</title>
      <link>https://note.lican.site/article/%E8%97%A4%E9%87%8E%E5%85%88%E7%94%9F/</link>
      <pubDate>Wed, 26 Jun 2024 11:23:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E8%97%A4%E9%87%8E%E5%85%88%E7%94%9F/</guid>
      <description>&lt;p&gt;藤野先生①&lt;/p&gt;&#xA;&lt;p&gt;东京也无非是这样。上野②的樱花烂熳的时节，望去确也像绯红的轻云，但花下也缺不了成群结队的“清国留学生”的速成班③，头顶上盘着大辫子，顶得学生制帽的顶上高高耸起，形成一座富士山④。也有解散辫子，盘得平的，除下帽来，油光可鉴⑤，宛如小姑娘的发髻一般，还要将脖子扭几扭。实在标致⑥极了。&lt;/p&gt;&#xA;&lt;p&gt;中国留学生会馆⑦的门房里有几本书买，有时还值得去一转；倘在上午，里面的几间洋房里倒也还可以坐坐的。但到傍晚，有一间的地板便常不免要咚咚咚地响得震天，兼以满房烟尘斗乱⑧；问问精通时事⑨的人，答道，“那是在学跳舞。”&lt;/p&gt;&#xA;&lt;p&gt;到别的地方去看看，如何呢？&lt;/p&gt;&#xA;&lt;p&gt;我就往仙台⑩的医学专门学校去。从东京出发，不久便到一处驿站，写道：日暮里。不知怎地，我到现在还记得这名目。其次却只记得水户⑪了，这是明的遗民朱舜水⑫先生客死⑬的地方。仙台是一个市镇，并不大；冬天冷得厉害；还没有中国的学生。&lt;/p&gt;&#xA;&lt;p&gt;大概是物以希为贵罢。北京的白菜运往浙江，便用红头绳系住菜根，倒挂在水果店头，尊为“胶菜⑭”；福建野生着的芦荟，一到北京就请进温室，且美其名曰“龙舌兰”。我到仙台也颇受了这样的优待，不但学校不收学费，几个职员还为我的食宿操心。我先是住在监狱旁边一个客店里的，初冬已经颇冷，蚊子却还多，后来用被盖了全身，用衣服包了头脸，只留两个鼻孔出气。在这呼吸不息的地方，蚊子竟无从插嘴，居然睡安稳了。饭食也不坏。但一位先生却以为这客店也包办囚人的饭食，我住在那里不相宜，几次三番，几次三番地说。我虽然觉得客店兼办囚人的饭食和我不相干，然而好意难却，也只得别寻相宜的住处了。于是搬到别一家，离监狱也很远，可惜每天总要喝难以下咽的芋梗汤。&lt;/p&gt;&#xA;&lt;p&gt;从此就看见许多陌生的先生，听到许多新鲜的讲义。解剖学是两个教授分任的。最初是骨学。其时进来的是一个黑瘦的先生，八字须，戴着眼镜，挟着一迭大大小小的书。一将书放在讲台上，便用了缓慢而很有顿挫的声调，向学生介绍自己道：——&lt;/p&gt;&#xA;&lt;p&gt;“我就是叫作藤野严九郎的……。”&lt;/p&gt;&#xA;&lt;p&gt;后面有几个人笑起来了。他接着便讲述解剖学在日本发达的历史，那些大大小小的书，便是从最初到现今关于这一门学问的著作。起初有几本是线装的；还有翻刻中国译本的，他们的翻译和研究新的医学，并不比中国早。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://bkimg.cdn.bcebos.com/pic/2f3295d45a34932ea18bb7fd?x-bce-process=image/format,f_auto/resize,m_lfit,limit_1,w_440&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;课文插图(4张)&lt;/p&gt;&#xA;&lt;p&gt;那坐在后面发笑的是上学年不及格的留级学生，在校已经一年，掌故&lt;/p&gt;&#xA;&lt;p&gt;⑮&lt;/p&gt;&#xA;&lt;p&gt;颇为熟悉的了。他们便给新生讲演每个教授的历史。这藤野先生，据说是穿衣服太模胡了，有时竟会忘记带领结；冬天是一件旧外套，寒颤颤的，有一回上火车去，致使管车的疑心他是扒手，叫车里的客人大家小心些。&lt;/p&gt;&#xA;&lt;p&gt;他们的话大概是真的，我就亲见他有一次上讲堂没有带领结。&lt;/p&gt;&#xA;&lt;p&gt;过了一星期，大约是星期六，他使助手来叫我了。到得研究室，见他坐在人骨和许多单独的头骨中间，——他其时正在研究着头骨，后来有一篇论文在本校的杂志上发表出来。&lt;/p&gt;&#xA;&lt;p&gt;“我的讲义，你能抄下来么？”他问。&lt;/p&gt;&#xA;&lt;p&gt;“可以抄一点。”&lt;/p&gt;&#xA;&lt;p&gt;“拿来我看！”&lt;/p&gt;&#xA;&lt;p&gt;我交出所抄的讲义去，他收下了，第二三天便还我，并且说，此后每一星期要送给他看一回。我拿下来打开看时，很吃了一惊，同时也感到一种不安和感激。原来我的讲义已经从头到末，都用红笔添改过了，不但增加了许多脱漏的地方，连文法的错误，也都一一订正。这样一直继续到教完了他所担任的功课：骨学、血管学、神经学。&lt;/p&gt;&#xA;&lt;p&gt;可惜我那时太不用功，有时也很任性。还记得有一回藤野先生将我叫到他的研究室里去，翻出我那讲义上的一个图来，是下臂的血管，指着，向我和蔼的说道：——&lt;/p&gt;&#xA;&lt;p&gt;“你看，你将这条血管移了一点位置了。——自然，这样一移，的确比较的好看些，然而解剖图不是美术，实物是那么样的，我们没法改换它。现在我给你改好了，以后你要全照着黑板上那样的画。”&lt;/p&gt;&#xA;&lt;p&gt;但是我还不服气，口头答应着，心里却想道：——&lt;/p&gt;&#xA;&lt;p&gt;“图还是我画的不错；至于实在的情形，我心里自然记得的。”&lt;/p&gt;&#xA;&lt;p&gt;学年试验完毕之后，我便到东京玩了一夏天，秋初再回学校，成绩早已发表了，同学一百余人之中，我在中间，不过是没有落第⑯。这回藤野先生所担任的功课，是解剖实习和局部解剖学。&lt;/p&gt;&#xA;&lt;p&gt;解剖实习了大概一星期，他又叫我去了，很高兴地，仍用了极有抑扬的声调对我说道：——&lt;/p&gt;&#xA;&lt;p&gt;“我因为听说中国人是很敬重鬼的，所以很担心，怕你不肯解剖尸体。现在总算放心了，没有这回事。”&lt;/p&gt;&#xA;&lt;p&gt;但他也偶有使我很为难的时候。他听说中国的女人是裹脚的，但不知道详细，所以要问我怎么裹法，足骨变成怎样的畸形，还叹息道，“总要看一看才知道。究竟是怎么一回事呢？”&lt;/p&gt;&#xA;&lt;p&gt;有一天，本级的学生会干事到我寓里来了，要借我的讲义看。我检出来交给他们，却只翻检了一通，并没有带走。但他们一走，邮差就送到一封很厚的信，拆开看时，第一句是：——&lt;/p&gt;&#xA;&lt;p&gt;“你改悔罢！”&lt;/p&gt;&#xA;&lt;p&gt;这是《新约》⑰上的句子罢，但经托尔斯泰⑱新近引用过的。其时正值日俄战争⑲，托老先生便写了一封给俄国和日本的皇帝的信⑳，开首便是这一句。日本报纸上很斥责他的不逊，爱国青年㉑也愤然，然而暗地里却早受了他的影响了。其次的话，大略是说上年解剖学试验的题目，是藤野先生讲义上做了记号，我预先知道的，所以能有这样的成绩。末尾是匿名。&lt;/p&gt;&#xA;&lt;p&gt;我这才回忆到前几天的一件事。因为要开同级会，干事便在黑板上写广告，末一句是“请全数到会勿漏为要”，而且在“漏”字旁边加了一个圈。我当时虽然觉到圈得可笑，但是毫不介意，这回才悟出那字也在讥刺我了，犹言我得了教员漏泄出来的题目。&lt;/p&gt;&#xA;&lt;p&gt;我便将这事告知了藤野先生；有几个和我熟识的同学也很不平，一同去诘责㉒干事托辞检查的无礼，并且要求他们将检查的结果，发表出来。终于这流言消灭了，干事却又竭力运动，要收回那一封匿名信去。结末是我便将这托尔斯泰式的信退还了他们。&lt;/p&gt;&#xA;&lt;p&gt;中国是弱国，所以中国人当然是低能儿，分数在六十分以上，便不是自己的能力了：也无怪他们疑惑。但我接着便有参观枪毙中国人的命运了。第二年添教霉菌学，细菌的形状是全用电影来显示的，一段落已完而还没有到下课的时候，便影几片时事的片子，自然都是日本战胜俄国的情形。但偏有中国人夹在里边：给俄国人做侦探，被日本军捕获，要枪毙了，围着看的也是一群中国人；在讲堂里的还有一个我。&lt;/p&gt;&#xA;&lt;p&gt;“万岁！”他们都拍掌欢呼起来。&lt;/p&gt;&#xA;&lt;p&gt;这种欢呼，是每看一片都有的，但在我，这一声却特别听得刺耳。此后回到中国来，我看见那些闲看枪毙犯人的人们，他们也何尝不酒醉似的喝彩，——呜呼，无法可想！但在那时那地，我的意见却变化了。&lt;/p&gt;&#xA;&lt;p&gt;到第二学年的终结，我便去寻藤野先生，告诉他我将不学医学，并且离开这仙台。他的脸色仿佛有些悲哀，似乎想说话，但竟没有说。&lt;/p&gt;&#xA;&lt;p&gt;“我想去学生物学，先生教给我的学问，也还有用的。”其实我并没有决意要学生物学，因为看得他有些凄然，便说了一个慰安他的谎话。&lt;/p&gt;&#xA;&lt;p&gt;“为医学而教的解剖学之类，怕于生物学也没有什么大帮助。”他叹息说。&lt;/p&gt;&#xA;&lt;p&gt;将走的前几天，他叫我到他家里去，交给我一张照相，后面写着两个字道：“惜别”，还说希望将我的也送他。但我这时适值没有照相了；他便叮嘱我将来照了寄给他，并且时时通信告诉他此后的状况。&lt;/p&gt;&#xA;&lt;p&gt;我离开仙台之后，就多年没有照过相，又因为状况也无聊，说起来无非使他失望，便连信也怕敢写了。经过的年月一多，话更无从说起，所以虽然有时想写信，却又难以下笔，这样的一直到现在，竟没有寄过一封信和一张照片。从他那一面看起来，是一去之后，杳无消息了。&lt;/p&gt;&#xA;&lt;p&gt;但不知怎地，我总还时时记起他，在我所认为我师的之中，他是最使我感激，给我鼓励的一个。有时我常常想：他的对于我的热心的希望，不倦的教诲，小而言之，是为中国，就是希望中国有新的医学；大而言之，是为学术，就是希望新的医学传到中国去。他的性格，在我的眼里和心里是伟大的，虽然他的姓名并不为许多人所知道。&lt;/p&gt;&#xA;&lt;p&gt;他所改正的讲义，我曾经订成三厚本，收藏着的，将作为永久的纪念。不幸七年前迁居的时候，中途毁坏了一口书箱，失去半箱书，恰巧这讲义也遗失在内了。责成运送局去找寻，寂无回信。只有他的照相至今还挂在我北京寓居的东墙上，书桌对面。每当夜间疲倦，正想偷懒时，仰面在灯光中瞥见他黑瘦的面貌，似乎正要说出抑扬顿挫的话来，便使我忽又良心发现，而且增加勇气了，于是点上一枝烟，再继续写些为“正人君子”之流所深恶痛疾的文字&lt;/p&gt;</description>
    </item>
    <item>
      <title>范爱农</title>
      <link>https://note.lican.site/article/%E8%8C%83%E7%88%B1%E5%86%9C/</link>
      <pubDate>Wed, 26 Jun 2024 11:13:58 +0800</pubDate>
      <guid>https://note.lican.site/article/%E8%8C%83%E7%88%B1%E5%86%9C/</guid>
      <description>&lt;p&gt;范爱农&lt;/p&gt;&#xA;&lt;p&gt;在东京的客店里，我们大抵一起来就看报。学生所看的多是《朝日新闻》和《读卖新闻》2，专爱打听社会上琐事的就看《二六新闻》。一天早晨，辟头就看见一条从中国来的电报，大概是：&lt;/p&gt;&#xA;&lt;p&gt;“安徽巡抚3恩铭被Jo Shiki Rin刺杀，刺客就擒。”&lt;/p&gt;&#xA;&lt;p&gt;大家一怔之后，便容光焕发地互相告语，并且研究这刺客是谁，汉字是怎样三个字。但只要是绍兴人，又不专看教科书的，却早已明白了。这是徐锡麟4，他留学回国之后，在做安徽候补道5，办着巡警事物，正合于刺杀巡抚的地位。&lt;/p&gt;&#xA;&lt;p&gt;大家接着就预测他将被极刑，家族将被连累。不久，秋瑾6姑娘在绍兴被杀的消息也传来了，徐锡麟是被挖了心，给恩铭的亲兵炒食净尽。人心很愤怒。有几个人便秘密地开一个会，筹集川资；这时用得着日本浪人7了，撕乌贼鱼下酒，慷慨一通之后，他便登程去接徐伯荪的家属去。&lt;/p&gt;&#xA;&lt;p&gt;照例还有一个同乡会，吊烈士，骂满洲；此后便有人主张打电报到北京，痛斥满政府的无人道。会众即刻分成两派：一派要发电，一派不要发。我是主张发电的，但当我说出之后，即有一种钝滞的声音跟着起来：&lt;/p&gt;&#xA;&lt;p&gt;“杀的杀掉了，死的死掉了，还发什么屁电报呢。”&lt;/p&gt;&#xA;&lt;p&gt;这是一个高大身材，长头发，眼球白多黑少的人，看人总像在渺视。他蹲在席子上，我发言大抵就反对；我早觉得奇怪，注意着他的了，到这时才打听别人：说这话的是谁呢，有那么冷？认识的人告诉我说：他叫范爱农，是徐伯荪的学生。&lt;/p&gt;&#xA;&lt;p&gt;我非常愤怒了，觉得他简直不是人，自己的先生被杀了，连打一个电报还害怕，于是便坚执地主张要发电，同他争起来。结果是主张发电的居多数，他屈服了。其次要推出人来拟电稿。&lt;/p&gt;&#xA;&lt;p&gt;“何必推举呢？自然是主张发电的人罗——。”他说。&lt;/p&gt;&#xA;&lt;p&gt;我觉得他的话又在针对我，无理倒也并非无理的。但我便主张这一篇悲壮的文章必须深知烈士生平的人做，因为他比别人关系更密切，心里更悲愤，做出来就一定更动人。于是又争起来。结果是他不做，我也不做，不知谁承认做去了；其次是大家走散，只留下一个拟稿的和一两个干事，等候做好之后去拍发。&lt;/p&gt;&#xA;&lt;p&gt;从此我总觉得这范爱农离奇，而且很可恶。天下可恶的人，当初以为是满人，这时才知道还在其次；第一倒是范爱农。中国不革命则已，要革命，首先就必须将范爱农除去。&lt;/p&gt;&#xA;&lt;p&gt;然而这意见后来似乎逐渐淡薄，到底忘却了，我们从此也没有再见面。直到革命的前一年，我在故乡做教员，大概是春末时候罢，忽然在熟人的客座上看见了一个人，互相熟视了不过两三秒钟，我们便同时说：——&lt;/p&gt;&#xA;&lt;p&gt;“哦哦，你是范爱农！”&lt;/p&gt;&#xA;&lt;p&gt;“哦哦，你是鲁迅！”&lt;/p&gt;&#xA;&lt;p&gt;不知怎地我们便都笑了起来，是互相的嘲笑和悲哀。他眼睛还是那样，然而奇怪，只这几年，头上却有了白发了，但也许本来就有，我先前没有留心到。他穿着很旧的布马褂，破布鞋，显得很寒素。谈起自己的经历来，他说他后来没有了学费，不能再留学，便回来了。回到故乡之后，又受着轻蔑，排斥，迫害，几乎无地可容。现在是躲在乡下，教着几个小学生糊口。但因为有时觉得很气闷，所以也乘了航船进城来。&lt;/p&gt;&#xA;&lt;p&gt;他又告诉我现在爱喝酒，于是我们便喝酒。从此他每一进城，必定来访我，非常相熟了。我们醉后常谈些愚不可及的疯话，连母亲偶然听到了也发笑。一天我忽而记起在东京开同乡会时的旧事，便问他：——&lt;/p&gt;&#xA;&lt;p&gt;“那一天你专门反对我，而且故意似的，究竟是什么缘故呢？”&lt;/p&gt;&#xA;&lt;p&gt;“你还不知道？我一向就讨厌你的，——不但我，我们。”&lt;/p&gt;&#xA;&lt;p&gt;“你那时之前，早知道我是谁么？”&lt;/p&gt;&#xA;&lt;p&gt;“怎么不知道。我们到横滨8，来接的不就是子英9和你么？你看不起我们，摇摇头，你自己还记得么？”&lt;/p&gt;&#xA;&lt;p&gt;我略略一想，记得的，虽然是七八年前的事。那时是子英来约我的，说到横滨去接新来留学的同乡。汽船一到，看见一大堆，大概一共有十多人，一上岸便将行李放到税关上去候查检，关吏在衣箱中翻来翻去，忽然翻出一双绣花的弓鞋来，便放下公事，拿着仔细地看。我很不满，心里想，这些鸟男人，怎么带这东西来呢。自己不注意，那时也许就摇了摇头。检验完毕，在客店小坐之后，即须上火车。不料这一群读书人又在客车上让起坐位来了，甲要乙坐在这位子，乙要丙去坐，做揖未终，火车已开，车身一摇，即刻跌倒了三四个。我那时也很不满，暗地里想：连火车上的坐位，他们也要分出尊卑来……。自己不注意，也许又摇了摇头。然而那群雍容揖让的人物中就有范爱农，却直到这一天才想到。岂但他呢，说起来也惭愧，这一群里，还有后来在安徽战死的陈伯平10烈士，被害的马宗汉11烈士；被囚在黑狱里，到革命后才见天日而身上永带着匪刑的伤痕的也还有一两人。而我都茫无所知，摇着头将他们一并运上东京了。徐伯荪虽然和他们同船来，却不在这车上，因为他在神户12就和他的夫人坐车走了陆路了。&lt;/p&gt;&#xA;&lt;p&gt;我想我那时摇头大约有两回，他们看见的不知道是那一回。让坐时喧闹，检查时幽静，一定是在税关上的那一回了，试问爱农，果然是的。&lt;/p&gt;&#xA;&lt;p&gt;“我真不懂你们带这东西做什么？是谁的？”&lt;/p&gt;&#xA;&lt;p&gt;“还不是我们师母的？”他瞪着他多白的眼。&lt;/p&gt;&#xA;&lt;p&gt;“到东京就要假装大脚，又何必带这东西呢？”&lt;/p&gt;&#xA;&lt;p&gt;“谁知道呢？你问她去。”&lt;/p&gt;&#xA;&lt;p&gt;到冬初，我们的景况更拮据了，然而还喝酒，讲笑话。忽然是武昌起义13，接着是绍兴光复14。第二天爱农就上城来，戴着农夫常用的毡帽，那笑容是从来没有见过的。&lt;/p&gt;&#xA;&lt;p&gt;“老迅，我们今天不喝酒了。我要去看看光复的绍兴。我们同去。”&lt;/p&gt;&#xA;&lt;p&gt;我们便到街上去走了一通，满眼是白旗。然而貌虽如此，内骨子是依旧的，因为还是几个旧乡绅所组织的军政府，什么铁路股东是行政司长，钱店掌柜是军械司长……。这军政府也到底不长久，几个少年一嚷，王金发15带兵从杭州进来了，但即使不嚷或者也会来。他进来以后，也就被许多闲汉和新进的革命党所包围，大做王都督16。在衙门里的人物，穿布衣来的，不上十天也大概换上皮袍子了，天气还并不冷。&lt;/p&gt;&#xA;&lt;p&gt;我被摆在师范学校校长的饭碗旁边，王都督给了我校款二百元。爱农做监学，还是那件布袍子，但不大喝酒了，也很少有工夫谈闲天。他办事，兼教书，实在勤快得可以。&lt;/p&gt;&#xA;&lt;p&gt;“情形还是不行，王金发他们。”一个去年听过我的讲义的少年来访我，慷慨地说，“我们要办一种报17来监督他们。不过发起人要借用先生的名字。还有一个是子英先生，一个是德清18先生。为社会，我们知道你决不推却的。”&lt;/p&gt;&#xA;&lt;p&gt;我答应他了。两天后便看见出报的传单，发起人诚然是三个。五天后便见报，开首便骂军政府和那里面的人员；此后是骂都督，都督的亲戚、同乡、姨太太……。&lt;/p&gt;&#xA;&lt;p&gt;这样地骂了十多天，就有一种消息传到我的家里来，说都督因为你们诈取了他的钱，还骂他，要派人用手枪来打死你们了。&lt;/p&gt;&#xA;&lt;p&gt;别人倒还不打紧，第一个着急的是我的母亲，叮嘱我不要再出去。但我还是照常走，并且说明，王金发是不来打死我们的，他虽然绿林大学19出身，而杀人却不很轻易。况且我拿的是校款，这一点他还能明白的，不过说说罢了。&lt;/p&gt;&#xA;&lt;p&gt;果然没有来杀。写信去要经费，又取了二百元。但仿佛有些怒意，同时传令道：再来要，没有了！&lt;/p&gt;&#xA;&lt;p&gt;不过爱农得到了一种新消息，却使我很为难。原来所谓“诈取”者，并非指学校经费而言，是指另有送给报馆的一笔款。报纸上骂了几天之后，王金发便叫人送去了五百元。于是乎我们的少年们便开起会议来，第一个问题是：收不收？决议曰：收。第二个问题是：收了之后骂不骂？决议曰：骂。理由是：收钱之后，他是股东；股东不好，自然要骂。&lt;/p&gt;&#xA;&lt;p&gt;我即刻到报馆去问这事的真假。都是真的。略说了几句不该收他钱的话，一个名为会计的便不高兴了，质问我道：&lt;/p&gt;&#xA;&lt;p&gt;“报馆为什么不收股本？”&lt;/p&gt;&#xA;&lt;p&gt;“这不是股本……”&lt;/p&gt;&#xA;&lt;p&gt;“不是股本是什么？”&lt;/p&gt;&#xA;&lt;p&gt;我就不再说下去了，这一点世故是早已知道的，倘我再说出连累我们的话来，他就会面斥我太爱惜不值钱的生命，不肯为社会牺牲，或者明天在报上就可以看见我怎样怕死发抖的记载。&lt;/p&gt;&#xA;&lt;p&gt;然而事情很凑巧，季茀20写信来催我往南京了。爱农也很赞成，但颇凄凉，说：——&lt;/p&gt;&#xA;&lt;p&gt;“这里又是那样，住不得。你快去罢……”&lt;/p&gt;&#xA;&lt;p&gt;我懂得他无声的话，决计往南京。先到都督府去辞职，自然照准，派来了一个拖鼻涕的接收员，我交出账目和余款一角又两铜元，不是校长了。后任是孔教会21会长傅力臣。&lt;/p&gt;&#xA;&lt;p&gt;报馆案22是我到南京后两三个星期了结的，被一群兵们捣毁。子英在乡下，没有事；德清适值在城里，大腿上被刺了一尖刀。他大怒了。自然，这是很有些痛的，怪他不得。他大怒之后，脱下衣服，照了一张照片，以显示一寸来宽的刀伤，并且做一篇文章叙述情形，向各处分送，宣传军政府的横暴。我想，这种照片现在是大约未必还有人收藏着了，尺寸太小，刀伤缩小到几乎等于无，如果不加说明，看见的人一定以为是带些疯气的风流人物的裸体照片，倘遇见孙传芳23大帅，还怕要被禁止的。&lt;/p&gt;&#xA;&lt;p&gt;我从南京移到北京的时候，爱农的学监也被孔教会会长的校长设法去掉了。他又成了革命前的爱农。我想为他在北京寻一点小事做，这是他非常希望的，然而没有机会。他后来便到一个熟人的家里去寄食，也时时给我信，景况愈困穷，言辞也愈凄苦。终于又非走出这熟人的家不可，便在各处飘浮。不久，忽然从同乡那里得到一个消息，说他已经掉在水里，淹死了。&lt;/p&gt;&#xA;&lt;p&gt;我疑心他是自杀。因为他是凫水的好手，不容易淹死的。&lt;/p&gt;&#xA;&lt;p&gt;夜间独坐在会馆里，十分悲凉，又疑心这消息并不确，但无端又觉得这是极其可靠的，虽然并无证据。一点法子都没有，只做了四首诗24，后来曾在一种日报上发表，现在是将要忘记完了。只记得一首里的六句，起首四句是：“把酒论天下，先生小酒人，大圜犹酩酊，微醉合沉沦。”中间忘掉两句，末了是“旧朋云散尽，余亦等轻尘。”&lt;/p&gt;&#xA;&lt;p&gt;后来我回故乡去，才知道一些较为详细的事。爱农先是什么事也没得做，因为大家讨厌他。他很困难，但还喝酒，是朋友请他的。他已经很少和人们来往，常见的只剩下几个后来认识的较为年青的人了，然而他们似乎也不愿意多听他的牢骚，以为不如讲笑话有趣。&lt;/p&gt;&#xA;&lt;p&gt;“也许明天就收到一个电报，拆开来一看，是鲁迅来叫我的。”他时常这样说。&lt;/p&gt;&#xA;&lt;p&gt;一天，几个新的朋友约他坐船去看戏，回来已过夜半，又是大风雨，他醉着，却偏要到船舷上去小解。大家劝阻他，也不听，自己说是不会掉下去的。但他掉下去了，虽然能凫水，却从此不起来。&lt;/p&gt;&#xA;&lt;p&gt;第二天打捞尸体，是在菱荡里找到的，直立着。&lt;/p&gt;&#xA;&lt;p&gt;我至今不明白他究竟是失足还是自杀25。&lt;/p&gt;&#xA;&lt;p&gt;他死后一无所有，遗下一个幼女和他的夫人。有几个人想集一点钱作他女孩将来的学费的基金，因为一经提议，即有族人来争这笔款的保管权，——其实还没有这笔款，大家觉得无聊，便无形消散了。&lt;/p&gt;&#xA;&lt;p&gt;现在不知他唯一的女儿景况如何？倘在上学，中学已该毕业了罢&lt;/p&gt;</description>
    </item>
    <item>
      <title>琐记</title>
      <link>https://note.lican.site/article/%E7%90%90%E8%AE%B0/</link>
      <pubDate>Tue, 25 Jun 2024 09:33:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E7%90%90%E8%AE%B0/</guid>
      <description>&lt;p&gt;作者——&lt;a href=&#34;https://baike.baidu.com/item/%E9%B2%81%E8%BF%85/36231?fromModule=lemma_inlink&#34;&gt;鲁迅&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://baike.baidu.com/item/%E8%A1%8D%E5%A4%AA%E5%A4%AA/5891642?fromModule=lemma_inlink&#34;&gt;衍太太&lt;/a&gt;现在是早已经做了祖母，也许竟做了&lt;a href=&#34;https://baike.baidu.com/item/%E6%9B%BE%E7%A5%96%E6%AF%8D/10830168?fromModule=lemma_inlink&#34;&gt;曾祖母&lt;/a&gt;了；那时却还年青，只有一个儿子比我大三四岁。她对自己的儿子虽然狠，对别家的孩子却好的，无论闹出什么乱子来，也决不去告诉各人的父母，因此我们就最愿意在她家里或她家的附近玩。&lt;/p&gt;&#xA;&lt;p&gt;举一个例说罢，冬天，&lt;a href=&#34;https://baike.baidu.com/item/%E6%B0%B4%E7%BC%B8/4511290?fromModule=lemma_inlink&#34;&gt;水缸&lt;/a&gt;里结了薄冰的时候，我们大清早起一看见，便吃冰。有一回给沈四太太看到了，大声说道：“莫吃呀，要肚子疼的呢！”这声音又给我母亲听到了，跑出来我们都挨了一顿骂，并且有大半天不准玩。我们推论祸首，认定是沈四太太，于是提起她就不用尊称了，给她另外起了一个绰号，叫作“肚子疼”。&lt;/p&gt;&#xA;&lt;p&gt;衍太太却决不如此。假如她看见我们吃冰，一定和蔼地笑着说，“好，再吃一块。我记着，看谁吃的多。”&lt;/p&gt;&#xA;&lt;p&gt;但我对于她也有不满足的地方。一回是很早的时候了，我还很小，偶然走进她家去，她正在和她的男人看书。我走近去，她便将书塞在我的眼前道，“你看，你知道这是什么？”我看那书上画着房屋，有两个人光着身子仿佛在打架，但又不很像。正迟疑间，他们便大笑起来了。这使我很不高兴，似乎受了一个极大的侮辱，不到那里去大约有十多天。一回是我已经十多岁了，和几个孩子比赛打&lt;a href=&#34;https://baike.baidu.com/item/%E6%97%8B%E5%AD%90/1856235?fromModule=lemma_inlink&#34;&gt;旋子&lt;/a&gt;，看谁旋得多。她就从旁计着数，说道，“好，八十二个了！再旋一个，八十三！好，八十四！……”但正在旋着的阿祥，忽然跌倒了，阿祥的婶母也恰恰走进来。她便接着说道，“你看，不是跌了么？不听我的话。我叫你不要旋，不要旋……”&lt;/p&gt;&#xA;&lt;p&gt;虽然如此，孩子们总还喜欢到她那里去。假如头上碰得肿了一大块的时候，去寻母亲去罢，好的是骂一通，再给擦一点药；坏的是没有药擦，还添几个栗凿和一通骂。衍太太却决不埋怨，立刻给你用&lt;a href=&#34;https://baike.baidu.com/item/%E7%83%A7%E9%85%92/15882790?fromModule=lemma_inlink&#34;&gt;烧酒&lt;/a&gt;调了水粉，搽在疙瘩上，说这不但止痛，将来还没有&lt;a href=&#34;https://baike.baidu.com/item/%E7%98%A2%E7%97%95/3100468?fromModule=lemma_inlink&#34;&gt;瘢痕&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;父亲故去之后，我也还常到她家里去，不过已不是和孩子们玩耍了，却是和衍太太或她的男人谈闲天。我其实觉得很有许多东西要买，看的和吃的，只是没有钱。有一天谈到这里，她便说道，“母亲的钱，你拿来用就是了，还不就是你的么？”我说母亲没有钱，她就说可以拿首饰去变卖；我说没有首饰，她却道，“也许你没有留心。到大厨的抽屉里，角角落落去寻去，总可以寻出一点珠子这类东西……。”&lt;/p&gt;&#xA;&lt;p&gt;这些话我听去似乎很异样，便又不到她那里去了，但有时又真想去打开大厨，细细地寻一寻。大约此后不到一月，就听到一种流言，说我已经偷了家里的东西去变卖了，这实在使我觉得有如掉在冷水里。流言的来源，我是明白的，倘是现在，只要有地方发表，我总要骂出流言家的狐狸尾巴来，但那时太年轻，一遇流言，便连自己也仿佛觉得真是犯了罪，怕遇见人们的眼睛，怕受到母亲的爱抚。&lt;/p&gt;&#xA;&lt;p&gt;好。那么，走罢！&lt;/p&gt;&#xA;&lt;p&gt;但是，那里去呢？S城人的脸早经看熟，如此而已，连心肝也似乎有些了然。总得寻别一类人们去，去寻为S城人所诟病的人们，无论其为畜生或魔鬼。那时为全城所笑骂的是一个开得不久的学校，叫作&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%AD%E8%A5%BF%E5%AD%A6%E5%A0%82/2604806?fromModule=lemma_inlink&#34;&gt;中西学堂&lt;/a&gt;，汉文之外，又教些洋文和算学。然而已经成为众矢之的了；熟读圣贤书的秀才们，还集了“四书”的句子，做一篇八股来嘲诮它，这名文便即传遍了全城，人人当作有趣的话柄。我只记得那“起讲”的开头是：&lt;/p&gt;&#xA;&lt;p&gt;“徐子以告夷子曰：吾闻用夏变夷者，未闻变于夷者也。今也不然：&lt;/p&gt;&#xA;&lt;p&gt;为舌之音，闻其声，皆雅言也……”&lt;/p&gt;&#xA;&lt;p&gt;以后可忘却了，大概也和现今的国粹保存大家的议论差不多。但我对于这中西学堂，却也不满足，因为那里面只教汉文、算学、英文和&lt;a href=&#34;https://baike.baidu.com/item/%E6%B3%95%E6%96%87/3078347?fromModule=lemma_inlink&#34;&gt;法文&lt;/a&gt;。功课较为别致的，还有杭州的&lt;a href=&#34;https://baike.baidu.com/item/%E6%B1%82%E6%98%AF%E4%B9%A6%E9%99%A2/7676026?fromModule=lemma_inlink&#34;&gt;求是书院&lt;/a&gt;，然而学费贵。&lt;/p&gt;&#xA;&lt;p&gt;无须学费的学校在南京，自然只好往南京去。第一个进去的学校，目下不知道称为什么了，光复以后，似乎有一时称为雷电学堂，很像《&lt;a href=&#34;https://baike.baidu.com/item/%E5%B0%81%E7%A5%9E%E6%A6%9C/14585510?fromModule=lemma_inlink&#34;&gt;封神榜&lt;/a&gt;》上“太极阵”、“混元阵”一类的名目。总之，一进&lt;a href=&#34;https://baike.baidu.com/item/%E4%BB%AA%E5%87%A4%E9%97%A8/1445302?fromModule=lemma_inlink&#34;&gt;仪凤门&lt;/a&gt;，便可以看见它那二十丈高的桅杆和不知多高的烟通。功课也简单，一星期中，几乎是整天是英文：“It is a cat.”“Is it a rat?”一整天是读汉文：“君子曰，&lt;a href=&#34;https://baike.baidu.com/item/%E9%A2%8D%E8%80%83%E5%8F%94/709511?fromModule=lemma_inlink&#34;&gt;颍考叔&lt;/a&gt;可谓纯孝也已矣，爱其母，施及庄公。”一整天是做汉文：《知己知彼百战百胜论》，《颍考叔论》，《云从龙风从虎论》，《咬得菜根则百事可做论》。&lt;/p&gt;&#xA;&lt;p&gt;初进去当然只能做三班生，卧室里是一桌一凳一床，床板只有两块。头二班学生就不同了，二桌二凳或三凳一床，床板多至三块。不但上讲堂时挟着一堆厚而且大的洋书，气昂昂地走着，决非只有一本“泼赖妈”和四本《&lt;a href=&#34;https://baike.baidu.com/item/%E5%B7%A6%E4%BC%A0/371757?fromModule=lemma_inlink&#34;&gt;左传&lt;/a&gt;》的三班生所敢正视；便是空着手，也一定将肘弯撑开，象一只螃蟹，低一班的在后面总不能走出他之前。这一种螃蟹式的名公巨卿，现在都阔别得很久了，前四五年，竟在教育部的破脚&lt;a href=&#34;https://baike.baidu.com/item/%E8%BA%BA%E6%A4%85/10688798?fromModule=lemma_inlink&#34;&gt;躺椅&lt;/a&gt;上，发现了这姿势，然而这位老爷却并非雷电学堂出身的，可见螃蟹态度，在中国也颇普遍。&lt;/p&gt;&#xA;&lt;p&gt;可爱的是桅杆。但并非如“东邻”的“&lt;a href=&#34;https://baike.baidu.com/item/%E6%94%AF%E9%82%A3/1056357?fromModule=lemma_inlink&#34;&gt;支那&lt;/a&gt;通”所说，因为它“挺然翘然”，又是什么的象征。乃是因为它高，&lt;a href=&#34;https://baike.baidu.com/item/%E4%B9%8C%E9%B8%A6/430?fromModule=lemma_inlink&#34;&gt;乌鸦&lt;/a&gt;&lt;a href=&#34;https://baike.baidu.com/item/%E5%96%9C%E9%B9%8A/528254?fromModule=lemma_inlink&#34;&gt;喜鹊&lt;/a&gt;，都只能停在它的半途的&lt;a href=&#34;https://baike.baidu.com/item/%E6%9C%A8%E7%9B%98/4506365?fromModule=lemma_inlink&#34;&gt;木盘&lt;/a&gt;上。人如果爬到顶，便可以近看狮子山，远眺莫愁湖，——但究竟是否真可以眺得那么远，我现在可委实有点记不清楚了。而且不危险，下面张着网，即使跌下来，也不过如一条小鱼落在网子里；况且自从&lt;a href=&#34;https://baike.baidu.com/item/%E5%BC%A0%E7%BD%91/5659022?fromModule=lemma_inlink&#34;&gt;张网&lt;/a&gt;以后，听说也还没有人曾经跌下来。&lt;/p&gt;&#xA;&lt;p&gt;原先还有一个池，给学生学游泳的，这里面却淹死了两个年幼的学生。当我进去时，早填平了，不但填平，上面还造了一所小小的关帝庙。庙旁是一座焚化&lt;a href=&#34;https://baike.baidu.com/item/%E5%AD%97%E7%BA%B8/7623663?fromModule=lemma_inlink&#34;&gt;字纸&lt;/a&gt;的砖炉，&lt;a href=&#34;https://baike.baidu.com/item/%E7%82%89%E5%8F%A3/56062427?fromModule=lemma_inlink&#34;&gt;炉口&lt;/a&gt;上方横写着四个大字道：“&lt;a href=&#34;https://baike.baidu.com/item/%E6%95%AC%E6%83%9C%E5%AD%97%E7%BA%B8/6898914?fromModule=lemma_inlink&#34;&gt;敬惜字纸&lt;/a&gt;”。只可惜那两个淹死鬼失了池子，难讨替代，总在左近徘徊，虽然已有“伏魔大帝关圣帝君”镇压着。办学的人大概是好心肠的，所以每年七月十五，总请一群和尚到雨天操场来放焰口，一个红鼻而胖的大和尚戴上&lt;a href=&#34;https://baike.baidu.com/item/%E6%AF%97%E5%8D%A2%E5%B8%BD/5040624?fromModule=lemma_inlink&#34;&gt;毗卢帽&lt;/a&gt;，捏诀，念咒：“回资啰，普弥耶吽！唵耶吽！唵！耶！吽！！！”&lt;/p&gt;&#xA;&lt;p&gt;我的前辈同学被关圣帝君镇压了一整年，就只在这时候得到一点好处，——虽然我并不深知是怎样的好处。所以当这些时，我每每想：做学生总得自己小心些。&lt;/p&gt;&#xA;&lt;p&gt;总觉得不大合适，可是无法形容出这不合适来。现在是发现了大致相近的字眼了，“乌烟瘴气”，庶几乎其可也。只得走开。近来是单是走开也就不容易，“正人君子”者流会说你骂人骂到聘书，或者是发“名士”脾气，给你几句正经的&lt;a href=&#34;https://baike.baidu.com/item/%E4%BF%8F%E7%9A%AE%E8%AF%9D/2030916?fromModule=lemma_inlink&#34;&gt;俏皮话&lt;/a&gt;。不过那时还不打紧，学生所得的津贴，第一年不过二两银子，最初三个月的试习期内是零用五百文。于是毫无问题，去考矿路学堂去了，也许是矿路学堂，已经有些记不真，文凭又不在手头，更无从查考。试验并不难，录取的。&lt;/p&gt;&#xA;&lt;p&gt;这回不是It is a cat了，是Der Mann, Die Weib,Das Kind。汉文仍旧是“颍考叔可谓纯孝也已矣”，但外加《&lt;a href=&#34;https://baike.baidu.com/item/%E5%B0%8F%E5%AD%A6%E9%9B%86%E6%B3%A8/5625227?fromModule=lemma_inlink&#34;&gt;小学集注&lt;/a&gt;》。论文题目也小有不同，譬如《工欲善其事必先利其器论》，是先前没有做过的。&lt;/p&gt;&#xA;&lt;p&gt;此外还有所谓&lt;a href=&#34;https://baike.baidu.com/item/%E6%A0%BC%E8%87%B4/3399917?fromModule=lemma_inlink&#34;&gt;格致&lt;/a&gt;、地学、&lt;a href=&#34;https://baike.baidu.com/item/%E9%87%91%E7%9F%B3%E5%AD%A6/1131073?fromModule=lemma_inlink&#34;&gt;金石学&lt;/a&gt;、……都非常新鲜。但是还得声明：后两项，就是现在之所谓&lt;a href=&#34;https://baike.baidu.com/item/%E5%9C%B0%E8%B4%A8%E5%AD%A6/647909?fromModule=lemma_inlink&#34;&gt;地质学&lt;/a&gt;和&lt;a href=&#34;https://baike.baidu.com/item/%E7%9F%BF%E7%89%A9%E5%AD%A6/1002864?fromModule=lemma_inlink&#34;&gt;矿物学&lt;/a&gt;，并非讲舆地和钟鼎碑版的。只是画铁轨&lt;a href=&#34;https://baike.baidu.com/item/%E6%A8%AA%E6%96%AD%E9%9D%A2%E5%9B%BE/8184722?fromModule=lemma_inlink&#34;&gt;横断面图&lt;/a&gt;却有些麻烦，平行线尤其讨厌。但第二年的总办是一个新党，他坐在马车上的时候大抵看着《&lt;a href=&#34;https://baike.baidu.com/item/%E6%97%B6%E5%8A%A1%E6%8A%A5/1703160?fromModule=lemma_inlink&#34;&gt;时务报&lt;/a&gt;》，考汉文也自己出题目，和教员出的很不同。有一次是《华盛顿论》，汉文教员反而惴惴地来问我们道：“华盛顿是什么东西呀？……”&lt;/p&gt;&#xA;&lt;p&gt;看新书的风气便流行起来，我也知道了中国有一部书叫《&lt;a href=&#34;https://baike.baidu.com/item/%E5%A4%A9%E6%BC%94%E8%AE%BA/4331?fromModule=lemma_inlink&#34;&gt;天演论&lt;/a&gt;》。星期日跑到城南去买了来，白纸&lt;a href=&#34;https://baike.baidu.com/item/%E7%9F%B3%E5%8D%B0/17906?fromModule=lemma_inlink&#34;&gt;石印&lt;/a&gt;的一厚本，价五百文正。翻开一看，是写得很好的字，开首便道：——&lt;/p&gt;&#xA;&lt;p&gt;“赫胥黎独处一室之中，在英伦之南，背山而面野，槛外诸境，历历如在机下。乃悬想二千年前，当罗马大将恺撒未到时，此间有何景物？惟有天造草昧……”&lt;/p&gt;&#xA;&lt;p&gt;哦，原来世界上竟还有一个赫胥黎坐在书房里那么想，而且想得那么新鲜？一口气读下去，“物竞”“天择”也出来了，&lt;a href=&#34;https://baike.baidu.com/item/%E8%8B%8F%E6%A0%BC%E6%8B%89%E5%BA%95/12690?fromModule=lemma_inlink&#34;&gt;苏格拉底&lt;/a&gt;、&lt;a href=&#34;https://baike.baidu.com/item/%E6%9F%8F%E6%8B%89%E5%9B%BE/85471?fromModule=lemma_inlink&#34;&gt;柏拉图&lt;/a&gt;也出来了，斯多葛也出来了。学堂里又设立了一个阅报处，《&lt;a href=&#34;https://baike.baidu.com/item/%E6%97%B6%E5%8A%A1%E6%8A%A5/1703160?fromModule=lemma_inlink&#34;&gt;时务报&lt;/a&gt;》不待言，还有《译学汇编》，那书面上的张廉卿一流的四个字，就蓝得很可爱。&lt;/p&gt;&#xA;&lt;p&gt;“你这孩子有点不对了，拿这篇文章去看去，抄下来去看去。”一位本家的老辈严肃地对我说，而且递过一张报纸来。接来看时，“臣&lt;a href=&#34;https://baike.baidu.com/item/%E8%AE%B8%E5%BA%94%E9%AA%99/7027782?fromModule=lemma_inlink&#34;&gt;许应骙&lt;/a&gt;跪奏……”，那文章现在是一句也不记得了，总之是参&lt;a href=&#34;https://baike.baidu.com/item/%E5%BA%B7%E6%9C%89%E4%B8%BA/113297?fromModule=lemma_inlink&#34;&gt;康有为&lt;/a&gt;变法的，也不记得可曾抄了没有。&lt;/p&gt;&#xA;&lt;p&gt;仍然自己不觉得有什么“不对”，一有闲空，就照例地吃侉饼、&lt;a href=&#34;https://baike.baidu.com/item/%E8%8A%B1%E7%94%9F%E7%B1%B3/7320625?fromModule=lemma_inlink&#34;&gt;花生米&lt;/a&gt;、&lt;a href=&#34;https://baike.baidu.com/item/%E8%BE%A3%E6%A4%92/48496?fromModule=lemma_inlink&#34;&gt;辣椒&lt;/a&gt;，看《&lt;a href=&#34;https://baike.baidu.com/item/%E5%A4%A9%E6%BC%94%E8%AE%BA/4331?fromModule=lemma_inlink&#34;&gt;天演论&lt;/a&gt;》。&lt;/p&gt;&#xA;&lt;p&gt;但我们也曾经有过一个很不平安的时期。那是第二年，听说学校就要裁撤了。这也无怪，这学堂的设立，原是因为&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%A4%E6%B1%9F%E6%80%BB%E7%9D%A3/2333074?fromModule=lemma_inlink&#34;&gt;两江总督&lt;/a&gt;（大约是&lt;a href=&#34;https://baike.baidu.com/item/%E5%88%98%E5%9D%A4%E4%B8%80/1835467?fromModule=lemma_inlink&#34;&gt;刘坤一&lt;/a&gt;罢）听到青龙山的煤矿出息好，所以开手的。待到开学时，煤矿那面却已将原先的技师辞退，换了一个不甚了然的人了。理由是：一、先前的技师薪水太贵；二、他们觉得开煤矿并不难。于是不到一年，就连煤在那里也不甚了然起来，终于是所得的煤，只能供烧那两架抽水机之用，就是抽了水掘煤，掘出煤来抽水，结一笔出入两清的账。既然开矿无利，矿路学堂自然也就无须乎开了，但是不知怎的，却又并不裁撤。到第三年我们下矿洞去看的时候，情形实在颇凄凉，抽水机当然还在转动，矿洞里积水却有半尺深，上面也点滴而下，几个矿工便在这里面鬼一般工作着。&lt;/p&gt;&#xA;&lt;p&gt;毕业，自然大家都盼望的，但一到毕业，却又有些爽然若失。爬了几次桅，不消说不配做半个水兵；听了几年讲，下了几回矿洞，就能掘&lt;a href=&#34;https://baike.baidu.com/item/%E5%87%BA%E9%87%91/3139852?fromModule=lemma_inlink&#34;&gt;出金&lt;/a&gt;、银、铜、铁、锡来么？实在连自己也茫无把握，没有做《工欲善其事必先利其器论》的那么容易。爬上天空二十丈和钻下地面二十丈，结果还是一无所能，学问是“上穷碧落下黄泉，两处茫茫皆不见”了。所余的还只有一条路：到外国去。&lt;/p&gt;&#xA;&lt;p&gt;留学的事，官僚也许可了，派定五名到日本去。其中的一个因为祖母哭得死去活来，不去了，只剩了四个。日本是同中国很两样的，我们应该如何准备呢？有一个前辈同学在，比我们早一年毕业，曾经游历过日本，应该知道些情形。跑去请教之后，他郑重地说：&lt;/p&gt;&#xA;&lt;p&gt;“日本的袜是万不能穿的，要多带些中国袜。我看纸票也不好，你们带去的钱不如都换了他们的现银。”&lt;/p&gt;&#xA;&lt;p&gt;四个人都说遵命。别人不知其详，我是将钱都在上海换了日本的&lt;a href=&#34;https://baike.baidu.com/item/%E9%93%B6%E5%85%83/1815076?fromModule=lemma_inlink&#34;&gt;银元&lt;/a&gt;，还带了十双中国袜——白袜。&lt;/p&gt;&#xA;&lt;p&gt;后来呢？后来，要穿制服和皮鞋，中国袜完全无用；一元的&lt;a href=&#34;https://baike.baidu.com/item/%E9%93%B6%E5%9C%86/1002030?fromModule=lemma_inlink&#34;&gt;银圆&lt;/a&gt;日本早已废置不用了，又赔钱换了半元的银圆和纸票。&lt;/p&gt;</description>
    </item>
    <item>
      <title>无常</title>
      <link>https://note.lican.site/article/%E6%97%A0%E5%B8%B8/</link>
      <pubDate>Fri, 21 Jun 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E6%97%A0%E5%B8%B8/</guid>
      <description>&lt;p&gt;迎神赛会这一天出巡的神，如果是掌握生杀之权的，——不，这生杀之权四个字不大妥，凡是神，在中国仿佛都有些随意杀人的权柄似的，倒不如说是职掌人民的生死大事的罢，就如城隍和&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%9C%E5%B2%B3%E5%A4%A7%E5%B8%9D/4569607?fromModule=lemma_inlink&#34;&gt;东岳大帝&lt;/a&gt;之类。那么，他的卤簿中间就另有一群特别的角色：鬼卒、鬼王，还有活无常。 这些鬼物们，大概都是由粗人和乡下人扮演的。鬼卒和鬼王是红红绿绿的衣裳，赤着脚；蓝脸，上面又画些鱼鳞，也许是龙鳞或别的什么鳞罢，我不大清楚。鬼卒拿着钢叉，叉环振得琅琅地响，鬼王拿的是一块小小的虎头牌。据传说，鬼王是只用一只脚走路的；但他究竟是乡下人，虽然脸上已经画上些鱼鳞或者别的什么鳞，却仍然只得用了两只脚走路。所以看客对于他们不很敬畏，也不大留心，除了念佛老妪和她的孙子们为&lt;a href=&#34;https://baike.baidu.com/item/%E9%9D%A2%E9%9D%A2%E5%9C%86%E5%88%B0/4846930?fromModule=lemma_inlink&#34;&gt;面面圆到&lt;/a&gt;起见，也照例给他们一个“不胜屏营待命之至”的仪节。&lt;/p&gt;&#xA;&lt;p&gt;至于我们——我相信：我和许多人——所最愿意看的，却在活无常。他不但活泼而诙谐，单是那浑身雪白这一点，在红红绿绿中就有“&lt;a href=&#34;https://baike.baidu.com/item/%E9%B9%A4%E7%AB%8B%E9%B8%A1%E7%BE%A4/1464787?fromModule=lemma_inlink&#34;&gt;鹤立鸡群&lt;/a&gt;”之概。只要望见一顶白纸的高帽子和他手里的破芭蕉扇的影子，大家就都有些紧张，而且高兴起来了。人民之于鬼物，惟独与他最为稔熟，也最为亲密，平时也常常可以遇见他。譬如城隍庙或东岳庙中，大殿后面就有一间暗室，叫作“阴司间”，在才可辨色的昏暗中，塑着各种鬼：吊死鬼、跌死鬼、虎伤鬼、科场鬼，……而一进门口所看见的长而白的东西就是他。我虽然也曾瞻仰过一回这“阴司间”，但那时胆子小，没有看明白。听说他一手还拿着铁索，因为他是勾摄生魂的使者。相传樊江东岳庙的“阴司间”的构造，本来是极其特别的：门口是一块活板，人一进门，踏着活板的这一端，塑在那一端的他便扑过来，铁索正套在你脖子上。后来吓死了一个人，钉实了，所以在我幼小的时候，这就已不能动。&lt;/p&gt;&#xA;&lt;p&gt;倘使要看个分明，那么，《玉历钞传》上就画着他的像，不过《玉历钞传》也有繁简不同的本子的，倘是繁本，就一定有。身上穿的是斩衰凶服，腰间束的是草绳，脚穿草鞋，项挂纸锭；手上是破芭蕉扇、铁索、算盘；肩膀是耸起的，头发却披下来；眉眼的外梢都向下，像一个“八”字。头上一顶长方帽，下大顶小，按比例一算，该有二尺来高罢；在正面，就是遗老遗少们所戴瓜皮小帽的缀一粒珠子或一块宝石的地方，直写着四个字道：“一见有喜”。有一种本子上，却写的是“你也来了”。这四个字，是有时也见于包公殿的扁额上的，至于他的帽上是何人所写，他自己还是阎罗王，我可没有研究出。&lt;/p&gt;&#xA;&lt;p&gt;《玉历钞传》上还有一种和活无常相对的鬼物，装束也相仿，叫作“死有分”。这在迎神时候也有的，但名称却讹作死无常了，黑脸、黑衣，谁也不爱看。在“阴死间”里也有的，胸口靠着墙壁，阴森森地站着；那才真真是“碰壁”。凡有进去烧香的人们，必须摩一摩他的脊梁，据说可以摆脱了晦气；我小时也曾摩过这脊梁来，然而晦气似乎终于没有脱，——也许那时不摩，现在的晦气还要重罢，这一节也还是没有研究出。我也没有研究过&lt;a href=&#34;https://baike.baidu.com/item/%E5%B0%8F%E4%B9%98%E4%BD%9B%E6%95%99/942576?fromModule=lemma_inlink&#34;&gt;小乘佛教&lt;/a&gt;的经典，但据耳食之谈，则在印度的佛经里，焰摩天是有的，牛首阿旁也有的，都在地狱里做主任。至于勾摄生魂的使者的这无常先生，却似乎于古无征，耳所习闻的只有什么“人生无常”之类的话。大概这意思传到中国之后，人们便将他具体化了。这实在是我们中国人的创作。&lt;/p&gt;&#xA;&lt;p&gt;然而人们一见他，为什么就都有些紧张，而且高兴起来呢？&lt;/p&gt;&#xA;&lt;p&gt;凡有一处地方，如果出了文士学者或名流，他将笔头一扭，就很容易变成“模范县”。我的故乡，在汉末虽曾经虞仲翔先生揄扬过，但是那究竟太早了，后来到底免不了产生所谓“绍兴师爷”，不过也并非男女老小全是“绍兴师爷”，别的“下等人”也不少。这些“下等人”，要他们发什么“我们现在走的是一条狭窄险阻的小路，左面是一个广漠无际的泥潭，右面也是一片广漠无际的浮砂，前面是遥遥茫茫荫在薄雾的里面的目的地”那样热昏似的妙语，是办不到的，可是在无意中，看得住这“荫在薄雾的里面的目的地”的道路很明白：求婚，结婚，养孩子，死亡。但这自然是专就我的故乡而言，若是“模范县”里的人民，那当然&lt;a href=&#34;https://baike.baidu.com/item/%E5%8F%88%E4%BD%9C%E5%88%AB%E8%AE%BA/10943754?fromModule=lemma_inlink&#34;&gt;又作别论&lt;/a&gt;。他们——敝同乡“下等人”——的许多，活着，苦着，被流言，被反噬，因了积久的经验，知道阳间维持“公理”的只有一个会，而且这会的本身就是“遥遥茫茫”，于是乎势不得不发生对于阴间的神往。人是大抵自以为衔些冤抑的；活的“正人君子”们只能骗鸟，若问愚民，他就可以不假思索地回答你：公正的裁判是在阴间！想到生的乐趣，生固然可以留恋；但想到生的苦趣，无常也不一定是恶客。无论贵贱，无论贫富，其时都是“一双空手见阎王”，有冤的得伸，有罪的就得罚。然而虽说是“下等人”，也何尝没有反省？自己做了一世人，又怎么样呢？未曾“跳到半天空”么？没有“放冷箭”么？无常的手里就拿着大算盘，你摆尽臭架子也无益。对付别人要&lt;a href=&#34;https://baike.baidu.com/item/%E6%BB%B4%E6%B0%B4%E4%B8%8D%E7%BE%BC/6165628?fromModule=lemma_inlink&#34;&gt;滴水不羼&lt;/a&gt;【chan】的公理，对自己总还不如虽在阴司里也还能够寻到一点私情。然而那又究竟是阴间，阎罗天子、牛首阿旁，还有中国人自己想出来的马面，都是并不兼差，真正主持公理的脚色，虽然他们并没有在报上发表过什么大文章。当还未做鬼之前，有时先不&lt;a href=&#34;https://baike.baidu.com/item/%E6%AC%BA%E5%BF%83/3285630?fromModule=lemma_inlink&#34;&gt;欺心&lt;/a&gt;的人们，遥想着将来，就又不能不想在整块的公理中，来寻一点情面的末屑，这时候，我们的活无常先生便见得可亲爱了，利中取大，害中取小，我们的古哲墨瞿先生谓之“小取”云。&lt;/p&gt;&#xA;&lt;p&gt;在庙里泥塑的，在书上墨印的模样上，是看不出他那可爱来的。最好是去看戏。但看普通的戏也不行，必须看“大戏”或者“目连戏”。目连戏的热闹，张岱在《陶庵梦忆》上也曾夸张过，说是要连演两三天。在我幼小时候可已经不然了，也如大戏一样，始于黄昏，到次日的天明便完结。这都是敬神禳灾的演剧，全本里一定有一个恶人，次日的将近天明便是这恶人的收场的时候，“恶贯满盈”，阎王出票来勾摄了，于是乎这活的活无常便在戏台上出现。&lt;/p&gt;&#xA;&lt;p&gt;我还记得自己坐在这一种戏台下的船上的情形，看客的心情和普通是两样的。平常愈夜深愈懒散，这时却愈起劲。他所戴的纸糊的高帽子，本来是挂在台角上的，这时预先拿进去了；一种特别乐器，也准备使劲地吹。这乐器好像喇叭，细而长，可有七八尺，大约是鬼物所爱听的罢，和鬼无关的时候就不用；吹起来，Nhatu，nhatu，nhatututuu地响，所以我们叫它“目连嗐头”。在许多人期待着恶人的没落的凝望中，他出来了，服饰比画上还简单，不拿铁索，也不带算盘，就是雪白的一条莽汉，&lt;a href=&#34;https://baike.baidu.com/item/%E7%B2%89%E9%9D%A2%E6%9C%B1%E5%94%87/5985721?fromModule=lemma_inlink&#34;&gt;粉面朱唇&lt;/a&gt;，眉黑如漆，蹙着，不知道是在笑还是在哭。但他一出台就须打一百零八个嚏，同时也放一百零八个屁，这才自述他的履历。可惜我记不清楚了，其中有一段大概是这样：——&lt;/p&gt;&#xA;&lt;p&gt;“…………&lt;/p&gt;&#xA;&lt;p&gt;大王出了牌票，叫我去拿隔壁的癞子。&lt;/p&gt;&#xA;&lt;p&gt;问了起来呢，原来是我堂房的阿侄。&lt;/p&gt;&#xA;&lt;p&gt;生的是什么病？伤寒，还带痢疾。&lt;/p&gt;&#xA;&lt;p&gt;看的是什么郎中？下方桥的陈念义儿子。&lt;/p&gt;&#xA;&lt;p&gt;开的是怎样的药方？附子、肉桂，外加牛膝。&lt;/p&gt;&#xA;&lt;p&gt;第一煎吃下去，冷汗发出；&lt;/p&gt;&#xA;&lt;p&gt;第二煎吃下去，两脚笔直。&lt;/p&gt;&#xA;&lt;p&gt;我道阿嫂哭得悲伤，暂放他还阳半刻。&lt;/p&gt;&#xA;&lt;p&gt;大王道我是得钱买放，就将我捆打四十！”&lt;/p&gt;&#xA;&lt;p&gt;这叙述里的“子”字都读作入声。陈念义是越中的名医，俞仲华曾将他写入《荡寇志》里，拟为神仙；可是一到他的令郎，似乎便不大高明了。la者“的”也；“儿”读若“倪”，倒是古音罢；nga者，“我的”或“我们的”之意也。&lt;/p&gt;&#xA;&lt;p&gt;他口里的阎罗天子仿佛也不大高明，竟会误解他的人格，——不，鬼格。但连“还阳半刻”都知道，究竟还不失其“聪明正直之谓神”。不过这惩罚，却给了我们的活无常以不可磨灭的冤苦的印象，一提起，就使他更加蹙紧双眉，捏定破芭蕉扇，脸向着地，鸭子浮水似的跳舞起来。&lt;/p&gt;&#xA;&lt;p&gt;Nhatu，nhatu，nhatu－nhatu－nhatututuu！目连嗐头也冤苦不堪似的吹着。他因此决定了：——&lt;/p&gt;&#xA;&lt;p&gt;“难是弗放者个！&lt;/p&gt;&#xA;&lt;p&gt;那怕你，铜墙铁壁！&lt;/p&gt;&#xA;&lt;p&gt;那怕你，皇亲国戚！&lt;/p&gt;&#xA;&lt;p&gt;…………”&lt;/p&gt;&#xA;&lt;p&gt;“难”者，“今”也；“者个”者“的了”之意，词之决也。“虽有忮心，不怨飘瓦”，他现在毫不留情了，然而这是受了阎罗老子的督责之故，不得已也。一切鬼众中，就是他有点人情；我们不变鬼则已，如果要变鬼，自然就只有他可以比较的相亲近。迎神时候的无常，可和演剧上的又有些不同了。他只有动作，没有言语，跟定了一个捧着一盘饭菜的小丑似的脚色走，他要去吃；他却不给他。另外还加添了两名角色，就是“正人君子”之所谓“老婆儿女”。凡“下等人”，都有一种通病：常喜欢以己之所欲，施之于人。虽是对于鬼，也不肯给他孤寂，凡有鬼神，大概总要给他们一对一对地配起来。无常也不在例外。所以，一个是漂亮的女人，只是很有些村妇样，大家都称她无常嫂；这样看来，无常是和我们平辈的，无怪他不摆教授先生的架子。一个是小孩子，小高帽，小白衣；虽然小，两肩却已经耸起了，眉目的外梢也向下。这分明是无常少爷了，大家却叫他阿领，对于他似乎都不很表敬意；猜起来，仿佛是无常嫂的前夫之子似的。但不知何以相貌又和无常有这么像？吁！鬼神之事，难言之矣，只得姑且&lt;a href=&#34;https://baike.baidu.com/item/%E7%BD%AE%E4%B9%8B%E5%BC%97%E8%AE%BA/9100829?fromModule=lemma_inlink&#34;&gt;置之弗论&lt;/a&gt;。至于无常何以没有亲儿女，到今年可很容易解释了；鬼神能前知，他怕儿女一多，爱说闲话的就要旁敲侧击地锻成他拿卢布，所以不但研究，还早已实行了“节育”了。&lt;/p&gt;&#xA;&lt;p&gt;这捧着饭菜的一幕，就是“送无常”。因为他是勾魂使者，所以民间凡有一个人死掉之后，就得用酒饭恭送他。至于不给他吃，那是赛会时候的开玩笑，实际上并不然。但是，和无常开玩笑，是大家都有此意的，因为他爽直，爱发议论，有人情，——要寻真实的朋友，倒还是他妥当。&lt;/p&gt;&#xA;&lt;p&gt;有人说，他是生人走阴，就是原是人，梦中却入冥去当差的，所以很有些人情。我还记得住在离我家不远的小屋子里的一个男人，便自称是“走无常”，门外常常燃着香烛。但我看他脸上的鬼气反而多。莫非入冥做了鬼，倒会增加人气的么？吁！鬼神之事，难言之矣，这也只得姑且置之弗论了。&lt;/p&gt;&#xA;&lt;p&gt;六月二十三日。&lt;/p&gt;</description>
    </item>
    <item>
      <title>从百草园到三味书屋</title>
      <link>https://note.lican.site/article/%E4%BB%8E%E7%99%BE%E8%8D%89%E5%9B%AD%E5%88%B0%E4%B8%89%E5%91%B3%E4%B9%A6%E5%B1%8B/</link>
      <pubDate>Thu, 20 Jun 2024 09:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E4%BB%8E%E7%99%BE%E8%8D%89%E5%9B%AD%E5%88%B0%E4%B8%89%E5%91%B3%E4%B9%A6%E5%B1%8B/</guid>
      <description>&lt;p&gt;从百草园到三味书屋&lt;/p&gt;&#xA;&lt;p&gt;我家的后面有一个很大的园，相传叫作百草园。现在是早已并1屋子一起卖给&lt;a href=&#34;https://baike.baidu.com/item/%E6%9C%B1%E6%96%87%E5%85%AC/0?fromModule=lemma_inlink&#34;&gt;朱文公&lt;/a&gt;的子孙2了，连那最末次的相见也已经隔了七八年，其中似乎确凿3只有一些野草；但那时却是我的乐园。&lt;/p&gt;&#xA;&lt;p&gt;不必说碧绿的菜畦4，光滑的石井栏，高大的皂荚树5，紫红的桑椹6；也不必说鸣蝉在树叶里长吟7，肥胖的黄蜂伏在菜花上，轻捷8的叫天子9（云雀）忽然从草间直窜向云霄10里去了。单是周围的短短的泥墙根一带，就有无限趣味。油蛉11在这里低唱，蟋蟀们在这里弹琴。翻开断砖来，有时会遇见蜈蚣；还有斑蝥12，倘若13用手指按住它的脊梁，便会啪的一声，从后窍14喷出一阵烟雾。何首乌15藤和木莲16藤缠络17着，木莲有莲房18一般的果实，何首乌有臃肿19的根。有人说，何首乌根是有像人形的，吃了便可以成仙，我于是常常拔它起来，牵连不断地拔起来，也曾因此弄坏了泥墙，却从来没有见过有一块根像人样。如果不怕刺，还可以摘到覆盆子20，像小珊瑚珠21攒22成的小球，又酸又甜，色味都比桑椹要好得远。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://bkimg.cdn.bcebos.com/pic/9922720e0cf3d7ca48e00439f21fbe096b63a96e?x-bce-process=image/format,f_auto/resize,m_lfit,limit_1,w_440&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;三味书屋(8张)&lt;/p&gt;&#xA;&lt;p&gt;长的草里是不去的，因为相传这园里有一条很大的赤练蛇。&lt;/p&gt;&#xA;&lt;p&gt;长妈妈23曾经讲给我一个故事听：先前，有一个读书人住在古庙里用功，晚间，在院子里纳凉24的时候，突然听到有人在叫他。答应着，四面看时，却见一个美女的脸露在墙头上，向他一笑，隐去了。他很高兴；但竟给那走来和他夜谈的老和尚识破了机关25。说他脸上有些妖气，一定遇见“美女蛇”了；这是人首蛇身的怪物，能唤人名，倘一答应，夜间便要来吃这人的肉的。他自然吓得要死，而那老和尚却道26无妨，给他一个小盒子，说只要放在枕边，便可高枕而卧27。他虽然照样办，却总是睡不着，——当然睡不着的。到半夜，果然来了，沙沙沙！门外像是风雨声。他正抖作一团时，却听得豁的一声，一道金光从枕边飞出，外面便什么声音也没有了，那金光也就飞回来，敛28在盒子里。后来呢？后来，老和尚说，这是飞蜈蚣，它能吸蛇的脑髓，美女蛇就被它治死了。&lt;/p&gt;&#xA;&lt;p&gt;结末的教训是：所以倘有陌生的声音叫你的名字，你万万不可答应他。&lt;/p&gt;&#xA;&lt;p&gt;这故事很使我觉得做人之险，夏夜乘凉，往往有些担心，不敢去看墙上，而且极想得到一盒老和尚那样的飞蜈蚣。走到百草园的草丛旁边时，也常常这样想。但直到现在，总还没有得到，但也没有遇见过赤练蛇和美女蛇。叫我名字的陌生声音自然是常有的，然而都不是美女蛇。&lt;/p&gt;&#xA;&lt;p&gt;冬天的百草园比较的无味；雪一下，可就两样了。拍雪人（将自己的全形印在雪上）和塑雪罗汉29需要人们鉴赏30，这是荒园，人迹罕至31，所以不相宜，只好来捕鸟。薄薄的雪，是不行的；总须积雪盖了地面一两天，鸟雀们久已无处觅食32的时候才好。扫开一块雪，露出地面，用一支短棒支起一面大的竹筛来，下面撒些秕谷33，棒上系一条长绳，人远远地牵着，看鸟雀下来啄食，走到竹筛底下的时候，将绳子一拉，便罩住了。但所得的是麻雀居多，也有白颊的“张飞鸟34”，性子很躁，养不过夜的。&lt;/p&gt;&#xA;&lt;p&gt;这是闰土的父亲所传授的方法，我却不大能用。明明见它们进去了，拉了绳，跑去一看，却什么都没有，费了半天力，捉住的不过三四只。闰土的父亲是小半天便能捕获几十只，装在叉袋35里叫着撞着的。我曾经问他得失的缘由，他只静静地笑道：你太性急，来不及等它走到中间去。&lt;/p&gt;&#xA;&lt;p&gt;我不知道为什么家里的人要将我送进书塾36里去了，而且还是全城中称为最严厉的书塾。也许是因为拔何首乌毁了泥墙罢，也许是因为将砖头抛到间壁的梁家去了罢，也许是因为站在石井栏上跳了下来罢……都无从37知道。总而言之：我将不能常到百草园了。Ade38，我的蟋蟀们！Ade，我的覆盆子们和木莲们！&amp;hellip;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;出门向东，不上半里，走过一道石桥，便是我先生的家了。从一扇黑油的竹门进去，第三间是书房。中间挂着一块匾道：三味书屋；匾下面是一幅画，画着一只很肥大的梅花鹿伏在古树下。没有孔子牌位，我们便对着那匾和鹿行礼。第一次算是拜孔子，第二次算是拜先生39。&lt;/p&gt;&#xA;&lt;p&gt;第二次行礼时，先生便和蔼地在一旁答礼。他是一个高而瘦的老人，须发都花白了，还戴着大眼镜。我对他很恭敬，因为我早听到，他是本城中极方正40，质朴，博学的人。&lt;/p&gt;&#xA;&lt;p&gt;不知从哪里听来的，东方朔41也很渊博42，他认识一种虫，名曰“怪哉43”，冤气所化，用酒一浇，就消释44了。我很想详细地知道这故事，但阿长是不知道的，因为她毕竟不渊博。现在得到机会了，可以问先生。&lt;/p&gt;&#xA;&lt;p&gt;“先生，‘怪哉’这虫，是怎么一回事？”我上了生书，将要退下来的时候45，赶忙问。&lt;/p&gt;&#xA;&lt;p&gt;“不知道！”他似乎很不高兴，脸上还有怒色了。&lt;/p&gt;&#xA;&lt;p&gt;我才知道做学生是不应该问这些事的，只要读书，因为他是渊博的宿儒46，决不至于不知道，所谓不知道者，乃是不愿意说。年纪比我大的人，往往如此，我遇见过好几回了。&lt;/p&gt;&#xA;&lt;p&gt;我就只读书，正午习字，晚上对课47。先生最初这几天对我很严厉，后来却好起来了，不过给我读的书渐渐加多，对课也渐渐地加上字去，从三言48到五言，终于到七言了。&lt;/p&gt;&#xA;&lt;p&gt;三味书屋后面也有一个园，虽然小，但在那里也可以爬上花坛去折腊梅花，在地上或桂花树上寻蝉蜕49。最好的工作是捉了苍蝇喂蚂蚁，静悄悄地没有声音。然而同窗50们到园里的太多，太久，可就不行了，先生在书房里便大叫起来：&lt;/p&gt;&#xA;&lt;p&gt;“人都到那里去了！”&lt;/p&gt;&#xA;&lt;p&gt;便一个一个陆续走回去；一同回去，也不行的。他有一条戒尺51，但是不常用，也有罚跪的规则，但也不常用，普通总不过瞪几眼，大声道：&lt;/p&gt;&#xA;&lt;p&gt;“读书！”&lt;/p&gt;&#xA;&lt;p&gt;大家放开喉咙读一阵书，真是人声鼎沸52。有念“仁远乎哉我欲仁斯仁至矣53”的，有念“笑人齿缺曰狗窦大开”的（语出《幼学琼林·身体》），有念“上九潜龙勿用”的（语出《易经》，原为初九潜龙勿用），有念“厥土下上上错厥贡苞茅橘柚”的……(语出《尚书》中的《禹贡》)先生自己也念书。后来，我们的声音便低下去，静下去了，只有他还大声朗读着：&lt;/p&gt;&#xA;&lt;p&gt;“铁如意，指挥倜傥54，一座皆惊呢~~；金叵罗，颠倒淋漓噫，千杯未醉嗬~~……”（语出《李克用置酒三垂冈赋》是清末诗人刘翰所作的一首诗词）&lt;/p&gt;&#xA;&lt;p&gt;我疑心这是极好的文章，因为读到这里，他总是微笑起来，而且将头仰起，摇着，向后面拗55过去，拗过去。&lt;/p&gt;&#xA;&lt;p&gt;读书入神的时候，于我们是很相宜的。有几个便用纸糊的盔甲56套在指甲上做戏。我是画画儿，用一种叫作“荆川纸57”的，蒙在小说的绣像58上一个个描下来， 像习字时候的影写59一样。读的书多起来，画的画也多起来；书没有读成，画的成绩却不少了，最成片段的是《荡寇志》60和《西游记》的绣像，都有一大本。后来，为要钱用，卖给了一个有钱的同窗了。他的父亲是开锡箔61店的；听说现在自己已经做了店主，而且快要升到绅士62的地位了。这东西早已没有了吧。&lt;/p&gt;&#xA;&lt;p&gt;九月十八日&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-seven</title>
      <link>https://note.lican.site/project/share7/</link>
      <pubDate>Tue, 18 Jun 2024 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share7/</guid>
      <description>&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#ai-%E6%8A%80%E6%9C%AF&#34;&gt;AI 技术&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#ai-%E5%B7%A5%E5%85%B7&#34;&gt;AI 工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%8D%E8%B4%B9%E4%B9%A6%E7%B1%8D&#34;&gt;免费书籍&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%AD%A6%E4%B9%A0%E6%95%99%E7%A8%8B&#34;&gt;学习教程&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7&#34;&gt;实用工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%AE%9E%E7%94%A8%E6%8F%92%E4%BB%B6&#34;&gt;实用插件&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E9%9B%86%E5%90%88&#34;&gt;资料集合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E4%BB%96&#34;&gt;其他&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;ai-技术&#34;&gt;AI 技术&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6n4HUTW&#34;&gt;OmniParser&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于纯视觉的 GUI 智能体，能够准确识别界面上可交互图标以及理解截图中各元素语义，实现自动化界面交互场景，如自动化测试、自动化操作等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODDGE9iKe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/2noise/ChatTTS&#34;&gt;ChatTTS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专门为对话场景设计的语音生成模型，主要用于 LLM 助手对话任务、对话语音以及视频介绍等，支持中英文混合文本合成语音，音色表现强，能达到真假难辨程度。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgtYGiyMo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/intelligent-machine-learning/dlrover&#34;&gt;DLRover&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套 AI 大模型训练方案，可实现训练&amp;quot;自动驾驶&amp;quot;，提高训练效率，降低研发成本，具有容错性、快速恢复和自动扩展等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NF2cklwac&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/SwiftInfer&#34;&gt;SwiftInfer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 TensorRT 实现的 StreamingLLM 推理加速框架，可提升大模型推理性能 46 %，为多轮对话推理提供高效可靠的落地方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NAS7K9B1u&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facebookresearch/audio2photoreal&#34;&gt;Audio2PhotoReal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一项由 Meta AI 发布的新技术，能够通过音频驱动生成全身逼真的虚拟人物对话，包括动作、表情和多人对话等，可广泛应用于虚拟现实、影视制作等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NAqwLvBIV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/myshell-ai/OpenVoice&#34;&gt;OpenVoice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一项由 MyShell 团队开发的多功能即时声音克隆技术，只需提供简短音频样本，即可克隆原发言者的声音，生成多种语言语音，支持高精度音色克隆、灵活的声音风格调控以及无需样本的跨语言声音克隆。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NAiw7rRNh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;ai-工具&#34;&gt;AI 工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/anti-work/shortest&#34;&gt;Shortest&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款利用 Claude 模型能力的端到端 AI 测试框架，通过自然语言编写可执行的单元测试，支持 GitHub 与 2FA 集成，提供安全认证方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P78T3tP8F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ZGGSONG/STranslate&#34;&gt;STranslate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开箱即用的翻译和 OCR 工具，支持多种翻译方式、多家翻译服务、离线 OCR、回译、TTS 等功能，提升翻译效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6VVmEi17&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xiaoxiunique/x-kit&#34;&gt;x-kit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款用于抓取和分析 Twitter 推友数据的工具，可自动抓取指定推友的基本信息和推文，支持定时更新时间线数据和本地存储。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6Q246RBv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/spaces/hkchengrex/MMAudio&#34;&gt;MMAudio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款视频自动配音工具，可根据视频内容或文本提示生成符合场景的音效，并与视频画面动作保持同步对齐。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6OR0gwq7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hoarder-app/hoarder&#34;&gt;Hoarder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款自托管的书签管理 AI 工具，支持保存链接、笔记、图片和 PDF 文件，利用 AI 自动打标签分类存储，提供全文搜索能力。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6wew9VS5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/web-infra-dev/midscene&#34;&gt;Midscene.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由 AI 驱动的 UI 自动化 SDK，通过自然语言描述对任意网页进行自动化操作、验证和数据提取，生成可视化测试报告，支持多种主流 AI 模型和自动化库集成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6v17rEJR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/browser-use/browser-use&#34;&gt;Browser Use&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源工具，能让 AI 智能体自动化操作浏览器，像真人一样理解网页内容并完成复杂任务，如投递简历、查询航班等，具备视觉识别、HTML 解析、多标签页管理等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6lCEB88t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/Open-Sora&#34;&gt;Video Ocean&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Colossal - AI 优化的 Sora 视频模型的免费视频生成平台，提供极低成本、快速的视频生成服务，并将优化方案开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6kdo241Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Nutlope/logocreator&#34;&gt;LogoCreator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI Logo 生成器，使用 Flux Pro 1 . 1 模型快速生成 Logo 图标，支持编辑样式，代码完全开源并提供免费体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P64YnygK8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/markitdown&#34;&gt;MarkltDown&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由微软开源的工具，可将常见文件如 Word、Excel、PPT 等转换为 Markdown 格式，支持 OCR 和 AI 模型处理多媒体文件，提供命令行、Python API 和 Docker 三种使用方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5H89CIC8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Byaidu/PDFMathTranslate&#34;&gt;PDFMathTranslate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 PDF 文档翻译及双语对照工具，能够很好地保留公式、图表、目录和注释等排版，支持多种语言和翻译服务，可通过命令行、GUI 界面、Docker 等方式使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5CICinD6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nishuzumi/gemini-teacher&#34;&gt;Gemini-Teacher&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Gemini 2 . 0 开发的英语口语练习 AI 助手，能实时识别发音并提供反馈和纠正建议，适合英语口语学习和教学。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5xHF6P6c&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/whotto/Video_note_generator&#34;&gt;XHS Note Generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款小红书笔记 AI 生成器，支持快速批量将视频或直播内容一键转换为符合小红书风格的爆款笔记，自动优化内容和配图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5tbArUkt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mediar-ai/screenpipe&#34;&gt;ScreenPipe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款强大的开源 AI 桌面应用，可 24 小时监控电脑，通过屏幕录制、OCR、音频输入和转录收集信息，保存到本地数据库，利用 LLM 对话、总结和回顾你所做的事情。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P1c7O5pXF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/briaai/RMBG-2.0&#34;&gt;RMBG-2.0&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高效的背景移除工具，支持处理各种图像，一键移除背景，效果出色且处理速度快，适用于电商、广告等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P12Dlmfo7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TTPlanetPig/Comfyui_Object_Migration&#34;&gt;Comfyui_Object_Migration&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套基于 ComfyUI 的服装迁移工作流，可将服装照片自然真实地迁移到模特身上，支持虚拟试穿和风格迁移（如动漫转现实风格），还原度较高。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P0YSLnIPZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tmplink/nsfw_detector&#34;&gt;NSFW Detector&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 NSFW 内容检测器，使用 Google 模型，准确度高，支持检测图片、PDF 文件、视频、压缩包等多种文件类型，支持纯 CPU 推理，提供 API 服务便于集成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P0UmHjmi7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WEIFENG2333/VideoCaptioner&#34;&gt;VideoCaptioner&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的视频字幕翻译助手，提供可视化操作界面，支持字幕智能断句、校正、优化、翻译，一键生成双字幕视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P0BvHjG5I&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/magic-quill/magicquill&#34;&gt;MagicQuill&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 互动式图像编辑工具，用户只需通过画笔涂抹和简单提示词，即可轻松实现插入元素、擦除物体、调整颜色等各种图像编辑操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P0sfgqLQl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/abus-aikorea/voice-pro&#34;&gt;Voice-Pro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款集转录、翻译和文字转语音为一体的开源工具，提供简洁直观的可视化操作界面，支持实时转录和翻译，以及批量处理模式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OFXg2nrNa&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jhj0517/AdvancedLivePortrait-WebUI&#34;&gt;AdvancedLivePortrait-WebUI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Gradio 开发的开源工具，能够对图像中的人物进行实时面部表情精确控制，如微笑、眨眼、摇头等，支持多种部署方式使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OF8Ana05p&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CatchTheTornado/pdf-extract-api&#34;&gt;pdf-extract-api&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 FastAPI 的 PDF 文档提取和解析工具，利用 OCR 技术和 Ollama 模型将 PDF 或图像转换为 Markdown 文本或 JSON 文档，支持表格、公式等格式解析，使用 Redis 缓存提高效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OES7rAt81&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/theredsix/cerebellum&#34;&gt;Cerebellum&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于智能体的浏览器自动化工具，通过使用 LLM 构建的智能体实现自动化操作键盘和鼠标，在网页上完成数据抓取、自动化测试等任务。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEPJnt0p7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yeates/PromptFix&#34;&gt;PromptFix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于提示的 AI 图像修复工具，能够根据输入的提示对图像进行上色、移除物体、去除水印、高清化、调整光线等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEzct54QI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/getmaxun/maxun&#34;&gt;Maxun&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的自动化网页数据爬取工具，无需编写代码，通过可视化界面构建自定义机器人实现网页数据捕获、提取和处理等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEpO15B1v&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6nVnoTM&#34;&gt;AI Podcast Generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的自动化 AI 播客生成工具，能够自动抓取网络新闻内容，并生成自然流畅的叙述性音频播客，提供简单易用的界面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OE6X11vEB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6nfRDtg&#34;&gt;MegaParse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于大型语言模型构建的功能强大的文档解析开源工具，可以轻松处理 PDF、PPT、Word、Excel 等常见格式，保证解析过程中不丢失任何信息，还能准确识别文档中的表格、目录、页眉页脚和图片等内容，解析速度快，效率高。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODXwwqWPu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6nVFPdz&#34;&gt;SoniTranslate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Gradio 构建的简单易用的视频翻译工具，支持将视频一键翻译成多种语言，并提供视频同声翻译功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODVaoqul9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/16131zzzzzzzz/EveryoneNobel&#34;&gt;EveryoneNobel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 工具，可用于生成个性化诺贝尔奖项图片，利用 ComfyUI 进行图像生成，并结合 HTML 模板展示图片上的文本，只需提供个人肖像图即可生成诺贝尔奖项风格图像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODjspfWSC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YOYZHANG/PodCastLM&#34;&gt;PodCastLM&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的工具，可以将 PDF 内容转化为适合音频播客的自然对话，并输出为 MP3 文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODco2x491&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/corbt/agent.exe&#34;&gt;Agent.exe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 自主操作计脑工具，利用 Claude 3 . 5 Sonnet 直接控制本地电脑，展示了 Claude 的 Computer Use 能力，可用于自动化智能体开发。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OD8EGbgkh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/getomni-ai/zerox&#34;&gt;Zerox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用的 OCR 文档工具，支持 PDF、Docx、图像等文件格式，可将文件转换为图像后利用 gpt - 4o - mini 模型识别图像信息并输出 Markdown 格式文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OD48BgZ27&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Eddycrack864/UVR5-UI&#34;&gt;UVR5-UI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的人声伴奏分离 AI 工具，提供在线简洁易用的操作界面，支持选择不同的 AI 模型以及输出格式和质量，支持批量处理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCGnbC7UP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adarshb3/Virtual-Try-On-Application-using-Flask-Twilio-and-Gradio&#34;&gt;Virtual Try-On Application&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 WhatsApp API 和 IDM - VTON 虚拟试穿模型的 AI 应用，用户只需在 WhatsApp 上传个人照片和服装照片，即可生成虚拟试穿效果图，提供便捷的虚拟试衣体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCAG362B4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/anthropics/anthropic-quickstarts/tree/main/financial-data-analyst&#34;&gt;Claude Financial Data Analyst&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由 Anthropic 开源的基于 Next . js 和 Claude AI 构建的金融数据分析助手，支持多种格式文件上传，通过聊天界面进行财务数据分析并生成可视化图表。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCj07iHiB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VikParuchuri/tabled&#34;&gt;Tabled&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Surya 开发的 OCR 小工具，能够识别 PDF、图像、Word 和 PPT 等文件中的表格，并将表格内容提取转换为 Markdown、CSV 或 HTML 格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OChP4iiej&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VikParuchuri/surya&#34;&gt;Surya&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源且强大的文档 OCR 工具，专注于文档图像的处理和分析，能够准确进行逐行文本检测和识别，支持 90 多种语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OC62rozdB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://lucaria-academy.github.io/Animate-X/&#34;&gt;Animate-X&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 AI 的动画生成工具，可以通过输入角色图片和参考动作视频，自动生成角色按照指定动作移动的动画效果，支持真人、游戏、卡通等多种类型的角色，保持角色一致性并允许大幅度动作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OC0f8wojR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WEIFENG2333/AsrTools&#34;&gt;AsrTools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的智能语音转字幕文本工具，集成了多家公司的语音识别接口，支持多种音频格式，提供批量处理和生成字幕文件功能，界面简单易用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBLOcu6QU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/spaces/thatupiso/Podcastfy.ai_demo&#34;&gt;Podcastfy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源工具，可将视频、PDF、论文、网站和文章等内容转换为对话式的播客音频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBdPAmvWp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ErikBjare/gptme&#34;&gt;gptme&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的开源终端 AI 助手，支持在终端执行本地代码、读写文件、搜索浏览网页和进行视觉识别等操作，可连接 OpenAI、Anthropic、OpenRouter 等主流 LLM 提供商，也可使用 llama . cpp 在本地提供服务。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OALy5o5df&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AI4Finance-Foundation/FinRL&#34;&gt;FinRL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的量化金融自动交易框架，包含市场环境、智能体和应用三层架构，提供先进算法核心支持连续交易决策。支持投资组合分配、加密货币交易、高频交易等金融任务和实时交易功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OACdjiyiF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://yt-whisper.danilotpnta.com/&#34;&gt;Youtube-Whisper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款利用 OpenAI Whisper 模型实现音频转文本的轻量级开源免费工具，可输入 YouTube 视频链接提取音频并转换为文本，支持多种语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAsGnlCN8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DrewThomasson/ebook2audiobookXTTS&#34;&gt;ebook2audiobookXTTS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 工具，利用 Calibre 和 Coqui TTS 将电子书转换为高质量的有声读物，支持多种语言和语音克隆功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OA0kD8uPB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RexanWONG/text-behind-image&#34;&gt;Text Behind Image&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单有趣的开源免费工具，可以轻松将文本添加到图像中指定对象的背后，如动物、人物或物品等，并支持保存到本地。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OzSaaDpcL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://godbolt.org&#34;&gt;Compiler Explorer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在线交互式编程语言编译器探索工具，支持超过 30 种语言如 C、C ++、Rust、Go 等，可在浏览器中实时编辑代码并查看编译后的汇编代码输出，提供多种编辑器、工具和可视化选项。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OyvjHA5lr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QiuYannnn/Local-File-Organizer&#34;&gt;Local File Organizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 AI 的本地文件整理器，可以自动扫描指定目录中的文件，理解文件内容并生成相关描述、文件夹名称和文件名，将文件整理到新的目录结构中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OykI8FvUd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pencilresearch/OpenScanner&#34;&gt;OpenScanner&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款快速、易用且开源免费的文档扫描工具，具有自动文本识别、文档命名、地理位置标记、签名添加、Vision Pro 支持等功能，可保存、编辑、注释和分享扫描文档。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxQaLinEV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/spaces/huggingface/diffusers-image-outpaint&#34;&gt;Diffusers Image Outpaint&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在线 AI 扩图工具，可以免费使用，只需上传图片并选择扩展比例，即可一键完成图像扩展。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxKbdDZTX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/ucaslcl/GOT-OCR2_0&#34;&gt;GOT-OCR2.0&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款端到端的开源 OCR 模型，被称为 OCR 2 . 0，支持识别场景文本、文档、乐谱、图表、数学公式等多种内容，在 BLEU 评测中取得 0 . 972 的高分，模型体积仅 1 . 43GB。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxgIFBROC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://%E7%BD%91%E9%A1%B5%E9%93%BE%E6%8E%A5&#34;&gt;Python Tutor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;除了 Python 外，还支持 Java、C、C ++和 JavaScript 等编程语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwFav6ZaV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/spaces/fishaudio/fish-speech-1&#34;&gt;Fish Speech&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的多语言 TTS 模型，使用 70 万小时数据训练，支持英语、中文、韩语、日语、法语、德语、阿拉伯语和西班牙语 8 种语言。具有快速语音合成、低延迟、声音丰富、混合语言和语音克隆等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwwLfEVIn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wechatferry/wechatferry&#34;&gt;wcf.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款强大、快速、开源的微信机器人底层框架，提供消息监听、发送和群聊操作的一站式解决方案，内置强大易用的 Agent 库和开发者工具包，具有高效稳定的处理能力和自由控制发消息频率的功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwaojcwHV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/markmap/markmap&#34;&gt;markmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的工具，可以将 Markdown 文档内容转换为直观可视化的思维导图，支持图像、链接、代码块、内联样式和数学公式等格式内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvU3a3PwQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/k4yt3x/video2x/&#34;&gt;Video2x&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的无损放大视频和图像工具，使用多种先进的超分辨率算法如 waifu2x、Anime4K、SRMD 和 RealSR 等实现视频/ GIF /图像的无损放大和提高帧速率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvGIlvBh5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gitbrent/PptxGenJS&#34;&gt;PptxGenJS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 JavaScript 的开源库，可用于生成 PPT 演示文稿，支持添加图表、表格、图像、视频等多种元素，生成的文件与 PowerPoint 等应用兼容，并提供 HTML 转 PPT 功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvCcgy1il&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dataease/dataease&#34;&gt;DataEase&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的开源数据可视化分析工具，可作为 Tableau 的替代品，提供丰富美观的图表展示、制作和数据引擎等功能，支持多种数据链接、拖拽式图表制作和与他人分享，并具备 AI 辅助分析和模板市场等创新功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ovx7Hct4m&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ddean2009/MoneyPrinterPlus&#34;&gt;MoneyPrinterPlus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的全自动化 AI 视频剪辑工具，借助 AI 技术一键生成和批量混剪各类短视频，支持自动发布到视频平台，助力变现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvrAIaFqb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/meltylabs/melty&#34;&gt;Melty&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为 10x 工程师打造的开源 AI 代码编辑器，能够与开发者的整个开发流程集成，理解从终端到 GitHub 的操作，协助高效编写和重构代码，支持多文件大规模更改。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvpglxhG4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Spr-Aachen/Easy-Voice-Toolkit&#34;&gt;Easy Voice Toolkit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套功能丰富的开源 AI 语音工具箱，包括音频处理、语音识别、语音转录、数据集制作和语音合成等，形成完整语音模型训练工作流。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ov8JJd1Z3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chartdb/chartdb&#34;&gt;ChartDB&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Web 的功能强大的数据库图表编辑器，支持多种数据库如 PostgreSQL、MySQL、SQL Server 等，提供基于 AI 的导出功能生成 DDL 脚本方便数据库迁移，可在线使用或本地部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ov0uhu4Py&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mendableai/firecrawl&#34;&gt;FireCrawl&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源且强大的 Web 爬虫工具，可爬取任何网站内容并转换为 Markdown 或结构化数据，为大语言模型训练、检索增强生成（RAG）提供数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OuXaFn2ws&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/1Panel-dev/MaxKB&#34;&gt;MaxKB&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持多种大语言模型对接，内置工作流引擎编排 AI 过程，可无缝嵌入第三方系统，在短时间内获得 9000 +星。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oux1JkeSB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Zeyi-Lin/HivisionIDPhotos&#34;&gt;HivisionIDPhoto&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级的 AI 证件照制作工具，可识别多种用户拍照场景，实现抠图和生成标准尺寸的证件照。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Outin1JV2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Huanshere/VideoLingo&#34;&gt;VideoLingo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款全自动视频翻译的 AI 工具，能够一键对视频进行字幕切割、翻译、精准对齐和个性化配音，生成高质量的字幕和配音。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ouarniyk4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cursor.directory/&#34;&gt;Cursor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款智能代码编辑神器，提供代码补全、错误修复等功能，支持多种编程语言。该项目收集了各语言的最佳配置提示词和使用教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ou3LmbyQh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/linyqh/NarratoAI&#34;&gt;NarratoAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款一站式自动化影视解说的 AI 视频剪辑工具，基于 LLM 实现文案撰写、自动化视频剪辑、配音和字幕生成，是影视解说剪辑神器，可高效创作内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OtVxY92hM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lhl/voicechat2&#34;&gt;voicechat2&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款响应快速且完全本地化的 AI 语音聊天工具，使用 WebSockets 实现低延迟语音交互并允许远程访问，可本地运行语音识别、文本转语音和大语言模型，在 4090 显卡上延迟低至 300 毫秒。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OtfSor20F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/itsOwen/CyberScraper-2077&#34;&gt;CyberScraper 2077&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 OpenAI 大语言模型的强大网络爬虫工具，能够智能理解和解析网页内容，提供简单易用的可视化界面，无需编程知识即可操作使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ot7P94c8X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wan-h/awesome-digital-human-live2d&#34;&gt;awesome-digital-human-live2d&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源项目，旨在打造一个有温度的数字人，支持 Docker 快速部署、Dify 服务接入、ASR、LLM、TTS、Agent 模块化扩展、Live2d 人物模型扩展和控制、PC 端和移动端 Web 访问。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsX1p7nxr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dicklesworthstone/llm_aided_ocr&#34;&gt;LLM-Aided OCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于大语言模型（LLM）的开源 OCR 扫描 PDF 工具，可将原始 OCR 扫描 PDF 文本转换成高准确度、格式正确且易于阅读的 Markdown 文档。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsRkgr9JW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ViggoZ/producthunt-daily-hot&#34;&gt;Product Hunt Daily Hot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 GitHub Action 的自动化工具，每天定时爬取并生成 Product Hunt 热门产品榜单的 Markdown 文件，使用 GPT - 4 模型翻译产品描述，帮助快速查看每日热门榜单。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsQsKDY0a&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BMPixel/moffee&#34;&gt;moffee&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 PPT 制作工具，能够将 Markdown 文档一键转换为干净、专业的幻灯片，提供 web 界面实时预览效果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsFxEhRIP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kedreamix/Linly-Dubbing&#34;&gt;Linly-Dubbing&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源且强大的视频多语言 AI 配音/翻译工具，能自动下载视频、翻译字幕、人声分离、克隆音色配音并合成视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Osw79mpN5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://poloclub.github.io/transformer-explainer/&#34;&gt;Transformer Explainer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可视化交互式学习工具，以 GPT - 2 为例，通过输入文本实时观察 Transformer 各组件（嵌入层、自注意力机制、MLP 等）的工作过程和预测下一个 Token，适合教学和理解 Transformer 内部原理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsmMgmpvX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SakanaAI/AI-Scientist&#34;&gt;AI Scientist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款全球首个自动化科学研究 AI 系统，能够从构思、编写代码、进行实验、总结结果到撰写完整论文和进行同行评审的全过程，支持多种主流大语言模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Os6bNfuRq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jbilcke-hf/clapper&#34;&gt;Clapper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款集成多种 AI 功能的开源视频剪辑工具，可一键生成图像、视频、语音、音乐等素材，并进行二次剪辑，让用户无需专业技能即可通过互动迭代的方式制作视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OrWLifEcS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ozgrozer/ai-renamer&#34;&gt;ai-renamer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Node . js 的命令行工具，可根据文件内容自动批量重命名本地文件、图像或视频，默认使用 Ollama 本地模型如 Gemma、Llama 等进行智能识别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oq3TYgib9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lipku/metahuman-stream&#34;&gt;metahuman-stream&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源项目，实现实时交互流式数字人，支持音视频同步对话，具有多种功能如数字人模型选择、声音克隆、对话被打断处理、全身视频拼接、推流、视频编排和大语言模型对话等，基本可达到商用效果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpVQIrJFX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ssine/pptx2md&#34;&gt;PPTX2MD&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源免费的工具，能够将 PPT 幻灯片转换为 Markdown 文件，支持保留标题、列表、粗体、斜体、颜色、超链接、图片、表格以及合并单元格等 PPT 内容格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpPXpBoi2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://disksing.com/fake-screenshot&#34;&gt;Fake Screenshot Generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可直接在线免费使用的字幕截图生成器工具，可生成逼真的带字幕的截图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpCZIs2Dd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/opendatalab/MinerU&#34;&gt;MinerU&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款一站式、开源、高质量的数据提取工具，能够将 PDF、网页以及多格式电子书转换为 Markdown 格式，提取图像、表格并转换公式为 LaTex，支持多种语言识别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpvVlCyPv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Nutlope/llamatutor&#34;&gt;Llama Tutor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 AI 个人导师工具，基于 Next . js 和 Tailwind CSS 构建，集成 Llama 3 . 1 和 Serper 提供强大的推理和搜索能力，可根据用户选择的教育水平生成个性化导师解答各种问题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpmuQEURu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yihong0618/bilingual_book_maker&#34;&gt;bilingual_book_maker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款利用大语言模型（如 ChatGPT、Claude 等）对文件和图书进行多语言翻译的开源工具，支持 epub、txt 和 srt 等格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoQtZtumW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Doriandarko/claude-engineer&#34;&gt;Claude Engineer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Claude 3 . 5 模型的交互式命令行工具，整合了文件系统操作、网络搜索等功能，可协助完成各种软件开发任务，如智能代码分析、修改建议、项目管理等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoKMRyN4F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/harry0703/AudioNotes&#34;&gt;AudioNotes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的音视频转结构化笔记工具，基于 FunASR 和 Qwen2 构建，可快速提取音视频内容，并利用大模型能力整理成结构化 Markdown 笔记，方便快速阅读。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoIvdqNoc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TahaSh/swapy&#34;&gt;Swapy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单的 JavaScript 开源工具，只需几行代码就可以将网页上任何布局转换为可拖动交换布局，适用于 React、Vue 等主流前端框架。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoBmn2TwN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kkangert/kspider&#34;&gt;Kspider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的可视化爬虫平台，通过流程图配置即可完成数据爬取工作，无需编写代码，对小白极其友好。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoeM0ylVt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BuilderIO/ai-shell&#34;&gt;AI Shell&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的终端 AI 助手，可在命令行界面通过自然语言转换为对应的 Shell 命令执行，支持多种语言输入，提高终端操作效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnGNolhEO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apify/crawlee-python&#34;&gt;Crawlee&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费且非常强大的 Python 网页抓取和浏览器自动化库，旨在构建可靠的爬虫为 AI、大语言模型、检索增强生成或 GPTs 提取数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OntDwxRMQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AugustDev/enchanted&#34;&gt;Enchanted&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的本地大模型 Mac 客户端，类似于 ChatGPT 客户端，需搭配 Ollama 使用，可轻松连接本地部署的私有模型，如 Llama2、Mistral 以及 Vicuna 等，提供在 iOS 生态系统中无过滤、安全、私密和多模态的使用体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnnWp76yF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xenova/transformers.js/tree/v3/examples/whisper-word-timestamps&#34;&gt;Whisper Timestamped&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Transformers . js 的浏览器内语音识别工具，可本地运行 whisper - base 模型进行语音转文字，支持 100 种语言并生成单词级时间戳。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnlAhtJnJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vanna-ai/vanna&#34;&gt;Vanna&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 SQL 生成 AI 框架，允许在自有数据上训练 RAG 模型，通过自然语言准确生成 SQL 查询语句，支持多种主流大模型，使用简单，开源可自行部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmTiME6d3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/posit-dev/great-tables&#34;&gt;Great Tables&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款用于制作高质量表格的 Python 库，内置丰富的表格组件和格式化选项，可以组合创建多种类型的精美表格。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmLfwjEBF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ogkalu2/comic-translate&#34;&gt;Comic Translate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款利用 GPT - 4 视觉能力的开源漫画自动翻译神器，支持多种格式如图像、PDF、Epub 等，可实现多种语言之间互译，包括日语、英语、中文、韩语、德语、荷兰语等，并提供可视化操作界面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmpE3eQpQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codegeex.cn/zh-CN?article=24075&#34;&gt;CodeGeeX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能全面的国产开源代码模型，集成代码补全、生成、问答、解释、工具调用、联网搜索等多种能力，覆盖编程开发各种场景，在百亿参数以下性能最强。同时也提供 CodeGeeX 智能编程助手插件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmawqkiTI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BinNong/meet-libai&#34;&gt;遇见李白&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源项目，旨在通过构建李白知识图谱的 AI 智能体，以生成式对话应用的形式推广和普及李白古诗词文化，最终目标是开发一款生成式对话应用，实现实时互动并提供个性化的李白诗歌鉴赏体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Om2gZgi95&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DAMO-NLP-SG/WebDesignAgent&#34;&gt;WebDesignAgent&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于人工智能的网站构建工具，支持多页面管理、用户自定义添加/删除、迭代优化和视觉优化等功能，可通过文本、图片、视觉线索或混合方式生成设计精美的网站。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlIeVCnbi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/worm128/AI-YinMei&#34;&gt;AI-YinMei&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能齐全的 AI 虚拟主播（Vtuber）工具，集成了 FastGPT 知识库聊天、语音合成、Stable Diffusion 绘画、AI 唱歌等技术，可实现聊天、唱歌、绘画、跳舞、表情切换、换装、搜图、场景切换等多种功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlxOia4uv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adithya-s-k/omniparse&#34;&gt;OmniParse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源工具，能够将各种非结构化数据如文档、表格、图像、视频、音频和网页转化为结构化的可操作数据，方便用于检索增强生成（RAG）和微调。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Olh8vj7To&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CosmosShadow/gptpdf&#34;&gt;gptpdf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 GPT - 4o 视觉大语言模型的开源工具，仅用 293 行代码就能将 PDF 文件解析为 Markdown 格式，几乎完美地解析排版、数学公式、表格、图片和图表等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlgrhbhsQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PeterH0323/Streamer-Sales&#34;&gt;Streamer-Sales&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能够根据商品特点进行解说的卖货主播大模型，通过生成细腻、独到的解说词，激发用户购买欲望，提供多种功能如文案生成、语音转换、视频生成等，旨在成为销售助手，提升销量和用户体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OkEft1zqt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TeamWiseFlow/wiseflow&#34;&gt;Wiseflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款敏捷的信息挖掘开源免费工具，可从网站、公众号、社交平台等渠道爬取相关信息，擅长从公众号文章中提取信息。支持对爬取信息进行筛选、提炼、贴标签等处理，并可整合到任意 Agent 项目中作为动态知识库。可完全本地部署，无需 GPU，适合任何硬件环境。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OkBTkBzRA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/onuratakan/gpt-computer-assistant&#34;&gt;GPT Computer Assistant&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 GPT 客户端应用程序，旨在为 Windows 和 Linux 系统提供类似 macOS 上 GPT 应用的功能，包括屏幕读取、麦克风长音频输入、编写和运行程序以及知识库管理等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OkuOY0Env&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/modelscope/DiffSynth-Studio/blob/main/examples/Diffutoon/README.md&#34;&gt;Diffutoon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的视频动漫化项目，提供 Colab 运行笔记，无需部署即可一键动漫化视频，转换后的视频画面稳定流畅，还可编辑和添加视频效果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OkssQgFpm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/niedev/RTranslator&#34;&gt;RTranslator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费、可离线的实时翻译应用，能够实时将对方说的语言翻译成你能听懂的语言，支持对话模式、对讲模式和文本翻译模式，使用 Meta 的 NLLB 和 OpenAI 的 Whisper 进行翻译和语音识别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Okr5B6urE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ayushpai/AI-Math-Notes&#34;&gt;AI Math Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Python 开发的交互式绘图应用程序，允许用户在画布上手写数学方程，利用多模态大语言模型（LLM）计算并显示结果，实现了类似苹果&amp;quot;备忘录数学计算器&amp;quot;的功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OjqPulncY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://huggingface.co/spaces/Xenova/whisper-web&#34;&gt;Whisper Web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 OpenAI 的 Whisper 语音识别模型的开源 Web 应用程序，允许直接在浏览器中运行使用 Whisper 进行语音转文本，支持 WebGPU 加速，无需后端服务器，可导出 TXT 和 JSON 格式文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oj5Cn7Qqk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/binary-husky/gpt_academic&#34;&gt;GPT Academic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的 GPT 学术优化开源项目，提供论文翻译、代码解析、知识获取、语法校对、论文润色、摘要生成等多种功能，支持接入多种 LLM 模型，提升学术研究效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OiYyb1dgs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/andrewyng/translation-agent&#34;&gt;Translation Agent&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套由吴恩达老师开源的 AI 翻译工作流程，基于大语言模型进行翻译、反思和优化，可控制语气、地区和术语翻译一致性，翻译质量媲美商业工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OiDkSzO3J&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VinciGit00/Scrapegraph-ai&#34;&gt;ScrapeGraphAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于大语言模型和直接图逻辑的 AI 网页爬虫工具，可以根据用户提示自动为网站和本地文档创建爬取管道，支持单页、多页和语音爬取，提高数据采集效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OhVJA5eQR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/idootop/mi-gpt&#34;&gt;MiGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源项目，旨在将小米小爱音箱打造成专属的 AI 语音助手，将小爱音箱和米家智能设备与 ChatGPT 等大模型的理解能力完美融合，提供 LLM 回答、角色扮演、流式响应、长短期记忆、自定义 TTS 和智能家居 Agent 等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OhHoECwbO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jianchang512/pyvideotrans&#34;&gt;pyVideoTrans&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的视频翻译配音工具，可将一种语言的视频自动翻译为指定语言的视频，生成字幕和配音，支持多种翻译服务和配音引擎，可本地离线使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OhCSAkXdw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Jazee6/cloudflare-ai-web&#34;&gt;cloudflare-ai-web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源项目，利用 Cloudflare Workers AI 免费提供的大模型，可快速搭建多模态 AI 平台，支持一键部署、无需服务器、个性化定制等，集成了 ChatGPT、Stable Diffusion 等多种 AI 模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ohsh2rkhe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jianchang512/ChatTTS-ui&#34;&gt;ChatTTS-ui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开箱即用的 ChatTTS 安装包，提供 Web 界面和 API 接口，支持 Windows、Linux、macOS 部署，Windows 用户可直接下载安装包一键安装使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgO23Cn8P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ItzCrazyKns/Perplexica&#34;&gt;Perplexica&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由 AI 驱动的开源搜索工具，能够深入互联网提供精准答案，理解问题并优化搜索结果，提供带引用来源的明确答案。具有隐私保护、本地大语言模型支持、双模式搜索和专注模式等特征。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgkybrvOe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ragapp/ragapp&#34;&gt;RAGapp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款无需编码的可视化界面工具，用于配置基于 LlamaIndex 构建的 RAG 聊天机器人，类似于 OpenAI 的 GPT 模型，可轻松部署在自有云基础设施中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgfDLz9xc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gabotechs/MusicGPT&#34;&gt;MusicGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 AI 音乐生成器，支持在 Windows、macOS 和 Linux 系统上本地高效运行最新音乐生成 AI 模型，如 Meta 的 MusicGen 模型，无需安装依赖，易于使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgcuWezqY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/khoj-ai/khoj&#34;&gt;Khoj&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款融合本地文档和在线搜索的 AI 第二大脑工具，可连接个人知识库、提供强大搜索引擎、支持在线离线使用，并提供定制 AI 智能代理协助完成任务，完全开源免费。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OfW04hxRS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Amery2010/TalkWithGemini&#34;&gt;Talk With Gemini&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可一键免费部署的私人 Gemini 应用程序，支持最新的 Gemini 模型，如 Gemini 1 . 5 Pro、Gemini 1 . 5 Flash 等，具有多模态支持、语音模式、视觉识别、助理市场、Markdown 支持、上下文压缩、隐私安全、精心设计的 UI 等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OfKdrkyjt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/txstc55/ugly-avatar&#34;&gt;ugly-avatar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源免费的潦草头像生成器，可以生成极具特色的头像，受到许多网友的喜爱。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ofki4s5aO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/solidSpoon/DashPlayer&#34;&gt;DashPlayer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为英语学习打造的视频播放器，提供双语字幕、按字幕跳转、查词查询、可调整界面尺寸、记录播放位置、蓝牙遥控操作、夜间模式、AI 字幕生成、长视频切分和视频下载等功能，助力通过观看视频提升英语水平。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ofc2DBgRT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BasedHardware/openglass&#34;&gt;OpenGlass&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于开源硬件的 AI 智能眼镜系统，只需 20 美元的成本即可将普通眼镜升级为智能眼镜，实现记录生活、识别物体、计算卡路里、实时翻译等多项 AI 功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oe6S6wjjP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gezhaoyou/picprose&#34;&gt;PicProse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的封面图片制作工具，能帮助用户轻松为 Medium、Wordpress、微信等平台的文章制作精美封面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OaVb6EzZm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jina-ai/reader&#34;&gt;Reader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的工具，专门用于将网页内容转换为 Markdown 格式，方便将网页内容整合到知识库中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oa7PjB0mS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dhravya/supermemory&#34;&gt;SuperMemory&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的个人知识管理工具，可以帮助用户轻松收集和管理网上的有价值内容，通过 AI 快速查找和回顾已保存的内容，打造属于自己的&amp;quot;第二大脑&amp;quot;。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oa0kHfLaq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://storm.genie.stanford.edu/&#34;&gt;STORM&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由斯坦福大学开发的创新型 AI 写作工具，可根据主题自动收集信息、创建大纲，模拟专家对话并撰写完整文章，帮助编写出具有深度和广度的高质量内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O9vH5ciur&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nilsherzig/LLocalSearch&#34;&gt;LLocalSearch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款完全本地化的 AI 搜索集成工具，无需依赖任何外部 API，通过 LLM Agents 寻找答案，支持低配置硬件运行，提供详细进度日志和后续问题交互，界面美观支持浅色深色主题，支持 Docker Compose 部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8XwhBOt1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nashsu/FreeAskInternet&#34;&gt;FreeAskInternet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的基于搜索的问答 AI 工具，可本地运行无需 GPU 硬件支持，通过多引擎搜索并利用 GPT - 3 . 5 处理结果生成答案，确保隐私安全。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8EFinFty&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/palxiao/poster-design&#34;&gt;poster-design&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的在线创意图片编辑器，适用于海报图片生成、电商分享图、文章长图等场景，提供丰富的编辑功能，如元素拖拽、图片编辑、SVG 编辑、画布自定义等，无需客户端即可轻松完成图文排版。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8DueqJmG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/open-webui/open-webui&#34;&gt;Open WebUI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为大型语言模型（LLM）设计的可扩展且功能丰富的 Web 界面，支持运行各种 LLM 模型，包括 Ollama、OpenAI 兼容 API、Gemini、Groq、Claude 等，提供直观界面、响应式设计、代码语法高亮、Markdown 和 LaTeX 支持、本地检索增强生成（RAG）集成、多模型支持与多模态互动、安全和多用户管理等丰富功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7TwOm5sS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Evil0ctal/Douyin_TikTok_Download_API&#34;&gt;Douyin_TikTok_Download_API&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的高性能异步数据爬取工具，支持 API 调用和在线批量解析及下载无水印视频或图集，覆盖抖音、快手、TikTok、B 站等多个视频平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7K6jeyVS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://aicomicfactory.app/&#34;&gt;AI Comic Factory&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 LLM + SDXL 技术的开源免费在线 AI 漫画生成工具，可自动生成精美漫画作品，支持自定义 LLM 和图像生成模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7IVfn7ua&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SunoAI-API/Suno-API&#34;&gt;Suno-API&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个非官方的 Suno AI API 项目，支持生成歌曲、歌词等功能，具有自动维护 token、全异步响应、代码简单易维护等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7gDL4J5k&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mshumer/ai-journalist&#34;&gt;Claude-Journalist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Claude 3 的 AI 写作助手，可根据输入主题自动搜索相关信息、撰写和编辑高质量文章，提高写作效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6TRedZob&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/harry0703/MoneyPrinterTurbo&#34;&gt;MoneyPrinterTurbo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 AI 工具，可以根据提供的主题或关键词自动生成视频文案、素材、字幕和背景音乐，并合成高清短视频，支持多种功能如自定义文案、视频尺寸、批量生成、语音合成、字幕设置等，提高短视频制作效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6Omh9qzQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zeke/livestory&#34;&gt;LiveStory&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款利用 AI 进行实时语音绘图的工具，将传统的文本输入换成语音输入，实时生成图像，支持语音控制绘图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6cO4n2jo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chidiwilliams/buzz&#34;&gt;Buzz&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费、简洁、可离线的音频转录和翻译工具，基于 OpenAI Whisper 开发，支持拖放导入音视频文件进行转录和翻译，转录文本可导出多种格式，支持多种语音识别框架和命令行操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5Rwp4vbC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NanmiCoder/MediaCrawler&#34;&gt;MediaCrawler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的自媒体爬虫工具，支持小红书、抖音、快手、B 站、微博等平台的视频、图片、评论、点赞、转发数据抓取，具备多种登录方式、指定数据爬取、IP 代理池和多种数据格式保存等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5AWioP9X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6YeOe86&#34;&gt;小浣熊智能助手&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由商汤科技研发的功能全面的国产 AI 工具，内置代码模式和办公模式，可大幅提升编程开发和协作办公效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4QYSysWr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/6174/comflowyspace&#34;&gt;Comflowy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款针对 Mac 用户优化的 ComfyUI 整合包，提供一键部署、模型管理、工作流管理和扩展管理等功能，使用体验比官方 ComfyUI 更佳。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O3D4eDi2N&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lxfater/inpaint-web/tree/main&#34;&gt;Inpaint-web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 WebGPU 技术开发的开源免费图像修复和放大工具，可直接在浏览器上运行，无需客户端，提供图像局部擦除修复和超分辨率放大功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O3t0QckJj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Eladlev/AutoPrompt&#34;&gt;AutoPrompt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个自动优化提示词的开源框架，可根据用户意图生成高质量详细的提示词，并通过迭代数据集不断优化提示词，减少工作量，解决敏感性和歧义性问题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O2QI6s9hf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/melon/qingwu-zimu&#34;&gt;青梧字幕&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Whisper 的开源字幕提取工具，支持智能提取、编辑和高质量翻译字幕，可生成单/双语字幕并选择多种格式下载。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O2IGr0tzU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qnguyen3/chat-with-mlx&#34;&gt;Chat with MLX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的本地 AI 对话助手工具，可与本地数据进行交互，支持多种文件格式和语言，并可集成多个开源大语言模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O2Ijy2cy3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fofr/cog-stickers&#34;&gt;StickerBaker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 贴纸制作工具，结合了 Stickers SDXL Lora 和 BRIA 背景移除工具，只需输入简单的提示词，即可快速生成高清精美的贴纸。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O2yomp6bK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/levihsu/OOTDiffusion&#34;&gt;OOTDiffusion&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 虚拟试衣工具，支持一键试穿上半身/下半身/连衣裙，服装与模特贴合自然，试穿效果逼真。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1CSjxOJV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6YSFjDa&#34;&gt;MoneyPrinter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款自动化创建短视频的工具，可根据主题自动生成带配乐及字幕的视频，并上传到 YouTube 获取收益。支持使用 GPT、DALL - E 等大模型生成脚本和图像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1m9sxX52&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Nutlope/notesGPT&#34;&gt;NotesGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的语音笔记工具，界面简洁，支持语音输入转文字和自动总结，内置 Mixtral LLM 和 Whisper 转录引擎，支持中英混合输入。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1kYomKnv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/reorproject/reor&#34;&gt;Reor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由 AI 驱动的开源免费桌面笔记工具，能够智能整理和归纳笔记内容，自动关联相关想法，内置 LLM 提供问答和语义搜索功能，可作为个人知识管理工具使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1jXYpMNd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lencx/Noi&#34;&gt;Noi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的高颜值 AI 客户端，集成了 ChatGPT、Claude、Bard、Poe 等主流 AI 模型，并内置 GitHub、HuggingFace 和 VS Code 等工具，支持自定义 Prompt 管理、多语言、多主题等功能，可在 MacOS、Windows、Linux 系统上安装使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NF1I7z18y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dooy/chatgpt-web-midjourney-proxy&#34;&gt;ChatGPT Web + Midjourney Proxy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能全面的镜像站，支持 AI 对话、AI 换脸、Midjourney、GPTs、TTS Whisper 等多种 AI 功能，提供 Vercel 一键部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEIagC5Iw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bclswl0827/ChatGemini&#34;&gt;ChatGemini&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的简洁 Google Gemini 网页客户端，界面和交互类似 ChatGPT，支持在对话框中上传图片并自动调用 Gemini - Pro - Vision 模型进行图像识别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NExFt37tW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/collabora/WhisperFusion&#34;&gt;WhisperFusion&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 WhisperLive 和 WhisperSpeech 构建的 AI 对话系统，集成了 Mistral 大语言模型，实现了极低延迟的语音与 AI 对话体验，并通过 TensorRT 引擎优化和 torch . compile 技术提升了运行效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEqulvSJE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/leptonai/search_with_lepton&#34;&gt;search_with_lepton&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款使用不到 500 行代码构建的对话式搜索引擎，实现了类似 Perplexity 的效果，集成了大语言模型（Llama2、Mixtral）和搜索引擎（支持 Bing、Google 搜索），具有可自定义的个性化 UI 界面，支持搜索结果的共享和缓存。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEmX9xo03&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/all-in-aigc/aicover&#34;&gt;AI红包封面生成器&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 DALL - E 3 的 AI 红包封面生成工具，支持自定义生成红包封面图像，采用 Next . js 全栈开发，集成了多种功能如谷歌登录、图片上传、支付等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEf2A0zm1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zed-industries/zed&#34;&gt;Zed&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的高性能可多人协作代码编辑器，集成了 AI 代码生成和重构功能，提供语言感知、集成终端、多种编辑模式、团队协作和远程代码操作等强大功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NDWgHEVOi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mlc-ai/web-llm&#34;&gt;Web LLM&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在浏览器中直接运行大型语言模型的工具，支持 Llama 2 7B / 13B、Mistral 7B 和 WizadMath 等模型，并通过 WebGPU 实现加速，无需服务器支持。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NDMulfXnj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/collabora/WhisperSpeech&#34;&gt;WhisperSpeech&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Whisper 语音识别模型的开源文本转语音工具，目前仅支持英语，作者计划在下一个版本增加多语言支持，可用于商业用途。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCHfHoIKx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RVC-Boss/GPT-SoVITS&#34;&gt;GPT-SoVITS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的中文语音克隆工具，仅需 5 秒语音样本即可实现 80 %~ 95 %相似度的声音克隆，提供 1 分钟语音可逼近真人效果并生成高质量 TTS 模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCo6Xt3ta&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/netease-youdao/QAnything&#34;&gt;QAnything&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的知识库问答引擎，支持本地部署和调用云端大模型服务，可导入多种格式文档，提供准确快速可靠的问答体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCivo7c6k&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Portkey-AI/gateway&#34;&gt;AI Gateway&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款统一的 API 网关工具，可轻松快速接入 100 多种大语言模型，如 OpenAI、Anthropic、Mistral、LLama2、Google Gemini 等，具有占用空间小、处理速度快、支持负载均衡、故障转移、自动重试等优势，已在超过 100B Tokens 上进行实战测试。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NC6ILzu2Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liwenju0/cutword&#34;&gt;cutword&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单快速的中文分词和命名实体识别工具，分词速度是知名&amp;quot;结巴&amp;quot;中文分词的两倍，字典文件根据最新数据统计得到，词频更加合理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NC3YicKMg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/piddnad/DDColor&#34;&gt;DDColor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 AI 的图像着色工具，可为黑白老旧照片和动漫游戏场景提供逼真自然的着色效果，实现照片级真实感。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NBYtl76nL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AIGCDesignGroup/ReplaceAnything&#34;&gt;ReplaceAnything&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由阿里巴巴发布的 AI 内容替换工具，能够准确保留指定的物体（如人脸、人物、服装、物品等），并通过输入提示词实现超高质量的内容替换，可用于人物替换、服装替换、背景替换等多种场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NBXz9pRhx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/janhq/jan&#34;&gt;Jan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的本地 AI 工具，可无需编码运行主流大语言模型如 Mistral、Llama、Mixtral 等，支持 Windows、Mac 和 Linux 系统，拥有简洁美观的 UI 界面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NB2WZDMgy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;nan&#34;&gt;Mobile ALOHA&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款多功能家务机器人，可以帮助浇花、拖地、做饭、逗猫、扔垃圾、洗衣服、铺床单、整理衣物等家务活动，具有模仿学习和远程操作功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NAqQMF5ST&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Frrrrrrrrank/auto_job__find__chatgpt__rpa&#34;&gt;Auto Job Find Assistant&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款结合 GPT 和 RPA 技术的自动投简历助手，可根据个人简历和职位要求自动匹配合适的工作机会，生成自我介绍和求职信，并自动发送给 HR，实现一键寻找工作的全流程自动化。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NAimK7naB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;免费书籍&#34;&gt;免费书籍&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangwei1237/LLM_in_Action&#34;&gt;Large Language Model in Action&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本专注于大语言模型实践应用的开源书籍，通过介绍工具和案例实践，帮助读者快速上手大模型应用开发。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P63IAy7du&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://%E6%97%A0&#34;&gt;Select Star SQL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费的互动式学习 SQL 书籍，共五章内容，每章约 30 分钟，涵盖行操作、分组聚合、表连接等主题，结合实际案例学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCnwbDxHU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NannyML/The-Little-Book-of-ML-Metrics&#34;&gt;The Little Book of ML Metrics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本面向数据科学家的开源免费书籍，涵盖广泛的机器学习指标，包括回归、分类、聚类、排行、计算机视觉和自然语言处理等领域，旨在成为数据科学家的快速参考手册。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBxRDpUiz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://lfs.xry111.site/zh_CN/12.2/index.html&#34;&gt;Linux From Scratch 中文翻译版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费的在线书籍，教授从源代码开始构建整个 Linux 系统的过程，深入了解 Linux 工作原理，支持个性化定制和优化，提高系统安全性，通过实践获得 Linux 系统的深刻理解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAJjE4NxJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/handsOnLLM/Hands-On-Large-Language-Models&#34;&gt;Hands-On Large Language Models&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本由吴恩达老师推荐的关于大语言模型的实践指南书籍，涵盖语言模型基础知识、文本分类、提示工程、语义搜索、多模态语言模型等内容，配有案例代码、插图和引用论文，帮助读者深入理解和使用大语言模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxSqEpjmb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://foxsen.github.io/archbase/index.html&#34;&gt;计算机体系结构基础（第三版）&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本由&amp;quot;龙芯之父&amp;quot;胡伟武老师等编写的开源免费在线书籍，涵盖指令系统结构、计算机硬件结构、CPU 微结构、并行处理结构、计算机性能分析等内容，适合本科生、研究生和技术人员学习参考。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvI5Adb3R&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/R7cZfp3&#34;&gt;Decision Making Under Uncertainty&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本由麻省理工学院出品的免费电子书，涵盖概率推理、序列决策问题、模型/状态不确定性以及多 Agent 系统等内容，使用大量示例和练习帮助读者理解不同算法的直觉和应用场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsEapfo3p&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/llwslc/grammar-club&#34;&gt;Grammar Club&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源且免费的在线英语语法学习书籍，采用循序渐进的方式，从初级到高级分为三大篇幅，涵盖简单句、复句、合句和简化从句等内容，旨在培养英语能力、建立信心并增强阅读兴趣。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oq5hdAmUT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/careywyr/UnderstandingDeepLearning-ZH-CN&#34;&gt;《理解深度学习》中文版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本由麻省理工开源的深度学习教材中文版，全面涵盖深度学习基础概念、监督学习、强化学习等内容，并提供 PPT、笔记和 Python 练习 Demo。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoxD0vPwf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/udlbook/udlbook&#34;&gt;Understanding Deep Learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本来自麻省理工的开源书籍，全面涵盖了深度学习的基础概念、监督学习、强化学习、线性回归、神经网络、扩散模型等内容。该书提供了 PPT、笔记和 68 个 Python 练习 Demo 供学习和实践。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oml7ZfYGb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luckrnx09/python-guide-for-javascript-engineers&#34;&gt;Python Guide for JavaScript Engineers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本面向 JavaScript 工程师的 Python 学习指南，由一名前端工程师编写，系统介绍了 Python 环境搭建、项目开发等内容，并对比了 JavaScript 和 Python 的异同，帮助 JavaScript 工程师快速掌握 Python 语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Om6N3uysr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/isno/theByteBook&#34;&gt;深入超高可用架构原理与实践&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的架构设计书籍，涵盖云计算、网络、分布式系统、容器技术、可观测性、服务网格、DevOps 等主题，帮助程序员深入理解相关技术的原理与实践。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlzWze7Y2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;学习教程&#34;&gt;学习教程&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6mkWHyD&#34;&gt;Reasoning with o1&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一门由 OpenAI AI 解决方案主管 Colin Jarvis 主讲的免费 AI 短课程，教授如何有效使用 OpenAI 最新推理模型 o1，包括多步骤任务规划、代码开发与编辑、图像理解等实践项目，帮助学习者掌握 o1 模型的高级推理能力。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5KRx9BEa&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/EJKb2nf&#34;&gt;A Programmer&amp;rsquo;s Guide to English&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份专为程序员设计的英语学习指南，通过程序员易于理解的方式剖析语言学习本质，提供适合不同水平的训练方法和学习资料推荐，并从构建英语识别程序的角度助力学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODalbpiMt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hesamsheikh/ml-retreat&#34;&gt;ML Retreat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份从中级到高级的 AI 学习路径，包含作者在学习高级机器学习时的个人笔记和资源，涵盖从基础到更高级主题的深入理解，如从头构建大语言模型、LLM 幻觉深入研究以及 LLM 超越注意力机制等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBum9wgGe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.cs.cmu.edu/~hn1/documents/machine-learning/notes.pdf&#34;&gt;Machine Learning Course Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份来自卡内基梅隆大学的机器学习入门课程笔记，涵盖了机器学习各主题的要点，包括非参数模型、线性回归、逻辑回归、神经网络、支持向量机等，针对初学者提供全面的概念解释、数学证明和算法步骤。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OzRhXEtCy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A68R6CQ0&#34;&gt;AI Python for Beginners&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一门由吴恩达老师主讲的免费 AI 短课程，面向初学者，教授 Python 编程基础知识以及集成 AI 工具进行数据操作、分析和可视化，通过真实项目实践强化 Python 技能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwBhjxcpT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6RCcp0z&#34;&gt;软件工程师学习指南&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份从零开始成为软件工程师的详细学习指南，涵盖计算机基础知识、软件开发工具和流程、数据库、面向对象编程、DevOps 工具等内容，从 Python 语言入门，最后提供编码面试准备、工作选择和持续学习建议。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ov7LUjLhG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DorsaRoh/Machine-Learning&#34;&gt;Machine-Learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份从零开始学习机器学习算法的教程，包含神经网络和 Transformer 模型的详细解释和 Python 实现代码，如 Neuron、Layer 和 NeuralNetwork 类，还提供机器学习视频和 Jupyter Notebook 文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OuNwC1Hgi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xuchengsheng/spring-reading&#34;&gt;Spring-Reading&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份深入了解 Spring 源码的系列学习资料，涵盖了 Spring 框架的核心概念和关键功能，如资源加载、表达式语言、Bean 定义、Aware 接口、核心注解和 AOP 等，帮助更透彻地理解 Spring 内部工作机制。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpZnTy6ae&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6aP9tQt&#34;&gt;Machine Learning Specialization&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套由吴恩达老师主讲的机器学习专业课程，包括机器学习回归与分类、高级学习算法、无监督学习等多个领域，涵盖监督学习、无监督学习、神经网络等内容，适合初学者和希望在人工智能领域发展的专业人士学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Opx6pj0Zz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/decodingml/llm-twin-course&#34;&gt;LLM Twin Course&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一门全面的大型语言模型（LLM）免费学习课程，教授如何构建生产级别的 LLM 和基于 LLM 的检索增强生成（RAG）系统，涵盖系统设计、数据工程、特征管道、训练管道和推理管道等方面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OorVRAcQU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/juraam/stable-diffusion-from-scratch&#34;&gt;Stable Diffusion From Scratch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套系统性的教程，讲解 Stable Diffusion 和扩散模型的工作原理及其背后的数学知识，并提供一系列步骤指导训练完成一个扩散模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnZEnsNN7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jla524/fromthetensor&#34;&gt;From Tensor to Stable Diffusion&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的深度学习教程，提供为期 9 周的课程大纲，从张量基础到稳定扩散模型实现，包括视频讲解、代码实现和论文学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmNpttYXs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datawhalechina/so-large-lm&#34;&gt;大模型理论基础&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份关于大规模预训练语言模型的教程资料集合，涵盖数据准备、模型构建、训练策略、模型评估与改进等内容，旨在为读者提供深入的理论知识和实践方法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlNW47BIP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FareedKhan-dev/AI-text-to-video-model-from-scratch&#34;&gt;AI Text-to-Video Model from Scratch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份手把手教程，教你如何使用 Python 从零开始构建一个文本到视频生成模型，涵盖理论概念、架构设计和编码实现等全过程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlFSO6VRt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jaywcjlove/nginx-tutorial&#34;&gt;nginx-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Nginx 入门学习笔记，涵盖基础安装、参数说明、配置讲解、第三方模块安装、性能优化及常见使用场景等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlEvzdgci&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mrdbourke/pytorch-deep-learning&#34;&gt;PyTorch Deep Learning Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的《从零到精通深度学习 PyTorch》教程，涵盖 PyTorch 基础、深度学习工作流程、计算机视觉、自定义数据集处理、模块化代码编写及模型部署等内容，提供视频和代码示例，适合有 Python 编程和基础机器学习知识的初学者。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlpPMu4WI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://genai-handbook.github.io/&#34;&gt;Generative AI Handbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份系统化的生成式人工智能学习路线手册，包含 9 大章节，涵盖生成式 AI 的基础知识、实践应用和最新研究进展，并提供相关学习资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ok3Ix6QQY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.lingohut.com/zh&#34;&gt;LingoHut&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个免费的在线语言学习平台，提供 45 种语言的学习资源，包括 125 节免费课程，涵盖日常用语和词汇，让你用母语轻松学习新语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OjHklDrnR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WTFAcademy/WTF-zk&#34;&gt;WTF-zk&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份零知识证明入门教程，旨在让仅有高中数学基础的人也能入门零知识证明（zk）技术，教程使用 Python 复现相关算法，需要一些 Python 语言基础。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgvlVhJdx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mainmatter/100-exercises-to-learn-rust&#34;&gt;100-exercises-to-learn-rust&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套包含 100 个练习的 Rust 编程语言学习资源，旨在帮助初学者从零基础逐步掌握 Rust 编程，最终能够独立编写 Rust 程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OfDgO9yQA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LLMBook-zh/LLMBook-zh.github.io&#34;&gt;《大语言模型》电子书籍&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份全面系统地介绍大语言模型的电子书籍，涵盖基础理论、预训练、微调与对齐、使用部署以及评测与应用等内容，为大模型入门读者提供详细指南。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oflvak2z1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lordog/dive-into-llms&#34;&gt;《动手学大模型》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份由上海交通大学《人工智能安全技术》课程讲义拓展而来的编程实战教程系列，通过实践帮助快速入门大模型相关技术，涵盖模型微调与部署、提示学习与思维链、知识编辑、模型水印以及大模型智能体与安全等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OdKhKlOrt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/elicit/machine-learning-list&#34;&gt;machine-learning-list&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份较为全面的机器学习教程，涵盖从基础到高级再到实践与应用的内容，包括基本简介、训练和微调、推理和执行策略、数据集处理以及实际应用等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OaaWfFiNX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bradtraversy/50projects50days&#34;&gt;50projects50days&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份包含 50 个使用 HTML、CSS 和 JavaScript 实现的小 Demo 的项目集合，适合前端初学者练手，涵盖动画导航、背景滑块、密码生成器、图像轮播等常见网站功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O9y3cCdKM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datawhalechina/self-llm&#34;&gt;self-llm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份超全面的开源大模型使用指南，提供针对国内初学者的开源大模型教程，通过 AutoDL 平台简化模型部署、使用和应用流程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8MUIyrVD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liyupi/sql-mother&#34;&gt;SQL之母&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个免费的闯关式 SQL 自学网站，通过有趣的交互式关卡，让初学者从 0 到 1 掌握常用 SQL 语法，包括 30 多个关卡、在线提交代码、自由选择关卡、自定义关卡等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5TNi3BCb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huggingface/course&#34;&gt;Hugging Face AI Courses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套由 Hugging Face 出品的 4 门 AI 学习课程，涵盖自然语言处理、深度强化学习、音频处理和开源 AI 开发等主题，适合初学者免费学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4GmqkbnY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cuixueshe/earthworm&#34;&gt;earthworm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个通过连词构句的方式帮助用户更好地学习英语的开源项目，从简单到复杂的句子逐步训练，让用户轻松掌握写出长句子，顺便还可以练习键盘英文打字。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4es38OKr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/farhanashrafdev/90DaysOfCyberSecurity&#34;&gt;90DaysOfCyberSecurity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 90 天网络安全学习计划，涵盖网络基础、安全基础、Linux、Python、流量分析、Git、ELK、AWS、Azure 和黑客攻击等主题，提供完整的学习资源和材料。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEo8e4Qju&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rasbt/LLMs-from-scratch&#34;&gt;Build a Large Language Model (From Scratch)&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套从零开始构建类似 ChatGPT 的大型语言模型（LLM）的教程，涵盖了文本数据处理、注意力机制实现、模型构建、预训练、微调等内容，帮助读者深入了解 LLM 的工作原理和实现方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEbXf8R0H&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mlabonne/llm-course&#34;&gt;LLM Course&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源免费的大语言模型课程，包含详细的学习路线和实践笔记，分为三个部分：LLM 基础教程、LLM 深入探索和 LLM 应用与部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NDEaNgSEd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cs50.harvard.edu/x/2024/&#34;&gt;CS50&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一门由哈佛大学免费开放的计算机科学和编程入门课程，教授编程基本原理和计算思维方法，涵盖 C、Python、SQL、HTML、CSS 和 JavaScript 等多种语言，最后以终极项目作为收官。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NDDbUuY3i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/byoungd/English-level-up-tips&#34;&gt;English-level-up-tips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份系统化的英语学习指南，包含认知、单词、听力、阅读、口语、写作和扯淡等七大章节，旨在帮助用户高效提升英语水平。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NDhArlM4d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yeasy/docker_practice&#34;&gt;Docker 从入门到实践&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份全面的 Docker 学习指南，涵盖了 Docker 的基础知识、安装、镜像使用、容器操作、数据管理、网络配置等内容，旨在教会新手有效使用 Docker。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCpzLCrZj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;实用工具&#34;&gt;实用工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/stark81/VutronMusic&#34;&gt;VutronMusic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值的第三方网易云音乐播放器，支持本地歌曲、离线歌单播放，读取歌曲封面、内嵌歌词等功能，同时支持线上信息匹配、云盘、对歌曲评论，界面纯净无广告。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P7iwOnglL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/addyosmani/squish&#34;&gt;Squish&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的图像压缩工具，支持多种图像格式，具有高性能压缩优化功能，能保持图像质量不变，并提供批量处理、格式转换、实时预览等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6Uy8njRw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/schlagmichdoch/PairDrop&#34;&gt;PairDrop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开箱即用的跨平台文件传输工具，无需注册和安装，只需浏览器即可在同一局域网内任意设备之间自由传输文件，还支持创建临时公共房间实现公网传输，采用点对点传输保证数据安全隐私。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6PDIrGgz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bluewave-labs/checkmate&#34;&gt;Checkmate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值的可视化实时监控工具，支持网站、页面加载速度、Docker 容器、Ping 响应等多种监控类型，并提供服务器 CPU、内存、磁盘和温度等状态信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6Oatg3Kv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jason5ng32/MyIP&#34;&gt;MyIP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 IP 工具箱，可以检查 IP 地址、地理位置、DNS 泄露、网速测试、Ping 测试和网站可用性等，提供 258 项安全检查清单及详细解释。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6GD6rY0f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://hgithub.com/mfontanini/presenterm&#34;&gt;Presenterm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源工具，能够在终端上演示由 Markdown 创建的精美 PPT，支持代码高亮、图片展示、LaTeX 公式渲染等功能，内置丰富主题风格并可自定义，还可导出 PDF 文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6sgEaqDS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tichau/FileConverter&#34;&gt;File Converter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款实用的文件格式转换工具，支持视频、音频、图片和文档等多种文件格式转换，可以快速完成文件格式转换和压缩，支持批量处理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6ek51Q56&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mistricky/CodeSnap&#34;&gt;CodeSnap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Rust 开发的代码截图工具，可离线使用，支持 Sublime Text 代码语法高亮主题，可自定义字体、行号、水印等，支持 PNG、SVG 和 HTML 输出格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6d90tfJ1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/soulteary/ip-helper&#34;&gt;IP Helper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简洁的 IP 信息查询工具，支持 Web、命令行、Telnet 和 FTP 等多种查询方式，提供 IP 地理位置查询、Token 认证和自定义域名等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P69pE9DTa&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ShouChenICU/FastSend&#34;&gt;FastSend&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 WebRTC 技术的开源免费点对点文件传输工具，支持快速安全的文件和目录同步传输，具有加密传输、局域网优化、简洁界面等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5QyEsF1z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JunyaoHu/academic-project-page-template-vue&#34;&gt;academic-project-page-template-vue&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Vue 开发的学术论文项目页面模板，支持轮播图、嵌入视频、数据可视化等丰富功能，还能一键复制引用格式，内置评论系统，非常适合研究人员快速直观地呈现论文基本信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5BAesHje&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/janreges/siteone-crawler&#34;&gt;SiteOne Crawler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用且功能强大的网站分析工具，可一键完成网站分析、性能检测、SEO 优化建议，并导出完整的离线 HTML 分析结果，用于网站分析优化。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P5s0xc6FE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/git-jiadong/wechatDataBackup&#34;&gt;wechatDataBackup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款微信聊天记录导出工具，提供类似微信的简易操作界面，支持一键导出聊天记录、图片、视频、链接、语音、文件和表情等信息。还支持按类型、日期、群成员进行检索，以及多开账号选择导出和数据切换。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P3k7T5BOE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/m1k1o/neko&#34;&gt;Neko&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的虚拟浏览器工具，支持多人同时访问和控制同一浏览器界面，实现画面和声音同步，内置聊天系统、文件传输等功能，可用于远程协作、在线观影等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P3aB5gbmE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/koodo-reader/koodo-reader&#34;&gt;Koodo Reader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的跨平台电子书阅读器，支持多种格式导入、多种阅读模式、听书、翻译、词典等功能，并提供个性化排版、笔记标注等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P1mEcsNta&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kingToolbox/WindTerm&#34;&gt;WindTerm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值且功能强大的跨平台终端工具，支持多种协议连接、文件传输、多语言界面、命令补全、文件管理、分屏显示等功能，具有高性能、低延迟和低内存占用的特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P0qU8soSZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/marktext/marktext&#34;&gt;MarkText&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值的开源 Markdown 编辑器，界面简洁干净，提供实时预览、多种主题和编辑模式等功能，支持数学公式、表情符号、快捷键等，可导出 HTML 和 PDF 文件，适用于 Windows、macOS 和 Linux 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P0htEbTHs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jaywcjlove/rightmenu-master&#34;&gt;RightMenu Master&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Finder 右键菜单增强工具，内置多个实用预设操作，支持移动复制文件、创建新文档、代码高亮预览、快捷打开常用文件夹和终端等，旨在提升 Mac 用户的工作效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OFSlBwmq4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/filecxx/FileCentipede&#34;&gt;File Centipede&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的文件上传/下载管理器，支持多种协议如 HTTPS、BT /磁力链接、FTP、WebDAV、m3u8 等，内置多种实用辅助功能，还提供浏览器插件抓取网站音视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OFDdYCVjZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/paperless-ngx/paperless-ngx&#34;&gt;Paperless-ngx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的文档管理系统，能够将纸质文档转换为在线可搜索的文档，支持 OCR 技术、自动分类、多种文件格式、多语言识别、全文搜索等功能，界面美观，提供权限管理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OFtNu4PO5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yournextstore/yournextstore&#34;&gt;Your Next Store&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套基于 Next . js 开发的 Shopify 独立站搭建开源解决方案，使用 Stripe 管理产品及支付，界面简洁美观，提供完整的购物流程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OFkmZxzKo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Uahh/ToastFish&#34;&gt;ToastFish&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款利用 Windows 通知栏背单词的开源工具，可在工作或上课时隐蔽地背诵英语单词，支持自定义词库、设置背诵数量和单词测试等实用功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEJQ41h7r&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HeyPuter/puter&#34;&gt;Puter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的个人云电脑工具，提供丰富功能、极致体验和高度个性化定制，可作为网盘、开发环境、远程桌面等使用，支持自托管保护隐私。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEwSntki0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6nITzAU&#34;&gt;MD3-Windows&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Material You 设计风格的 Windows 桌面美化工具，能根据壁纸自动调整配色，提供丰富的桌面小组件和自定义功能，打造整洁实用的桌面体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OE3dEq2Us&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/junegunn/fzf&#34;&gt;fzf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的命令行模糊查找器，通过模糊匹配算法快速筛选列表中的命令、文件、历史记录等，支持多种显示模式和自定义选项，并与 bash、zsh、fish、Vim 和 Neovim 等集成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODEFwtsKO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/newsapp/newsnow&#34;&gt;NewsNow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款优雅的实时热门新闻阅读工具，包括国内、国际、科技、财经等多个类别，整合了微博、知乎、抖音、澎湃、GitHub、华尔街、Hacker News、IT 之家等多个平台的热门资讯。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODvf1Bkms&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/laurent22/joplin&#34;&gt;Joplin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的跨平台笔记应用，支持 Markdown 语法、多种内容插入和管理，可作为印象笔记、OneNote 的替代品，提供多种同步、导入导出、加密等功能，适用于学习整理、会议记录、文档管理等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OD2Xxnl12&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Guovin/TV&#34;&gt;TV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 IPTV 电视直播源更新工具，可自定义频道菜单，根据模板频道自动获取并更新最新直播源接口，生成可用接口文件，支持多种运行方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCTNJclWE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/barry-ran/QtScrcpy&#34;&gt;QtScrcpy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的手机投屏电脑工具，支持通过 USB 或 WIFI 无需 root 权限连接 Android 设备到电脑，提供实时屏幕显示、键鼠控制、录制截图、文件传输等丰富功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCSyO7RDd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mifi/lossless-cut&#34;&gt;LosslessCut&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高效的无损音视频剪辑工具，能够在几秒内完成对音视频的无损压缩，特别适用于高清视频文件。还支持快速提取视频精华、添加配乐字幕轨道等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCK6yeFZh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/1Remote/1Remote&#34;&gt;1Remote&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的远程会话管理工具，支持多种协议如 RDP、VNC、SSH 等，具有快速启动、多显示器支持、细节配置、界面定制等特性，提升远程管理效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCrfy9uKC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jooooock/wechat-article-exporter&#34;&gt;wechat-article-exporter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的微信公众号文章批量下载工具，可在线导出公众号文章，支持音视频导出和私有部署，能还原文章样式，过滤已删除文章，根据规则自动下载并缓存数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCe5H6xOP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/localsend/localsend&#34;&gt;LocalSend&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款无需联网的跨平台本地文件传输工具，类似 AirDrop，可在本地网络上安全共享文件和消息，简单易用且传输速度超快。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OC8oyBiW2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/siyuan-note/siyuan&#34;&gt;思源笔记&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款隐私优先的个人知识管理系统，支持细粒度块级引用和 Markdown 所见即所得编辑，拥有实时渲染、数学公式、图表、导出 HTML、Markdown 文件、AI 写作等特性，支持跨平台使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBPxzcajL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/1Panel-dev/1Panel&#34;&gt;1Panel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Linux 可视化管理工具，提供实时监控、文件管理、快速建站、一键安装应用、计划任务管理等功能，让用户更方便地管理 Linux 服务器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBG74mdxj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sickcodes/Docker-OSX&#34;&gt;Docker-OSX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的黑苹果部署工具，可在 Windows 或 Linux 的 Docker 容器中一键部署安装 macOS 系统，支持共享文件夹、USB 设备热插拔、音频驱动配置等功能，提供接近原生的体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBwGzu4N9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xushengfeng/eSearch&#34;&gt;eSearch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的多功能工具，具有截屏、OCR、搜索、翻译、贴图、以图搜图以及录屏等功能，支持 Windows、Linux 和 macOS 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBng4zJ1L&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ZCShou/GoGoGo&#34;&gt;GoGoGo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的虚拟定位 APP，无需 ROOT 权限即可轻松修改位置信息和模拟移动，提供历史记录、位置搜索和直接输入坐标等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBf0E1RIk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jinweijie/notify-me&#34;&gt;Notify Me&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 Android 应用，可以捕获手机来电和短信信息，并将数据转发到 Bark 服务器或电子邮箱，实现跨设备及时接收重要通知。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OB4q9FHUQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/immich-app/immich&#34;&gt;immich&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的高性能照片和视频自托管解决方案，支持内容自动备份、快速上传下载、共享相册、足迹地图、内容时间线索引和元数据搜索等功能，提供 Docker 部署方式和安卓、iOS 客户端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OASCsxnjC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dreamhunter2333/cloudflare_temp_email&#34;&gt;cloudflare_temp_email&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 CloudFlare 免费服务搭建的功能全面的临时邮箱开源项目，支持收发邮件、访问密码、自动回复、查看附件等多种功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAzLt2Ie5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/honmashironeko/ProxyCat&#34;&gt;ProxyCat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能将临时 IP 变成固定 IP 的代理池中间件，支持多协议、动态获取、自动验证，配合高并发异步处理，适用于需要频繁更换 IP 的网络操作场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAoXJu5Fj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0xJacky/nginx-ui&#34;&gt;Nginx UI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大且界面友好的 Nginx 可视化管理工具，提供服务器监控、证书管理、配置编辑、日志分析等多种功能，支持多语言和深色模式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAb1alvfb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imfile-io/imfile-desktop&#34;&gt;imFile&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Motrix 开发的开源免费下载工具，界面简洁易用，支持 HTTP、FTP、BT、磁力链等多种资源下载，具有多线程下载、限速、模拟 UA、系统通知等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OA9Q6qLcI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amir1376/ab-download-manager&#34;&gt;AB Download Manager&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的下载管理器工具，能够提升高达 500 %的下载速度，批量管理下载队列，自定义下载速度，并提供浏览器扩展自动获取下载链接。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ozy87aIJ4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/files-community/Files&#34;&gt;Files&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Windows 设计的功能强大的文件管理器工具，支持标签页管理多个文件夹、双面板对比文件夹内容、云端存储集成、压缩文件处理以及 Git 项目管理等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OzoHD5cKS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Bao-qing/123pan&#34;&gt;123pan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能突破 123 云盘下载速度限制的 Python 脚本工具，提供列出文件、下载文件、上传文件、分享文件等功能，为 Windows 用户提供开箱即用安装包。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ozfik5v0H&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lakr233/BBackupp&#34;&gt;BBackupp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 iOS 设备备份工具，支持备份到外置硬盘、监控备份进度、加密备份，可以无缝迁移到新设备。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OyulQexGD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doocs/md&#34;&gt;md&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的微信 Markdown 编辑器，支持自定义 CSS 样式、Markdown 语法、LaTeX 公式，提供多种实用功能如格式化、取色、图片上传等，界面简洁好用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OylTdiuz1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/glushchenko/fsnotes&#34;&gt;FSNotes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简洁且功能强大的笔记管理工具，支持 Markdown 和纯文本文件、多文件夹存储、代码语法高亮、内联图片、跨笔记链接、暗黑主题等丰富功能，适用于 macOS 和 iOS 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxZv2dwKk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Adonis142857/Real-Address-Generator&#34;&gt;Real-Address-Generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Cloudflare Workers 的真实地址生成器，可以生成不同国家的真实随机地址，包括姓名、性别、电话号码和详细地址等信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxTNThUjc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BookerLiu/GeekDesk&#34;&gt;GeekDesk&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值、功能强大的桌面快速启动管理工具，集成了强大的文件搜索、自定义快捷键、壁纸、界面效果调整、系统图标选择和定时提醒等功能，旨在为用户打造高效且个性化的极客桌面体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OxJ0h5tgL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/spacedriveapp/spacedrive&#34;&gt;Spacedrive&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Rust 开发的跨平台文件管理器，提供安全且直观的文件管理体验，能够结合云端存储和本地硬盘，打造个人分布式云。功能丰富，包括文件预览、识别、搜索、多视图布局、AI 标签、云存储支持、个性化主题和多语言支持等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwCEyfS7c&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tw93/Pake&#34;&gt;Pake&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Rust 的开源工具，能将任何网页轻松打包成多端桌面应用，相比 Electron 更加小巧、快速、高性能、低内存占用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Owte44RSn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/usual2970/certimate&#34;&gt;Certimate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 SSL 证书管理工具，可自动申请、部署 SSL 证书并在证书即将过期时自动续期，提供安全便捷的 SSL 证书管理解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwrQPcipY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wanglin2/mind-map&#34;&gt;SimpleMindMap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 JavaScript 实现的开源 Web 思维导图工具，具备思维导图核心功能，支持插件扩展更多实用功能，提供在线体验，上手简单。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwcJc7RlZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/udecode/plate&#34;&gt;Plate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 React 的功能强大且高颜值的 Markdown 富文本编辑器框架，提供 50 多个插件开箱即用，支持无缝系统集成和组件定制开发，UI 响应式设计支持深浅色主题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwbKjtDWo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shadow1ng/fscan&#34;&gt;fscan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的内网综合扫描工具，支持主机存活探测、服务爆破、redis 批量写公钥、web 指纹识别和漏洞扫描等功能，可一键自动化全方位进行漏扫扫描。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ow3kI7Bqr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xiaoyaocz/dart_simple_live&#34;&gt;Simple Live&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的聚合直播工具，集成了各大主流直播平台，支持多账号登录、观看记录、链接解析、弹幕设置等功能，提供 Android、iOS、Windows、macOS 和 Android TV 客户端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvKDfcsAU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hanxi/xiaomusic&#34;&gt;xiaomusic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的工具，可让小爱音箱播放本地音乐，支持多种音频格式，语音控制播放，自动搜索下载匹配歌曲，支持网络歌单、电台、Docker 部署等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ov6zSs7wL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/infrost/DeeplxFile&#34;&gt;DeeplxFile&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Deeplx / playwright 实现的简单易用、快速且免费的文件翻译工具，不限制文件大小，支持超长文本翻译，使用 DeepL 作为翻译源，能够翻译超长且复杂的文档，如超大的 Excel 文件，甚至还能正确显示复杂的引用公式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OuCIS74zL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/4gray/iptvnator&#34;&gt;IPTVnator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的跨平台 IPTV 播放器，界面简洁且功能强大，支持导入播放列表、自动更新、频道搜索、电视存档、分组频道列表、多种主题等，支持外部播放器和 HTML 视频播放器，提供多语言支持。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ot0KLqZ3w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ayangweb/EcoPaste/&#34;&gt;EcoPaste&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的剪贴板管理工具，具有轻量小巧、快捷唤醒、本地存储、智能分组、收藏功能、内置搜索、图片 OCR 等特性，功能全面且操作便捷。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oqdkt1Qrf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sinaatalay/rendercv&#34;&gt;RenderCV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 LaTeX 的简历框架，内置多种主题，可从 YAML 输入文件生成 PDF、LaTeX、Markdown、HTML 和 PNG 格式的高质量简历文档。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpdfoEmLf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dhravya/cloudflare-saas-stack&#34;&gt;cloudflare-saas-stack&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套基于 Cloudflare 的全栈 SaaS 开发模板，可快速在 Cloudflare 上构建并部署全栈应用，包括数据库、认证、样式、存储等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Op4OV0Cwz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alienator88/Pearcleaner&#34;&gt;Pearcleaner&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费且简洁好用的 Mac 软件卸载工具，提供高颜值简洁的操作界面，支持多选一键卸载软件并清理残留文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoZUujrNb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chenfan0/fideo-live-record&#34;&gt;Fideo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费且易于使用的直播录制工具，能够简单快捷地录制 YouTube、TikTok、抖音、快手、B 站、微博、淘宝等平台的直播内容，并保存为 MP4 格式的视频文件，提供开箱即用的安装包，支持 Windows 和 macOS 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoUdmAP9O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/codewithsadee/vcard-personal-portfolio&#34;&gt;vCard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款使用 HTML、CSS 和 JavaScript 构建的纯静态网站模板，界面布局适配所有设备，可用于搭建在线个人介绍或个人简历。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oog9foIZB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Pintree-io/pintree&#34;&gt;Pintree&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款将浏览器书签转换成美观导航网站的开源工具，可直观展示和管理大量书签，提高使用效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oo94Snaba&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/raycast/ray-so&#34;&gt;ray.so&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套来自 Raycast 团队的开源 Web 工具箱，提供代码图片生成器、图标制作器、高颜值 Raycast 主题等多种实用工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oo6IL8dmy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kevin2li/PDF-Guru&#34;&gt;PDF Guru&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的功能强大的 PDF 工具箱，支持水印去除、批量添加书签、OCR、格式转换、合并、拆分、插入、替换等多种 PDF 实用功能，还提供卡片制作、视频笔记、字段批量修改等额外功能，可大幅提高办公和学习效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oo5lvBNEx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/revezone/revezone&#34;&gt;Revezone&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款以图形为中心的思维管理工具，集成了无限画布白板、所见即所得编辑器、边栏文件管理和灵活布局等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnRoWwuUj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/caorushizi/mediago&#34;&gt;MediaGo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的视频在线提取工具，支持流媒体下载、视频下载、m3u8 文件下载以及 B 站视频下载，具有无需抓包、移动播放、批量下载等特性，提供 Windows 和 macOS 桌面客户端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnD41xHPp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pacexy/flow&#34;&gt;Flow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的在线 ePub 阅读器，支持书内搜索、多主题切换、图片预览、链接分享、下载书籍、自定义排版、高亮笔记、数据导出以及云端存储等功能，兼容跨平台使用，可离线运行，允许同时阅读多本书。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnxmTmvCT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/danbao/auto-ssl&#34;&gt;Auto-SSL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个自动化管理域名 SSL 证书的开源项目，利用 GitHub Actions 和 acme . sh 实现自动申请、续期 SSL 证书，并将证书保存到 Git 仓库。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnfGY1ZKR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/XPoet/picx&#34;&gt;PicX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 GitHub API 的图床工具，提供图片上传托管、生成图片链接和常用图片工具服务，具有开箱即用、操作简单、数据安全等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmRVxsPvt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luost26/academic-homepage&#34;&gt;academic-homepage&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 GitHub Pages 模板，可快速搭建个人学术主页，包含个人简介、教育经历、发布学术列表等内容，页面布局兼容移动端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmMepzej2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aome510/spotify-player&#34;&gt;spotify_player&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款快速、易用且高度可配置的终端 Spotify 播放器，具有极简界面、个性化配置、远程控制、歌词显示、跨平台支持、图像渲染、桌面通知等功能，提供丰富的 CLI 命令。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Omr1ip0Ye&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CH563/shot-easy-website&#34;&gt;ShotEasy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费且无限制的在线图片编辑工具，能够进行裁剪旋转、添加水印、添加圆角、背景美化、背景移除替换以及快速压缩等操作，所有编辑都在浏览器中进行，不会上传到服务器，保护数据隐私安全。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Om8ain7J3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/T8RIN/ImageToolbox&#34;&gt;Image ToolBox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费且功能强大的图片编辑器，提供批量裁剪、滤镜、图片提取文本、图片拼接与叠加、背景移除、水印添加、格式转换等多种功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Om15VifOj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/docmost/docmost&#34;&gt;Docmost&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的协作文档和 Wiki 工具，提供富文本编辑器、表格、数学公式等功能，支持多人实时协作编辑，内置权限管理系统，可作为 Confluence 和 Notion 的替代品。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OlyOr24GO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/unilei/image-watermark-tool&#34;&gt;Image Watermark Tool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的图片水印添加工具，可在本地设备上为图片添加水印，支持自定义水印颜色、大小、透明度和倾斜角度，保护隐私。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ol7I0mzdw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wanghongenpin/network_proxy_flutter&#34;&gt;ProxyPin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的跨平台抓包工具，基于 Flutter 开发，界面简洁易用，可用于拦截、检查和重写 http（s）流量。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ol70OEOIi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/raqibnur/quick-waitlist&#34;&gt;Quick Waitlist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源项目，帮助快速搭建精心设计的 Waitlist 页面，集成 Resend 进行邮件管理和自定义模板，提供 SEO 优化解决方案，并支持通过 Vercel 一键部署，适合发布任何产品或服务时收集潜在客户邮箱地址。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OkW8aky99&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Neet-Nestor/Telegram-Media-Downloader&#34;&gt;Telegram Media Downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源免费的 Telegram 媒体下载脚本，可在 Telegram 网页版上自由下载图片、GIF 和视频等内容，即使是私人频道限制下载功能也能解锁。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ojs0ycNjF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dreammis/social-auto-upload&#34;&gt;social-auto-upload&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的自动化短视频上传和分发工具，支持主流视频平台如抖音、B 站、视频号、TikTok 等，可以多账号矩阵化执行任务，并支持自定义复杂发布时间。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OiBXDpExq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imputnet/cobalt&#34;&gt;cobalt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的视频下载工具，支持 B 站、YouTube、Instagram、TikTok 和 Twitter 视频下载，无广告干扰。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OhBHwjCns&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dwarvesf/hidden&#34;&gt;Hidden Bar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 Mac 菜单栏管理工具，可以一键折叠隐藏菜单栏中的图标，自由调整图标的显隐状态，使菜单栏变得干净整洁。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OhzlpducM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lymphatus/caesium-image-compressor&#34;&gt;Caesium Image Compressor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的图像压缩工具，可以在保持图像质量的前提下减小文件大小，支持 JPG、PNG 和 WebP 格式，提供浏览器版本和跨平台客户端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OfIQcwmDS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CorentinTh/it-tools&#34;&gt;IT-Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套专为开发人员打造的在线实用工具库，包括 Token 生成器、大小写转换器、进制转换器、二维码生成器、Git 备忘录等，可通过 Docker 一键部署到自己的服务器上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OdYCFq6vy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/putyy/res-downloader&#34;&gt;res-downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的网络资源嗅探下载器，可获取视频、音频、图片以及 m3u8 等不同类型资源，支持微信视频号、抖音、快手、小红书、QQ 音乐等主流平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OdXz37hcU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hua0512/stream-rec&#34;&gt;Stream-rec&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的直播录制工具，支持虎牙、抖音、斗鱼和 Twitch 等多个平台，可自动录制直播视频和弹幕，支持自定义录制质量、格式等设置，并提供 Web 界面配置和 Docker 部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OdLEZeoeJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://jherr.github.io/depth-of-field/&#34;&gt;Depth of Field Simulator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在线景深模拟器工具，可以通过调整光圈、焦距和拍摄对象距离等参数，直观展示这些因素对景深的影响，非常适合摄影爱好者学习和掌握拍摄技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OdchUx6Ms&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zyronon/douyin&#34;&gt;Douyin-Vue&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个模仿抖音的移动端短视频项目，使用最新的 Vue 技术栈开发，实现媲美原生 App 丝滑流畅的使用体验，可作为学习 Vue 最佳实践的项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ObZcLnjsd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lihaoyun6/QuickRecorder&#34;&gt;QuickRecorder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款多功能、轻量化、高性能的 macOS 屏幕工具，支持窗口录制、App 录制、窗口声音内录、鼠标高亮、隐藏桌面文件等功能，体积仅 4MB，操作简便。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ObvCMgwyE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chanind/hanzi-writer&#34;&gt;Hanzi Writer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源免费的 JavaScript 库，可根据汉字书写时的笔画顺序播放正确的描边动画和练习测试，包含 9000 多个常用汉字，库大小仅 30kb，可嵌入 Web、iOS 或 Android 等平台应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OaARCr9Nb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/stonith404/pingvin-share&#34;&gt;Pingvin Share&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可自建的文件分享工具，支持自定义链接、上传限制、有效期、访问次数、密码保护等，并提供反病毒检查，界面简洁易用，可通过 Docker 一键部署到私有服务器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oa1vL66ai&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/usememos/memos&#34;&gt;Memos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的轻量级笔记服务，像极简版微博社区，可记录想法、知识和笔记，支持公开分享。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O922m4CUj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/drawdb-io/drawdb&#34;&gt;DrawDB&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的在线数据库设计工具及 SQL 生成器，支持主流数据库，可轻松创建数据库图表、导出 SQL 脚本和自定义编辑器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8Wle8PES&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lizongying/my-tv&#34;&gt;My TV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的安卓电视直播软件，内置直播源，安装即可使用，具有稳定、快速、免费和无广告等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8h6334To&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JunkFood02/Seal&#34;&gt;Seal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 Android 视频/音频下载工具，底层使用 yt - dlp 下载框架，支持数千个视频平台，界面简洁友好，遵循 MD3 设计规范。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7SlKfgqT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/houbb/sensitive-word&#34;&gt;sensitive-word&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 DFA 算法实现的高性能 Java 敏感词过滤工具框架，内置 6W +敏感词库，支持敏感词判断、返回、脱敏等操作，具有性能优异、功能丰富、使用简洁等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7PZDCOJl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/agalwood/Motrix&#34;&gt;Motrix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的全能下载工具，界面简洁易用，支持 HTTP、FTP、BT、磁力链等资源下载，具有多线程下载、BT 选择性下载、自动更新 Tracker 等功能，可替代迅雷。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7HZK7Fje&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/soybeanjs/soybean-admin&#34;&gt;Soybean Admin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款清新优雅、高颜值且功能强大的开源后台管理模板，采用前沿技术栈，提供丰富的主题配置、组件和一站式后台管理解决方案，无需额外配置即可使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7mkT9khB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DamascenoRafael/reminders-menubar&#34;&gt;Reminders MenuBar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为 macOS 设计的提醒菜单栏小工具，可以直接在菜单栏上管理提醒事项，支持同步、创建、编辑和筛选等操作，提高工作效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6PxlkEKx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tryzealot/zealot&#34;&gt;Zealot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的自部署托管移动应用和 macOS 应用的分发平台，提供 iOS、Android SDK、fastlane 等丰富组件库，支持企业打包分发流程、上传应用全套流程方案，可接入任意 CI 系统实现自动化处理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6G6PCzSD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Meekdai/Gmeek&#34;&gt;Gmeek&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款超轻量级的开源个人博客框架，无需本地部署，基于 GitHub Pages、GitHub Issues 和 GitHub Actions，仅需 3 步 18 秒即可搭建好博客并开始写作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6Ede41wk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jaywcjlove/DevHub&#34;&gt;DevHub&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为开发者打造的 macOS 应用工具箱，集成超过 30 种常用小工具，如 API 请求、UUID 生成器、编解码工具等，无需联网即可使用，旨在提升开发效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O63Hvj9ky&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zh-lx/pinyin-pro&#34;&gt;pinyin-pro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专业的 JavaScript 汉字拼音转换库，功能丰富、准确率高、性能优异，支持多种拼音转换模式，包括拼音/声母/韵母/首字母/音调等，并提供拼音输入转换、文本匹配等高级功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5T3sjLw8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yesmore/vmail&#34;&gt;Vmail.DEV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的临时邮箱创建工具，使用 Cloudflare email worker 实现，支持接收、显示和存储电子邮件，可自托管部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5JwwFwS3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iawia002/lux&#34;&gt;Lux&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款跨平台的视频下载命令行工具，使用 Go 语言编写，支持几乎所有视频平台如抖音、B 站、YouTube 等，可控制下载视频的格式、清晰度和字幕。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5zLeAFOt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/milanvarady/Applite&#34;&gt;Applite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 Homebrew 可视化工具，提供简洁易用的界面，让非技术用户轻松安装和管理第三方应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5gUfje5o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/027xiguapi/pear-rec&#34;&gt;pear-rec&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单高效且功能齐全的日常工具，支持截图、录屏、录像、录制 GIF、查看多媒体文件和修改图片等，同时支持跨平台，目前提供 Windows 安装包。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5fEC4g0S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lcomplete/huntly&#34;&gt;Huntly&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 RSS 阅读器，支持 RSS 订阅、全文搜索、自动保存等功能，可自托管或本地运行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4ViM4x4m&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BingyanStudio/LapisCV&#34;&gt;LapisCV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份基于 Markdown 格式的简洁正式简历模板，适用于 Obsidian / Typora，开箱即用，风格简洁正式，适合求职求学场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4wYIrzPl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KurtBestor/Hitomi-Downloader&#34;&gt;Hitomi Downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的视频下载工具，提供简单易用的操作界面，支持多个视频平台如 B 站、YouTube、抖音等，可下载视频、图像、音频和文本文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O3VffkUCT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cooderl/wewe-rss&#34;&gt;WeWe RSS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款优雅的微信公众号订阅工具，支持微信公众号订阅以及 RSS 生成，后台自动定时更新内容，支持全文内容输出，让阅读无障碍。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O3DOmoCjb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gitbutlerapp/gitbutler&#34;&gt;GitButler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款由 GitHub 联合创始人开源的高颜值且好用的可视化 Git 客户端，支持自动创建分支、管理分支合并、使用 AI 编写提交信息、快速解决问题等功能，提升 Git 使用效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O3tM3m1JL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lissy93/web-check&#34;&gt;Web-Check&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的开源免费网站分析工具，可以分析任何网站的 IP 信息、SSL 链、DNS 记录、Cookie、域名信息、服务器位置、网站性能等信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O30FR71IP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/exelban/stats&#34;&gt;Stats&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 Mac 系统监控工具，功能全面，可监控 CPU、GPU、磁盘、内存、网络、电池、传感器、风扇、蓝牙设备和多时区时钟等，是 iStat Menus 的良好替代品。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O30rB0lcQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TeamNewPipe/NewPipe&#34;&gt;NewPipe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的轻量级 YouTube 第三方客户端，无需 Google 服务框架和 YouTube 账号登录，支持 4K 视频播放、画中画模式、搜索视频/音频/频道/播放列表，可下载视频/音频/字幕等功能丰富。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O2IZVjGvv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qarmin/czkawka&#34;&gt;Czkawka&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的简单、快速且强大的不必要文件清理工具，支持扫描重复、空文件夹、大文件、相似多媒体文件、无效文件等内容，扫描速度极快，支持多语言和多平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1DPo4OFM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/oddfar/campus-imaotai&#34;&gt;campus-imaotai&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款自动化工具，可以在 i 茅台 App 上自动完成注册、预约、旅行等操作，支持多账号、门店选择、耐力值查询、消息推送等功能，并提供 Docker 一键部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1uVsCfJq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MrKai77/Loop&#34;&gt;Loop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的 MacOS 屏幕窗口管理工具，可轻松拖拽、调整和排列窗口，提高工作效率，支持自定义颜色和设置。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NEJllims0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0xdevalias/chatgpt-source-watch&#34;&gt;ChatGPT Source Watch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个监控 ChatGPT 前端代码变化的工具，可以提前发现即将推出的新功能，为 ChatGPT 用户和竞争对手提供有价值的信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NE5CwC9uO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/goenning/google-indexing-script&#34;&gt;Google Indexing Script&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源脚本，利用 Google API 可以在 48 小时内让你的网站在 Google 上建立索引，无需复杂技术或黑客手段。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NDX1MEVo3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AmruthPillai/Reactive-Resume&#34;&gt;Reactive Resume&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款独特的免费开源简历生成器，支持中文和多种配置，可轻松创建、更新、共享和打印简历，支持个性化主题和布局，并集成 GPT 辅助编写修改。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCIqL0K0K&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YiNNx/cmd-wrapped&#34;&gt;cmd-wrapped&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款命令行工具，可以统计和分析过去一年中用户在终端上使用的命令情况，包括每日最活跃时段、常用命令统计等，并生成类似 GitHub 年度贡献图的命令分布图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCz9miCLo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rwv/lookscanned.io&#34;&gt;Look Scanned&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款纯前端网站工具，能够让 PDF 文件看起来像是扫描件一样，无需打印机和扫描仪，操作简单快捷，具有隐私保护、个性化调整和跨平台支持等优点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NChkklg4i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lanceliao/china-holiday-calender&#34;&gt;China Holiday Calendar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源维护的中国节假日补班日历，提供 2022 - 2024 年中国节假日、调休、补班信息，支持 ICS 格式和 API 获取，可订阅到 iPhone、Google Calendar、Outlook 等客户端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NAK3ybJ3l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/movie-web/movie-web&#34;&gt;movie-web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个极简且易用的开源电影网站，支持搜索和在线观看电影，具有自动保存播放进度、收藏电影、界面简洁、搜索响应快等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NzZ064MGc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KRTirtho/spotube&#34;&gt;Spotube&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的跨平台 Spotify 客户端，无需付费订阅，支持离线播放、歌词同步等功能，注重隐私且体验流畅。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NzXjp0nQ2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;实用插件&#34;&gt;实用插件&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fatwang2/fasturl&#34;&gt;FastURL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款实用的开源 Chrome 插件，可以在任何输入框中通过快捷键粘贴网页正文的 Markdown 格式内容，支持清理广告和导航栏等多余内容，同时保留标题、列表、链接等 HTML 元素，操作在本地浏览器完成，速度快且数据安全。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6MuStfEh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/molvqingtai/WebChat&#34;&gt;WebChat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款去中心化、无服务器的匿名聊天浏览器插件，利用 WebRTC 端到端加密技术，所有聊天数据保存在本地，确保安全隐私。无需注册，可在任何网站一键开启与他人聊天，适合即时交流需求场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6tDSAbN6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/screenity&#34;&gt;Screenity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的 Chrome 录屏插件，支持屏幕任意位置录制、标注、录音，可导出多种视频格式并进行简单编辑。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OFMEtmh5N&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lujunji4113/cloud-document-converter&#34;&gt;Cloud Document Converter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Chrome 插件，支持下载和复制飞书文档为 Markdown 格式，兼容多种元素如标题、代码块、列表、表格、图片等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBDKWvEFL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist&#34;&gt;uBlockOrigin-HUGE-AI-Blocklist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份综合性的 AI 内容过滤列表，包含约 950 个网站，可用于 uBlock Origin 和 uBlacklist，主要目的是清理 Google Search、DuckDuckGo 和 Bing 等图像搜索引擎中的 AI 生成内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OARfelVoz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KoriIku/luxirty-search&#34;&gt;Luxirty Search&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Google 的开源搜索引擎插件，屏蔽内容农场、无广告、无跟踪、界面简洁，提升 GitHub、StackOverflow 等技术社区的搜索权重。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAMJ9hK8F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/XengShi/materialYouNewTab&#34;&gt;materialYouNewTab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款采用 Google Material You 设计风格的浏览器主页插件，提供自定义搜索引擎、快捷网站图标、主题切换等功能，无需权限即可使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OA1AFjrwW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shyjal/visual-try-on&#34;&gt;visual-try-on&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于快手 Kolors 图像模型开发的 Chrome 浏览器插件，可在任何电商网站上上传自己的照片，一键试穿喜欢的衣服。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OvB1cySwr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/027xiguapi/code-box&#34;&gt;code-box&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的浏览器插件，适用于主流技术社区网站，提供一键复制代码、阅读全文和去除登录弹窗等实用功能，为技术开发者提供便利。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsYoDBw9t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhulu111/ComfyUI_Bxb&#34;&gt;ComfyUI_Bxb&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源插件，能够将 ComfyUI 工作流转换成小程序，支持主流平台和支付变现功能，方便将现有工作流推广到更广阔的市场。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Os3PF1Qsz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hediet/vscode-drawio&#34;&gt;vscode-drawio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款将 draw . io 集成到 VSCode 的插件，让开发者能够在 VSCode 中快速绘制流程图、思维导图或 UML 类图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Op1sZlgfA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nicepkg/aide&#34;&gt;Aide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款实用的 AI 编程助手 VSCode 扩展，为现有编程助手（如 Copilot、CodegeeX 或 Codeium 等）提供功能补充，让开发者能更高效地编程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ooz0foptK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Christopher-Hayes/vscode-chatgpt-reborn&#34;&gt;Reborn AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 VSCode 插件，能够帮助编写、重构和改进代码，支持多种语言模型和语种，包括中文和英文等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Olf5PnSjv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dlvhdr/gh-dash&#34;&gt;gh-dash&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值的 GitHub CLI 扩展，以仪表板形式展示 GitHub 项目的拉取请求和问题信息，支持搜索、过滤、操作等丰富功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OgxI3eTqk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xifangczy/cat-catch&#34;&gt;cat-catch (猫抓)&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费的网页资源嗅探插件，能够筛选列出当前页面的资源，提供嗅探、缓存捕捉、视频录制等工具帮助抓取资源，支持自定义抓取资源类型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OewNznNwZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/skmail/responsive-viewer&#34;&gt;Responsive Viewer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Chrome 浏览器插件，可以在一个界面中同时展示多个屏幕尺寸，方便前端开发者测试响应式网站或应用在不同设备尺寸下的显示效果，提供多种设备尺寸选择、横竖屏显示和一键截图分享等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ObwBFa78o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fishjar/kiss-translator&#34;&gt;kiss-translator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简约且好用的双语对照翻译插件和油猴脚本，支持多种浏览器和翻译服务，提供网页双语对照翻译、输入框翻译、YouTube 字幕翻译等功能，支持自定义翻译规则、译文样式和快捷键。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oa8MjtHIr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xaoxuu/hexo-theme-stellar&#34;&gt;Stellar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款内置文档系统的简约商务风 Hexo 主题，支持丰富的标签和动态数据组件，可帮助简单应对各种表达需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7fGfAZcH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;资料集合&#34;&gt;资料集合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Shubhamsaboo/awesome-llm-apps&#34;&gt;Awesome LLM Apps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心整理的大语言模型在不同领域实际应用的集合，涵盖客服、法律、健康、旅游、数据分析等场景，以及结合 RGA 和具备记忆功能的应用，还收集了 LLM 微调、高级工具和框架使用教程等，提供详细介绍。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P6cnJfNL0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangschang/web3.0&#34;&gt;web3.0&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份颇为全面的学习 Web3 资料集合，涵盖 Web3 基础知识、应用及项目、相关分享博主、视频教程、相关书籍、开发资源以及工具等内容，还整理了一些与 Web3 相关的招聘工作机会。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEnLvvP1d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imthenachoman/How-To-Secure-A-Linux-Server&#34;&gt;How-To-Secure-A-Linux-Server&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份关于如何保护 Linux 服务器安全的操作指南，涵盖 SSH 配置、基本安全措施、网络防火墙、系统审计和其他安全增强措施，并提供详细步骤和建议。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OEe1nDxh2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6nMuXKB&#34;&gt;awesome-falsehood&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了程序员在开发过程中常犯的错误观点集合，包括时间日期处理、地理位置、国际化、电子邮件格式化、邮政地址等场景，旨在帮助开发者认识并避免这些误解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OE5YxfXIc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YanG-1989/m3u&#34;&gt;m3u直播源收集列表&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份包含电视、直播、MyTV 以及体育等订阅列表的 m3u 直播源收集列表，持续更新。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ODsVQdRCv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WangRongsheng/awesome-LLM-resourses&#34;&gt;awesome-LLM-resourses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份颇为全面的大语言模型（LLM）资源集合，涵盖数据、微调、推理、知识库、智能体、书籍、相关课程、学习教程以及论文等内容，旨在成为全球最佳 LLM 资源汇总。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCyjWy06o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ashishps1/awesome-low-level-design&#34;&gt;awesome-low-level-design&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份关于学习低级设计（LLD）的资源集合，涵盖面向对象编程概念、设计模式、UML 图、面试题目和相关书籍推荐等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCsqCaQ1O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NirDiamant/Prompt_Engineering&#34;&gt;Prompt_Engineering&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份全面的提示词学习指南，涵盖从基础到高级的提示工程技术，包括基本概念、思维链、角色提示、结构提示以及可直接使用的提示模板等内容，旨在帮助学习和使用大语言模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OC4FcfuVf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/valeman/Awesome_Math_Books&#34;&gt;Awesome_Math_Books&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了各种数学领域经典书籍的集合，包括概率论、代数、微积分等，提供下载链接或在线阅读，还有高中数学问题和物理学基础知识书籍。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OBNbroT9d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lukasz-madon/awesome-remote-job&#34;&gt;awesome-remote-job&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了关于远程工作职位和资源的列表，涵盖文章、视频、书籍、招聘网站、面试资料、问答社区、远程工作社区、会议工具以及法律和财务建议等内容，为寻找远程工作提供帮助和有用信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAtSzh8YL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iAmCorey/awesome-indie-hacker-tools&#34;&gt;Awesome Indie Hacker Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收录独立开发/出海开发相关技术栈及工具的 GitHub 仓库，涵盖原型设计、UI 框架/组件库、图标/字体库、前端/后端开发框架、支付、国际化、产品发布推广等实用内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAkrFdDIk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tikam02/DevOps-Guide&#34;&gt;DevOps-Guide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了丰富的 DevOps 学习资源列表，涵盖 CI / CD、数据库、开发运维实践、面试准备、操作系统、网络、终端命令等多个方面，并提供了入门 DevOps 的学习指南。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OAjp22ytu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/princehuang/overseas-website-note&#34;&gt;出海网站经验总结&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份关于出海网站收款全流程的总结，包括公司注册、申请 EIN、申请银行卡、激活 Stripe 等内容，对于将业务拓展到海外的产品非常有帮助。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwVvyhKND&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/svcvit/Awesome-Dify-Workflow&#34;&gt;Awesome-Dify-Workflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了一系列好用的 Dify 工作流集合，包括中英文翻译、知识库聊天、搜索大师、爆款标题、文章仿写、运营一条龙、聊天机器人、代码生成等，所有工作流基本可免费使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OwnkKzAcX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CyberAlbSecOP/Awesome_GPT_Super_Prompting&#34;&gt;Awesome_GPT_Super_Prompting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份在 GitHub 上整理的 ChatGPT 超级提示词集合，收集了 ChatGPT 越狱提示词、GPT 智能体提示词、提示词注入及保护、各种 GPTs 提示词以及 Prompt Engineering 学习资料等相关资源，内容全面且持续更新。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ow4tL79ET&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6RM9Vru&#34;&gt;Free Public APIs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了大量免费 API 的网站，每天定时测试 API 可用性，确保收录的 248 个 API 涵盖金融、娱乐、音乐、旅行、交通等类别均可供学生和开发者使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OuZjdArbm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/systemdesign42/system-design&#34;&gt;system-design&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集整理的系统设计面试资源列表，提供知名科技公司实战案例和系统设计基础知识，帮助通过系统设计面试。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OuuQGiHAC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cuda-mode/awesomeMLSys&#34;&gt;awesomeMLSys&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精选的机器学习系统入门资料集合，包括论文、视频和代码库，涵盖注意力机制、性能优化、量化、长上下文长度和稀疏性等主题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OsOY94wud&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NirDiamant/RAG_Techniques&#34;&gt;RAG_Techniques&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份全面的检索增强生成（RAG）技术学习集合，涵盖 22 种 RAG 技术，提供详细文档、实现指南和示例代码。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OszElm1oI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Yolain-Codes/ComfyUI-Yolain-Workflows&#34;&gt;ComfyUI-Yolain-Workflows&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份较全面的 ComfyUI 工作流合集，涵盖从基础到进阶再到落地应用，包括图生图、细节修复、背景去除、重绘/扩图、人脸迁移、重绘光影、电商产品主图等工作流。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Osp2NhomB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/miss-mumu/developer2gwy&#34;&gt;developer2gwy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的公务员考试最佳实践指南，由从程序员转行成为公务员的朋友们共同编写，涵盖公考基础知识、备考实践、常见问题、面试手册和问答等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpYcPtsIk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CrazyBoyM/llama3-Chinese-chat&#34;&gt;llama3-Chinese-chat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份关于针对 Llama 3 进行中文微调的教程和工具集合，包括微调、魔改版本权重、训练、推理、评测以及部署 Llama 3 和 Llama 3 . 1 的视频和文档等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OpOMkCpzE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KonghaYao/chinese-free-web-font-storage&#34;&gt;中文网字计划&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套可商用免费的中文 Web 字体库，收录众多中文字体，提供在线加载和查看字体信息的功能，并有全字符集中文渲染方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoRRex42F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/piotrkulpinski/openalternative&#34;&gt;OpenAlternative&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集主流软件开源替代品的列表，对每个替代品进行了详细介绍，并列举了更多类似的开源选择，涵盖多个领域，方便查找所需开源软件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OoLXVlPJb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jaywcjlove/free-font&#34;&gt;Free Font&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收录了 630 多种免费可商用的字体列表，包括汉字字体和英文字体，按黑体、宋体、楷体、艺术体和手绘体等分类，可在线查看并下载字体包。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oot6WaYaB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DeveloperPaul123/modern-cv&#34;&gt;Modern-CV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套受 Awesome - CV 启发的现代简历模板集合，使用 Typst 编写，提供多种现代简历模板样式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Oo0PrkfAo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iptv-org/iptv&#34;&gt;IPTV Channels Collection&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了世界各地公开的 IPTV 频道集合，涵盖动画、商业、教育、历史、电影、音乐、科学等多种类别，并按语言、国家、地区进行分组。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnErgkNAz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DangJin/awesome-social-media-downloader&#34;&gt;awesome-social-media-downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的开源免费视频下载工具列表，包括能够免费下载油管、B 站、抖音、视频号等平台视频的工具，以及一些短视频去水印和视频压缩等辅助工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnwbPlaV6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OI-wiki/OI-wiki&#34;&gt;OI Wiki&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份免费开放且持续更新的编程竞赛知识整合站点，包含基础知识、常见题型、解题思路以及常用工具等内容，旨在帮助学习编程竞赛。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Onkd1FJ7m&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nordicgiant2/awesome-landing-page&#34;&gt;awesome-landing-page&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的落地页模板集合，包含多种高颜值且实用的开源落地页模板，使用不同前端技术框架构建，还收集了相关制作教程和设计资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OnevUmEXS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saasfly/best-practice&#34;&gt;best-practice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 2024 年构建 SaaS 初创公司的最佳实践集合，涵盖技术栈、云服务、架构、数据库、AI、后端及站点生成器等资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmjWV3DKd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/javayhu/haitang&#34;&gt;海棠诗社&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的精美古诗词网站，内含丰富的古诗词资源，支持多种检索和分类方式，每首诗词均有注解、翻译和评价，助力理解诗词。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OmbHtBbXt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KenneyNL/Adobe-Alternatives&#34;&gt;Adobe-Alternatives&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精选的 GitHub 列表，收录了可替代 Adobe 全家桶软件（如 Photoshop、Illustrator、Lightroom、Premiere 和 After Effects 等）的开源、免费或付费替代品，并使用图标标注了软件的付费模式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OhTFgtNfq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/B3o/GPTS-Prompt-Collection&#34;&gt;GPTS-Prompt-Collection&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集各种精彩 GPT 提示词的集合，涵盖写作、开发、生产力、商业、教育、金融、健康、营销、销售、游戏、设计等多个领域，可以搜索关键词查找所需提示词，学习优秀提示词的写法并进行改进。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ogohy7lPd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/owainlewis/awesome-artificial-intelligence&#34;&gt;awesome-artificial-intelligence&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的人工智能领域资源集合，涵盖机器学习、深度学习、自然语言处理等基础知识，以及应用工具、教程、书籍、视频和论文等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OfaRAkmJ4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/marekbrze/categorized-raycast-extensions&#34;&gt;categorized-raycast-extensions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了超过 1498 个 Raycast 第三方插件的集合，涵盖商业、设计、音视频、社交媒体、教育、娱乐、AI、自动化、实用工具等多个类别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Od3chdgtk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TheAlgorithms&#34;&gt;The Algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套收录了 Python、Java、C ++、JavaScript、Go 等多种编程语言的算法实现代码的开源算法库，包含二分查找、快速排序、斐波那契数列等热门算法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ObufybGsO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HqWu-HITCS/Awesome-Chinese-LLM&#34;&gt;Awesome Chinese LLM&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集和梳理的中文大语言模型（LLM）相关资源集合，包括多个垂直领域的开源微调中文模型、底层模型、数据集、微调框架、推理部署框架、评测方法和相关教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ob1Y34slk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhuima/awesome-cloudflare&#34;&gt;Awesome Cloudflare&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的基于 Cloudflare 的各种资源列表，包括开源工具、学习指南、博客等，旨在帮助独立开发者降本增效。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O9OHoziu2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Developer-Y/cs-video-courses&#34;&gt;cs-video-courses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精选的计算机科学视频课程列表，涵盖计算机科学导论、数据结构和算法、系统编程、软件工程、人工智能、机器学习等领域，包含知名大学公开课程及专业讲师课程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O8CvlerXF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DataExpert-io/data-engineer-handbook&#34;&gt;data-engineer-handbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份面向数据工程师的学习手册，涵盖书籍、课程、面试资料、优秀博客、社区和值得关注的博主等全面内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7OCo193W&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aishwaryanr/awesome-generative-ai-guide&#34;&gt;awesome-generative-ai-guide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份全面的生成式 AI 学习指南，涵盖最新研究动态、面试资料、免费课程、学习笔记等丰富内容，帮助学习者系统掌握生成式 AI 相关知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O7ehDbXp3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ZHO-ZHO-ZHO/ComfyUI-Workflows-ZHO&#34;&gt;ComfyUI Workflows&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份包含 36 个 ComfyUI 工作流的开源合集，涵盖 14 大类别，如 Stable Cascade、3D、LLM + SD、Portrait Master、SVD 等，为 ComfyUI 学习者提供参考。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O5yAbdbar&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://indiegoodies.com/awesome-open-source-mac-apps&#34;&gt;Open Source Mac Apps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心整理的最受欢迎的 Mac 系统开源免费软件列表，涵盖自动化、开发工具、日常生活、音视频、生产力、社交媒体、文本文件等多个类别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O58UBegjy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jackhawks/rectg&#34;&gt;rectg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心整理的 Telegram 群组、频道和机器人推荐列表，包含 5000 多个优质资源，帮助用户快速找到符合需求的优质信息渠道。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4Q3oERvN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ai-boost/Awesome-GPTs&#34;&gt;Awesome-GPTs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的有趣和创新 GPTs 列表，涵盖学术、写作、教育、生产力、编程、生活方式、娱乐等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4Ha1rXdK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fr0gger/Awesome-GPT-Agents&#34;&gt;Awesome-GPT-Agents&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的专注于网络安全领域的 GPT 代理列表，涵盖了网络安全助手、网络安全导师、黑客新闻、数据分析等多个方面，旨在帮助网络安全学习者和从业者提高效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O4xTmd5BC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cloudcommunity/Free-Certifications&#34;&gt;Free Certifications&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的免费在线课程和认证列表，涵盖常见技术栈、网络安全、数据库、项目管理、市场营销等领域，为学习者提供免费的课程资源和技能认证证书。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O31sz3Tld&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/weijunext/indie-hacker-tools&#34;&gt;indie-hacker-tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收录独立开发者出海技术栈和工具的合集，涵盖 Web 开发模板、Chrome 插件开发模板、前端、后端、数据库、支付等内容，旨在提升开发效率和降低成本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1OoAuRWp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sun0225SUN/Awesome-Love-Code&#34;&gt;Awesome-Love-Code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了 50 多份表白代码的代码库，为程序员提供浪漫的表白方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O1F0sg2sE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xlucn/oh-my-foss-android&#34;&gt;oh-my-foss-android&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集的实用、良心开源的安卓软件清单，涵盖应用商店、浏览器、视频播放器、相机、学习办公和日常工具等类别，经过作者严格筛选。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NE6EsCBfG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pingcap/awesome-database-learning&#34;&gt;Awesome Database Learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心整理的数据库学习合集，涵盖课程、书籍、讲座、论文等数据库相关学习资料，帮助了解数据库内部工作原理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCg9h4lyk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kenjihiranabe/The-Art-of-Linear-Algebra&#34;&gt;The-Art-of-Linear-Algebra&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份对《给每个人的线性代数》书籍的图解笔记，通过可视化图释帮助理解矩阵分解、向量、矩阵计算和算法，提供中英日三种语言笔记。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Op9kZlucP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/google-gemini/gemini-api-cookbook&#34;&gt;Gemini API Cookbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份由 Google 在 GitHub 上分享的 Gemini API 学习手册，旨在帮助开发者更好地理解和使用 Gemini API，包括使用指南、快速入门教程和示例项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/O6EVM2ZlG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;项目&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SteveSuv/remix-words-funny&#34;&gt;WordsFunny&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个全栈英语单词学习网站，涵盖多个版本的词汇资源，提供在线播读、翻译、同义词和例句等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/P77KYCasD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RomanHauksson/academic-project-astro-template&#34;&gt;academic-project-astro-template&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Astro 和 Tailwind CSS 构建的精美学术项目页面模版，具有快速加载、响应式设计、易于访问和 SEO 友好等特性，支持使用 Markdown 编辑内容并显示标题、图片、公式、两列布局、代码块和视频等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/OCBR72YtO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/suyalcinkaya/onur.dev&#34;&gt;onur.dev&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个极简风格的三栏式个人主页网站，使用了 Next . js、Tailwind CSS、shadcn / ui、Contentful、Raindrop、Supabase 构建并部署在 Vercel 上，兼容移动端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NCP6M7JBr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;!-- raw HTML omitted --&gt;</description>
    </item>
    <item>
      <title>二十四孝图</title>
      <link>https://note.lican.site/article/%E4%BA%8C%E5%8D%81%E5%9B%9B%E5%AD%9D%E5%9B%BE/</link>
      <pubDate>Thu, 06 Jun 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/article/%E4%BA%8C%E5%8D%81%E5%9B%9B%E5%AD%9D%E5%9B%BE/</guid>
      <description>&lt;p&gt;我总要&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%8A%E4%B8%8B%E5%9B%9B%E6%96%B9/10944701?fromModule=lemma_inlink&#34;&gt;上下四方&lt;/a&gt;寻求，得到一种最黑，最黑，最黑的咒文，先来诅咒一切反对白话，妨害白话者。即使人死了&lt;a href=&#34;https://baike.baidu.com/item/%E7%9C%9F%E6%9C%89/4194072?fromModule=lemma_inlink&#34;&gt;真有&lt;/a&gt;灵魂，因这罪恶的心，应该堕入地狱，也将决不改悔，总要先来诅咒一切反对白话，妨害白话者。&lt;/p&gt;&#xA;&lt;p&gt;自从所谓“&lt;a href=&#34;https://baike.baidu.com/item/%E6%96%87%E5%AD%A6%E9%9D%A9%E5%91%BD/10716085?fromModule=lemma_inlink&#34;&gt;文学革命&lt;/a&gt;”以来，供给孩子的书籍，和欧、美、&lt;a href=&#34;https://baike.baidu.com/item/%E6%97%A5%E6%9C%AC/111617?fromModule=lemma_inlink&#34;&gt;日本&lt;/a&gt;的一比较，虽然很可怜，但总算有图可说，只要能读下去，就可以懂得的了。可是一般别有心肠的人们，便竭力来阻遏它，要使孩子的世界中，没有一丝乐趣。&lt;/p&gt;&#xA;&lt;p&gt;只要对于白话来加以谋害者，都应该灭亡。&lt;/p&gt;&#xA;&lt;p&gt;这些话，绅士们自然难免要掩住耳朵的，因为就是所谓“跳到半天空，骂得体无完肤，——还不肯罢休。”而且文士们一定也要骂，以为大悖于“文格”，亦即大损于“人格”。岂不是“言者心声也”么？“文”和“人”当然是相关的，虽然人间世本来千奇百怪，教授们中也有“不尊敬”作者的人格而不能“不说他的小说好”的特别种族。但这些我都不管，因为我幸而还没有爬上“象牙之塔”去，正无须怎样小心。倘若无意中竟已撞上了，那就即刻跌下来罢。然而在跌下来的中途，当还未到地之前，还要说一遍：&lt;/p&gt;&#xA;&lt;p&gt;只要对于白话来加以谋害者，都应该灭亡。&lt;/p&gt;&#xA;&lt;p&gt;每看见小学生欢天喜地地看着一本粗拙的《儿童世界》之类，另想到别国的儿童用书的精美，自然要觉得&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%AD%E5%9B%BD%E5%84%BF%E7%AB%A5/0?fromModule=lemma_inlink&#34;&gt;中国儿童&lt;/a&gt;的可怜。但回忆起我和我的同窗小友的童年，却不能不以为他幸福，给我们的永逝的韶光一个悲哀的吊唁。我们那时有什么可看呢，只要略有图画的本子，就要被&lt;a href=&#34;https://baike.baidu.com/item/%E5%A1%BE%E5%B8%88/1002159?fromModule=lemma_inlink&#34;&gt;塾师&lt;/a&gt;，就是当时的“引导青年的前辈”禁止，呵斥，甚而至于&lt;a href=&#34;https://baike.baidu.com/item/%E6%89%93%E6%89%8B%E5%BF%83/18362128?fromModule=lemma_inlink&#34;&gt;打手心&lt;/a&gt;。我的小同学因为专读“人之初性本善”读得要枯燥而死了，只好偷偷地翻开第一页，看那题着“文星高照”四个字的恶鬼一般的&lt;a href=&#34;https://baike.baidu.com/item/%E9%AD%81%E6%98%9F/1316010?fromModule=lemma_inlink&#34;&gt;魁星&lt;/a&gt;像，来满足他幼稚的爱美的天性。昨天看这个，今天也看这个，然而他们的眼睛里还闪出苏醒和欢喜的光辉来。&lt;/p&gt;&#xA;&lt;p&gt;在&lt;a href=&#34;https://baike.baidu.com/item/%E4%B9%A6%E5%A1%BE/10464956?fromModule=lemma_inlink&#34;&gt;书塾&lt;/a&gt;以外，禁令可比较的宽了，但这是说&lt;a href=&#34;https://baike.baidu.com/item/%E8%87%AA%E5%B7%B1%E7%9A%84%E4%BA%8B/15688619?fromModule=lemma_inlink&#34;&gt;自己的事&lt;/a&gt;，各人大概不一样。我能在大众面前，冠冕堂皇地阅看的，是《文昌帝君阴骘文图说》和《玉历钞传》，都画着冥冥之中赏善罚恶的故事，&lt;a href=&#34;https://baike.baidu.com/item/%E9%9B%B7%E5%85%AC%E7%94%B5%E6%AF%8D/5480834?fromModule=lemma_inlink&#34;&gt;雷公电母&lt;/a&gt;站在云中，&lt;a href=&#34;https://baike.baidu.com/item/%E7%89%9B%E5%A4%B4%E9%A9%AC%E9%9D%A2/924227?fromModule=lemma_inlink&#34;&gt;牛头马面&lt;/a&gt;布满地下，不但“跳到半天空”是触犯天条的，即使半语不合，一念偶差，也都得受相当的报应。这所报的也并非“睚眦之怨”，因为那地方是鬼神为君，“公理”作宰，请酒下跪，全都无功，简直是无法可想。在中国的天地间，不但做人，便是做鬼，也艰难极了。然而究竟很有比阳间更好的处所：无所谓“绅士”，也没有“流言”。&lt;/p&gt;&#xA;&lt;p&gt;阴间，倘要稳妥，是颂扬不得的。尤其是常常好弄笔墨的人，当前的中国，流言的治下，而又大谈“言行一致”的时候。前车可鉴，听说&lt;a href=&#34;https://baike.baidu.com/item/%E9%98%BF%E5%B0%94%E5%BF%97%E8%B7%8B%E7%BB%A5%E5%A4%AB/129082?fromModule=lemma_inlink&#34;&gt;阿尔志跋绥夫&lt;/a&gt;曾答一个少女的质问说，“惟有在人生的事实这本身中寻出欢喜者，可以活下去。倘若在那里什么也不见，他们其实倒不如死。”于是乎有一个叫作密哈罗夫的，寄信嘲骂他道，“……所以我完全诚实地劝你自杀来祸福你自己的生命，因为这第一是合于逻辑，第二是你的言语和行为不至于&lt;a href=&#34;https://baike.baidu.com/item/%E8%83%8C%E9%A9%B0/1473623?fromModule=lemma_inlink&#34;&gt;背驰&lt;/a&gt;。”&lt;/p&gt;&#xA;&lt;p&gt;其实这论法就是谋杀，他就这样地在他的人生中寻出欢喜来。&lt;a href=&#34;https://baike.baidu.com/item/%E9%98%BF%E5%B0%94%E5%BF%97%E8%B7%8B%E7%BB%A5%E5%A4%AB/129082?fromModule=lemma_inlink&#34;&gt;阿尔志跋绥夫&lt;/a&gt;只发了一大通牢骚，没有自杀。密哈罗夫先生后来不知道怎样，这一个欢喜失掉了，或者另外又寻到了“什么”了罢。诚然，“这些时候，勇敢，是安稳的；情热，是毫无危险的。”&lt;/p&gt;&#xA;&lt;p&gt;然而，对于阴间，我终于已经颂扬过了，无法追改；虽有“言行不符”之嫌，但确没有受过阎王或小鬼的半文津贴，则差可以自解。总而言之，还是仍然写下去罢：&lt;/p&gt;&#xA;&lt;p&gt;我所看的那些阴间的图画，都是家藏的老书，并非我所专有。我所收得的最先的画图本子，是一位长辈的赠品：《二十四孝图》。这虽然不过薄薄的一本书，但是下图上说，鬼少人多，又为我一人所独有，使我高兴极了。那里面的故事，似乎是谁都知道的；便是不识字的人，例如阿长，也只要一看图画便能够滔滔地讲出这一段的事迹。但是，我于高兴之余，接着就是扫兴，因为我请人讲完了二十四个故事之后，才知道“孝”有如此之难，对于先前痴心妄想，想做孝子的计划，完全绝望了。&lt;/p&gt;&#xA;&lt;p&gt;“人之初，性本善”么？这并非要以加研究的问题。但我还依稀记得，我幼小时候实未尝蓄意忤逆，对于父母，倒是极愿意孝顺的。不过年幼无知，只用了私见来解释“孝顺”的做法，以为无非是“听话”，“从命”，以及长大之后，给年老的父母好好地吃饭罢了。自从得了《孝子》这一本教科书以后，才知道并不然，而且还要难到几十几百倍。其中自然也有可以勉力仿效的，如“&lt;a href=&#34;https://baike.baidu.com/item/%E5%AD%90%E8%B7%AF%E8%B4%9F%E7%B1%B3/6799151?fromModule=lemma_inlink&#34;&gt;子路负米&lt;/a&gt;”，“&lt;a href=&#34;https://baike.baidu.com/item/%E9%BB%84%E9%A6%99/894938?fromModule=lemma_inlink&#34;&gt;黄香&lt;/a&gt;扇枕”之类的。“&lt;a href=&#34;https://baike.baidu.com/item/%E9%99%86%E7%BB%A9%E6%80%80%E6%A1%94/11049790?fromModule=lemma_inlink&#34;&gt;陆绩怀桔&lt;/a&gt;”也并不难，只要有阔人请我吃饭。“鲁迅先生作宾客而怀橘乎？”我便跪答云，“吾&lt;a href=&#34;https://baike.baidu.com/item/%E6%AF%8D%E6%80%A7/68745?fromModule=lemma_inlink&#34;&gt;母性&lt;/a&gt;之所爱，欲归以遗母。”阔人十分佩服，于是孝子就做稳了，也非常省事。“&lt;a href=&#34;https://baike.baidu.com/item/%E5%93%AD%E7%AB%B9%E7%94%9F%E7%AC%8B/2759537?fromModule=lemma_inlink&#34;&gt;哭竹生笋&lt;/a&gt;”就可疑，怕我的精诚未必会这样感动天地。但是哭不出笋来，还不过抛脸而已，到“卧冰求&lt;a href=&#34;https://baike.baidu.com/item/%E9%B2%A4/409722?fromModule=lemma_inlink&#34;&gt;鲤&lt;/a&gt;”，可就有性命之虞了。我乡的天气是温和的，严冬中，水面也只结一层薄冰，即使孩子的重量怎样小，躺上去，也一定哗喇一声，冰破落水，鲤鱼还不及游过来。自然，必须不顾性命，这才&lt;a href=&#34;https://baike.baidu.com/item/%E5%AD%9D%E6%84%9F/163646?fromModule=lemma_inlink&#34;&gt;孝感&lt;/a&gt;神明，会有出乎意料之外的奇迹，但那时我还小，实在不明白这些。&lt;/p&gt;&#xA;&lt;p&gt;其中最使我不解，甚至于发生反感的，是“老莱娱亲”和“&lt;a href=&#34;https://baike.baidu.com/item/%E9%83%AD%E5%B7%A8%E5%9F%8B%E5%84%BF/0?fromModule=lemma_inlink&#34;&gt;郭巨埋儿&lt;/a&gt;”两件事。&lt;/p&gt;&#xA;&lt;p&gt;我至今还记得，一个躺在父母跟前的&lt;a href=&#34;https://baike.baidu.com/item/%E8%80%81%E5%A4%B4%E5%AD%90/44085?fromModule=lemma_inlink&#34;&gt;老头子&lt;/a&gt;，一个抱在母亲手上的小孩子，是怎样地使我发生不同的感想呵。他们一手都拿着“摇咕咚”。这&lt;a href=&#34;https://baike.baidu.com/item/%E7%8E%A9%E6%84%8F%E5%84%BF/18558480?fromModule=lemma_inlink&#34;&gt;玩意儿&lt;/a&gt;确是可爱的，北京称为&lt;a href=&#34;https://baike.baidu.com/item/%E5%B0%8F%E9%BC%93/4306387?fromModule=lemma_inlink&#34;&gt;小鼓&lt;/a&gt;，盖即鼗也，&lt;a href=&#34;https://baike.baidu.com/item/%E6%9C%B1%E7%86%B9/106669?fromModule=lemma_inlink&#34;&gt;朱熹&lt;/a&gt;曰：“鼗，小鼓，两旁有耳；持其柄而摇之，则旁耳还自击，”咕咚咕咚地响起来。然而这东西是不该拿在老莱子手里的，他应该扶一枝拐杖。装佯，侮辱了孩子。我没有再看第二回，一到这一页，便急速地翻过去了。&lt;/p&gt;&#xA;&lt;p&gt;那时的《二十四孝图》，早已不知去向了，目下所有的只是一本日本小田海仙所画的本子，叙老莱子事云：“&lt;a href=&#34;https://baike.baidu.com/item/%E8%A1%8C%E5%B9%B4%E4%B8%83%E5%8D%81/5879260?fromModule=lemma_inlink&#34;&gt;行年七十&lt;/a&gt;，言不称老，常著五色斑斓之衣，为婴儿戏于亲侧。又常取水&lt;a href=&#34;https://baike.baidu.com/item/%E4%B8%8A%E5%A0%82/4790342?fromModule=lemma_inlink&#34;&gt;上堂&lt;/a&gt;，诈跌仆地，作婴儿啼，以娱亲意。”大约旧本也差不多，而招我反感的便是“诈跌”。无论忤逆，无论孝顺，“诈”作，听故事也不喜欢是谣言，这是凡有稍稍留心&lt;a href=&#34;https://baike.baidu.com/item/%E5%84%BF%E7%AB%A5%E5%BF%83%E7%90%86/7636220?fromModule=lemma_inlink&#34;&gt;儿童心理&lt;/a&gt;的都知道的。&lt;/p&gt;&#xA;&lt;p&gt;然而在较古的书上一查，却还不至于如此虚伪。&lt;a href=&#34;https://baike.baidu.com/item/%E5%B8%88%E8%A7%89%E6%8E%88/17602981?fromModule=lemma_inlink&#34;&gt;师觉授&lt;/a&gt;《&lt;a href=&#34;https://baike.baidu.com/item/%E5%AD%9D%E5%AD%90%E4%BC%A0/10090624?fromModule=lemma_inlink&#34;&gt;孝子传&lt;/a&gt;》云，“老莱子……常衣斑斓之衣，为亲取饮，上堂脚跌，恐伤父母之心，僵仆为婴儿啼。”（《&lt;a href=&#34;https://baike.baidu.com/item/%E5%A4%AA%E5%B9%B3%E5%BE%A1%E8%A7%88/683324?fromModule=lemma_inlink&#34;&gt;太平御览&lt;/a&gt;》四百十三引）较之今说，似稍近于人情。不知怎地，后之君子却一定要改得他“诈”起来，心里才能舒服。&lt;a href=&#34;https://baike.baidu.com/item/%E9%82%93%E4%BC%AF%E9%81%93/4593571?fromModule=lemma_inlink&#34;&gt;邓伯道&lt;/a&gt;弃子救侄，想来也不过“弃”而已矣，昏妄人也必须说他将儿子捆在树上，使他追不上来才肯歇手。正如将“肉麻当作有趣”一般，以不情为伦纪，诬蔑了古人，教坏了后人。&lt;a href=&#34;https://baike.baidu.com/item/%E8%80%81%E8%8E%B1%E5%AD%90/1784080?fromModule=lemma_inlink&#34;&gt;老莱子&lt;/a&gt;即是一例，道学先生以为他白璧无瑕时，他却已在孩子的心中死掉了。&lt;/p&gt;&#xA;&lt;p&gt;至于玩着“摇咕咚”的&lt;a href=&#34;https://baike.baidu.com/item/%E9%83%AD%E5%B7%A8/1110507?fromModule=lemma_inlink&#34;&gt;郭巨&lt;/a&gt;的儿子，却实在值得同情。他被抱在他母亲的臂膊上，高高兴兴地笑着；他的父亲却正在掘窟窿，要将他埋掉了。说明云，“汉郭巨家贫，有子三岁，母尝减食与之。巨谓妻曰，贫乏不能供母，子又&lt;a href=&#34;https://baike.baidu.com/item/%E5%88%86%E6%AF%8D/5421449?fromModule=lemma_inlink&#34;&gt;分母&lt;/a&gt;之食。盍埋此子？”但是&lt;a href=&#34;https://baike.baidu.com/item/%E5%88%98%E5%90%91/197150?fromModule=lemma_inlink&#34;&gt;刘向&lt;/a&gt;《孝子传》所说，却又有些不同：巨家是富的，他都给了两弟；孩子是才生的，并没有到三岁。结末又大略相象了，“及掘坑二尺，得黄金一釜，上云：天赐郭巨，官不得取，民不得夺！”&lt;/p&gt;&#xA;&lt;p&gt;我最初实在替这孩子捏一把汗，待到掘出黄金一釜，这才觉得轻松。然而我已经不但自己不敢再想做孝子，并且怕我父亲去做孝子了。家景正在坏下去，常听到父母愁柴米；祖母又老了，倘使我的父亲竟学了郭巨，那么，该埋的不正是我么？如果一丝不走样，也掘出一釜黄金来，那自然是如天之福，但是，那时我虽然年纪小，似乎也明白天下未必有这样的巧事。&lt;/p&gt;&#xA;&lt;p&gt;回想起来，实在很觉得傻气。这是因为人们已经知道了这些老&lt;a href=&#34;https://baike.baidu.com/item/%E7%8E%A9%E6%84%8F/10283668?fromModule=lemma_inlink&#34;&gt;玩意&lt;/a&gt;，本来谁也不实行。整饬伦纪的文电是常有的，却很少见绅士赤条条地躺在冰上面，将军跳下汽车去负米。何况我早长大了，看过几部古书，买过几本新书，什么《&lt;a href=&#34;https://baike.baidu.com/item/%E5%A4%AA%E5%B9%B3%E5%BE%A1%E8%A7%88/683324?fromModule=lemma_inlink&#34;&gt;太平御览&lt;/a&gt;》咧，《古孝子传》咧，《人口问题》咧，《&lt;a href=&#34;https://baike.baidu.com/item/%E8%8A%82%E5%88%B6%E7%94%9F%E8%82%B2/2859583?fromModule=lemma_inlink&#34;&gt;节制生育&lt;/a&gt;》咧，《二十世纪是儿童的世界》咧，可以抵抗被埋的理由多得很。不过彼一时，此一时，彼时我委实有点害怕：掘好深坑，不见黄金，连“摇咕咚”一同埋下去，盖上土，踏得实实的，又有什么法子可想呢。我想，事情虽然未必实现，但我从此总怕听到我的父母愁穷，怕看见我的白发的祖母，总觉得她是和我不两立，至少，也是一个和我的生命有些妨碍的人。后来这印象日见其淡了，但总有一些留遗，一直到她去世——这大概是送给《二十四孝图》的儒者所万料不到的罢&lt;/p&gt;</description>
    </item>
    <item>
      <title>二郎内网穿透&#43;主从复制</title>
      <link>https://note.lican.site/posts/%E4%BA%8C%E9%83%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</link>
      <pubDate>Wed, 21 Feb 2024 11:28:28 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E4%BA%8C%E9%83%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</guid>
      <description>&lt;h3 id=&#34;二郎内网穿透主从复制搭建&#34;&gt;二郎内网穿透+主从复制搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：外网服务器device-el.brew.langjiu.cn:13346需要同步5台内网服务器的数据[10.70.84.106:13306,10.70.85.100:13306,10.71.97.220:13306,10.71.111.230:13306,10.71.111.232:13306, 10.71.36.150:13306]，内网服务器为主服务器，外网服务器为从服务器，这里需用到内网穿透和多主一从数据库同步技术&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;外网： device-el.brew.langjiu.cn:13336&#xD;&#xA;内网：&#xD;&#xA;&#x9; 10.70.84.106:13306  =&amp;gt; 吴家沟窖池参观 -&amp;gt;wjg_106/a123456&#xD;&#xA;&#x9; 10.70.85.100:13306   =&amp;gt; 吴家沟曲房 -&amp;gt;wjg_100/a123456&#xD;&#xA;      10.71.97.220:13306  =&amp;gt; 黄金坝窖池 -&amp;gt;hjb_220/a123456&#xD;&#xA;      10.71.111.230:13306  =&amp;gt; 临河4车间2班窖池 -&amp;gt;lh_230/a123456&#xD;&#xA;      10.71.111.232:13306  =&amp;gt; 临河4车间1班窖池 -&amp;gt;lh_232/a123456&#xD;&#xA;      10.71.36.150:13306  =&amp;gt; 盘龙湾 -&amp;gt;plw_150/a123456&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现思路：在外网服务器上通过开启五个端口分别访问到内网1，内网2，内网3，内网4，内网5, 内网6的数据库，再通过这六个端口实现多主一从数据复制&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;device-el.brew.langjiu.cn:23306 =&amp;gt; 10.70.84.106:13306&#xD;&#xA;device-el.brew.langjiu.cn:23307 =&amp;gt; 10.70.85.100:13306&#xD;&#xA;device-el.brew.langjiu.cn:23308 =&amp;gt; 10.71.97.220:13306&#xD;&#xA;device-el.brew.langjiu.cn:23309 =&amp;gt; 10.71.111.230:13306&#xD;&#xA;device-el.brew.langjiu.cn:23310 =&amp;gt; 10.71.111.232:13306&#xD;&#xA;device-el.brew.langjiu.cn:23311 =&amp;gt; 10.71.36.150:13306 // 盘龙湾&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现步骤：&lt;/p&gt;&#xA;&lt;p&gt;1.分别在外网内网的服务器上安装proxy&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2.分别在外网内网的服务器上安装screen&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;centos: yum -y install screen&#xD;&#xA;ubuntu: apt-get install screen&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3.在外网服务器【192.168.77.6】上生成密钥&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /data/proxy&#xD;&#xA;proxy keygen -C proxy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4.在外网服务器上进入含有密钥的路径下新建窗口并执行命令，注意，执行此命令的路径需要有上一步生成的密钥【在外网服务器上创建服务端和桥端】&lt;/p&gt;</description>
    </item>
    <item>
      <title>二郎内网穿透&#43;主从复制</title>
      <link>https://note.lican.site/tech/%E4%BA%8C%E9%83%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</link>
      <pubDate>Wed, 21 Feb 2024 11:28:28 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E4%BA%8C%E9%83%8E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</guid>
      <description>&lt;h3 id=&#34;二郎内网穿透主从复制搭建&#34;&gt;二郎内网穿透+主从复制搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：外网服务器device-el.brew.langjiu.cn:13346需要同步5台内网服务器的数据[10.70.84.106:13306,10.70.85.100:13306,10.71.97.220:13306,10.71.111.230:13306,10.71.111.232:13306, 10.71.36.150:13306]，内网服务器为主服务器，外网服务器为从服务器，这里需用到内网穿透和多主一从数据库同步技术&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;外网： device-el.brew.langjiu.cn:13336&#xD;&#xA;内网：&#xD;&#xA;&#x9; 10.70.84.106:13306  =&amp;gt; 吴家沟窖池参观 -&amp;gt;wjg_106/a123456&#xD;&#xA;&#x9; 10.70.85.100:13306   =&amp;gt; 吴家沟曲房 -&amp;gt;wjg_100/a123456&#xD;&#xA;      10.71.97.220:13306  =&amp;gt; 黄金坝窖池 -&amp;gt;hjb_220/a123456&#xD;&#xA;      10.71.111.230:13306  =&amp;gt; 临河4车间2班窖池 -&amp;gt;lh_230/a123456&#xD;&#xA;      10.71.111.232:13306  =&amp;gt; 临河4车间1班窖池 -&amp;gt;lh_232/a123456&#xD;&#xA;      10.71.36.150:13306  =&amp;gt; 盘龙湾 -&amp;gt;plw_150/a123456&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现思路：在外网服务器上通过开启五个端口分别访问到内网1，内网2，内网3，内网4，内网5, 内网6的数据库，再通过这六个端口实现多主一从数据复制&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;device-el.brew.langjiu.cn:23306 =&amp;gt; 10.70.84.106:13306&#xD;&#xA;device-el.brew.langjiu.cn:23307 =&amp;gt; 10.70.85.100:13306&#xD;&#xA;device-el.brew.langjiu.cn:23308 =&amp;gt; 10.71.97.220:13306&#xD;&#xA;device-el.brew.langjiu.cn:23309 =&amp;gt; 10.71.111.230:13306&#xD;&#xA;device-el.brew.langjiu.cn:23310 =&amp;gt; 10.71.111.232:13306&#xD;&#xA;device-el.brew.langjiu.cn:23311 =&amp;gt; 10.71.36.150:13306 // 盘龙湾&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现步骤：&lt;/p&gt;&#xA;&lt;p&gt;1.分别在外网内网的服务器上安装proxy&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2.分别在外网内网的服务器上安装screen&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;centos: yum -y install screen&#xD;&#xA;ubuntu: apt-get install screen&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3.在外网服务器【192.168.77.6】上生成密钥&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /data/proxy&#xD;&#xA;proxy keygen -C proxy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4.在外网服务器上进入含有密钥的路径下新建窗口并执行命令，注意，执行此命令的路径需要有上一步生成的密钥【在外网服务器上创建服务端和桥端】&lt;/p&gt;</description>
    </item>
    <item>
      <title>泸州内网穿透&#43;主从复制搭建</title>
      <link>https://note.lican.site/posts/%E6%B3%B8%E5%B7%9E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</link>
      <pubDate>Wed, 21 Feb 2024 11:28:28 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E6%B3%B8%E5%B7%9E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</guid>
      <description>&lt;h3 id=&#34;泸州内网穿透主从复制搭建&#34;&gt;泸州内网穿透+主从复制搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：外网服务器device-lz.brew.langjiu.cn:13336需要同步3台内网服务器的数据[10.100.14.52:13306，10.100.14.53:13306,  10.100.14.55:13306 ],内网服务器为主服务器，外网服务器为从服务器，这里需用到内网穿透和多主一从数据库同步技术&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;外网： device-lz.brew.langjiu.cn:13336&#xD;&#xA;内网：10.100.14.52:13306   =&amp;gt; 211车间&#xD;&#xA;      10.100.14.53:13306  =&amp;gt; 204车间&#xD;&#xA;      10.100.14.55:13306  =&amp;gt; 203车间&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现思路：在外网服务器上通过开启三个端口分别访问到内网1，内网2，内网3的数据库，再通过这三个端口实现多主一从数据复制&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;device-lz.brew.langjiu.cn:23306 =&amp;gt; 10.100.14.52:13306&#xD;&#xA;device-lz.brew.langjiu.cn:23307 =&amp;gt; 10.100.14.53:13306&#xD;&#xA;device-lz.brew.langjiu.cn:23308 =&amp;gt; 10.100.14.55:13306&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现步骤：&lt;/p&gt;&#xA;&lt;p&gt;1.分别在外网内网的服务器上安装proxy&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2.分别在外网内网的服务器上安装screen&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;centos: yum -y install screen&#xD;&#xA;ubuntu: apt-get install screen&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3.在外网服务器【192.168.77.5】上生成密钥&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /data/proxy&#xD;&#xA;proxy keygen -C proxy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4.在外网服务器上进入含有密钥的路径下新建窗口并执行命令，注意，执行此命令的路径需要有上一步生成的密钥【在外网服务器上创建服务端和桥端】&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;映射1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /data/proxy&#xD;&#xA;screen -S proxy_server1&#xD;&#xA;proxy server -r &amp;#34;:23306@:13306&amp;#34; -P &amp;#34;127.0.0.1:33306&amp;#34; -C ./proxy.crt -K ./proxy.key&#xD;&#xA;screen -S proxy_bridge1&#xD;&#xA;proxy bridge -p &amp;#34;:33306&amp;#34; -C ./proxy.crt -K proxy.key&#xD;&#xA;&#xD;&#xA;ctrl + a + d 挂到后台&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;映射2&lt;/p&gt;</description>
    </item>
    <item>
      <title>泸州内网穿透&#43;主从复制搭建</title>
      <link>https://note.lican.site/tech/%E6%B3%B8%E5%B7%9E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</link>
      <pubDate>Wed, 21 Feb 2024 11:28:28 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E6%B3%B8%E5%B7%9E%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%92%8C%E4%B8%BB%E4%BB%8E%E5%A4%8D%E5%88%B6/</guid>
      <description>&lt;h3 id=&#34;泸州内网穿透主从复制搭建&#34;&gt;泸州内网穿透+主从复制搭建&lt;/h3&gt;&#xA;&lt;p&gt;背景：外网服务器device-lz.brew.langjiu.cn:13336需要同步3台内网服务器的数据[10.100.14.52:13306，10.100.14.53:13306,  10.100.14.55:13306 ],内网服务器为主服务器，外网服务器为从服务器，这里需用到内网穿透和多主一从数据库同步技术&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;外网： device-lz.brew.langjiu.cn:13336&#xD;&#xA;内网：10.100.14.52:13306   =&amp;gt; 211车间&#xD;&#xA;      10.100.14.53:13306  =&amp;gt; 204车间&#xD;&#xA;      10.100.14.55:13306  =&amp;gt; 203车间&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现思路：在外网服务器上通过开启三个端口分别访问到内网1，内网2，内网3的数据库，再通过这三个端口实现多主一从数据复制&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;device-lz.brew.langjiu.cn:23306 =&amp;gt; 10.100.14.52:13306&#xD;&#xA;device-lz.brew.langjiu.cn:23307 =&amp;gt; 10.100.14.53:13306&#xD;&#xA;device-lz.brew.langjiu.cn:23308 =&amp;gt; 10.100.14.55:13306&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实现步骤：&lt;/p&gt;&#xA;&lt;p&gt;1.分别在外网内网的服务器上安装proxy&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;curl -L https://mirrors.host900.com/https://github.com/snail007/goproxy/blob/master/install_auto.sh | bash &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2.分别在外网内网的服务器上安装screen&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;分别登录到泸州厂区服务器和三台内网mini服务器上执行&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;centos: yum -y install screen&#xD;&#xA;ubuntu: apt-get install screen&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3.在外网服务器【192.168.77.5】上生成密钥&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /data/proxy&#xD;&#xA;proxy keygen -C proxy&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4.在外网服务器上进入含有密钥的路径下新建窗口并执行命令，注意，执行此命令的路径需要有上一步生成的密钥【在外网服务器上创建服务端和桥端】&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;映射1&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /data/proxy&#xD;&#xA;screen -S proxy_server1&#xD;&#xA;proxy server -r &amp;#34;:23306@:13306&amp;#34; -P &amp;#34;127.0.0.1:33306&amp;#34; -C ./proxy.crt -K ./proxy.key&#xD;&#xA;screen -S proxy_bridge1&#xD;&#xA;proxy bridge -p &amp;#34;:33306&amp;#34; -C ./proxy.crt -K proxy.key&#xD;&#xA;&#xD;&#xA;ctrl + a + d 挂到后台&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;映射2&lt;/p&gt;</description>
    </item>
    <item>
      <title>创建物理卷组</title>
      <link>https://note.lican.site/posts/%E5%88%9B%E5%BB%BA%E7%89%A9%E7%90%86%E5%8D%B7%E7%BB%84/</link>
      <pubDate>Wed, 21 Feb 2024 11:16:44 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E5%88%9B%E5%BB%BA%E7%89%A9%E7%90%86%E5%8D%B7%E7%BB%84/</guid>
      <description>&lt;h3 id=&#34;创建物理卷&#34;&gt;创建物理卷&lt;/h3&gt;&#xA;&lt;p&gt;pvcreate /dev/sdb&#xA;创建卷组：&#xA;vgcreate &amp;lt;卷组名称&amp;gt; /dev/sdb&#xA;创建逻辑卷：&#xA;lvcreate -n &amp;lt;逻辑卷名称&amp;gt; -l 100%FREE &amp;lt;卷组名称&amp;gt;&#xA;格式化逻辑卷：&#xA;mkfs.ext4 /dev/&amp;lt;卷组名称&amp;gt;/&amp;lt;逻辑卷名称&amp;gt;&#xA;创建挂载点：&#xA;mkdir /data_new&#xA;挂载逻辑卷：&#xA;mount /dev/&amp;lt;卷组名称&amp;gt;/&amp;lt;逻辑卷名称&amp;gt; /data_new&#xA;配置自动挂载（可选）：&#xA;如果希望系统在启动时自动挂载逻辑卷，可以将其添加到 /etc/fstab 文件中。打开 /etc/fstab 文件并添加以下行：&#xA;/dev/&amp;lt;卷组名称&amp;gt;/&amp;lt;逻辑卷名称&amp;gt;   /data_new   ext4   defaults   0  0&lt;/p&gt;&#xA;&lt;p&gt;pvdisplay：查看空间情况&#xA;vgdisplay 查看vg&lt;/p&gt;&#xA;&lt;p&gt;eg:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pvcreate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vgcreate&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nbi&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lvcreate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;vdb1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;l&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;%&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;FREE&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nbi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mkfs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ext4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nbi&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nbi&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Go安装扩展</title>
      <link>https://note.lican.site/posts/go%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95/</link>
      <pubDate>Wed, 21 Feb 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/posts/go%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95/</guid>
      <description>&lt;h3 id=&#34;go安装扩展失败&#34;&gt;go安装扩展失败&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我们第一次安装go时，会发现无法安装go的扩展&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;1.设置系统的环境变量，配置GOROOT和GOPATH&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GOROOT：go的安装目录 [C:\Program Files\Go]&lt;/li&gt;&#xA;&lt;li&gt;GOPATH: go的项目目录 [G:\lican\project]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2.设置go的proxy代理&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3.配置vscode中go的第三方扩展库地址&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go env -w GO111MODULE=on&#xD;&#xA;go env -w GOPROXY=https://goproxy.io,direct&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4.重启vscode&lt;/p&gt;&#xA;&lt;p&gt;Go:install/update tools&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go安装扩展</title>
      <link>https://note.lican.site/tech/go%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95/</link>
      <pubDate>Wed, 21 Feb 2024 11:13:28 +0800</pubDate>
      <guid>https://note.lican.site/tech/go%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95/</guid>
      <description>&lt;h3 id=&#34;go安装扩展失败&#34;&gt;go安装扩展失败&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;我们第一次安装go时，会发现无法安装go的扩展&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;1.设置系统的环境变量，配置GOROOT和GOPATH&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GOROOT：go的安装目录 [C:\Program Files\Go]&lt;/li&gt;&#xA;&lt;li&gt;GOPATH: go的项目目录 [G:\lican\project]&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2.设置go的proxy代理&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3.配置vscode中go的第三方扩展库地址&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go env -w GO111MODULE=on&#xD;&#xA;go env -w GOPROXY=https://goproxy.io,direct&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;4.重启vscode&lt;/p&gt;&#xA;&lt;p&gt;Go:install/update tools&lt;/p&gt;</description>
    </item>
    <item>
      <title>BankCode收集</title>
      <link>https://note.lican.site/posts/bankcode%E6%94%B6%E9%9B%86/</link>
      <pubDate>Wed, 21 Feb 2024 11:11:21 +0800</pubDate>
      <guid>https://note.lican.site/posts/bankcode%E6%94%B6%E9%9B%86/</guid>
      <description>&lt;h3 id=&#34;常用bankcode&#34;&gt;常用BankCode&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ABC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国农业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ARCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;安徽省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ASCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;鞍山银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;安阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BANKWF&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;潍坊银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BGB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广西北部湾银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BHB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;河北银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BJBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;北京银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BJRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;北京农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOCD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;承德银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOCY&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;朝阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东莞银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BODD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;丹东银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOHAIB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;渤海银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOJZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;锦州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOP&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;平顶山银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOQH&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;青海银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOSZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;苏州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOZK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;周口银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOYK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;营口银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BSB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;包商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BZMD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;驻马店银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CBBQS&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;城市商业银行资金清算中心&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CBKF&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;开封市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国建设银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CCQTGB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;重庆三峡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;国家开发银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CDCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;成都银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CDRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;成都农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CEB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国光大银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CGNB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南充市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CIB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;兴业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CITIC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中信银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CMB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;招商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CMBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国民生银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;COMM&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;交通银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CQBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;重庆银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CRCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;重庆农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CSCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;长沙银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CSRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;常熟农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江稠州商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CZRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;常州农村信用联社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DAQINGB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;龙江银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DLB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;大连银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DRCBCL&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东莞农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;德阳商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DYCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东营市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;德州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EGBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;恒丰银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;富滇银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FJHXBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;福建海峡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FSCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;抚顺银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FXCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;阜新银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广东发展银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GDRCC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广东省农村信用社联合社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;桂林银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广州农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GZRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;贵州省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GSRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;甘肃省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GXRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广西省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;贵阳市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GZB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;赣州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HANABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;韩亚银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;H3CB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;内蒙古银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;河北省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBHSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北银行黄石分行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBYCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北银行宜昌分行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HDBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;邯郸银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HKB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;汉口银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HKBEA&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东亚银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HNRCC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖南省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HNRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;河南省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HRXJB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;华融湘江银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HSBK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;衡水银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;徽商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HURCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;华夏银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;杭州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HZCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖州市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ICBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国工商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JHBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;金华银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JINCHB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;晋城银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JJBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;九江银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;吉林银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JLRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;吉林农信&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JNBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;济宁银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏江阴农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JSB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;晋商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JSRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏省农村信用联合社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;嘉兴银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JXRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江西省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;晋中市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;KLB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;昆仑银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;KORLABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;库尔勒市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;KSRB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;昆山农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LANGFB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;廊坊银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;莱商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LSBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;临商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LSCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;乐山市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LYBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;洛阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;辽阳市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LZYH&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;兰州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MTBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江民泰商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NBBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宁波银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NBYZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;鄞州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南昌银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NHB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南海农村信用联社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NHQS&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;农信银清算中心&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NJCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南京银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宁夏银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NXRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宁夏黄河农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NYNB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广东南粤银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ORBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;鄂尔多斯银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PSBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国邮政储蓄银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;QDCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;青岛银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;QLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;齐鲁银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;三门峡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SCRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;四川省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SDEB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;顺德农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SDRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;山东农信&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SHRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上海农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SHBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上海银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SJBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;盛京银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;平安银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上海浦东发展银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SRBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上饶银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;深圳农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SXCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;绍兴银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SXRCCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;陕西信合&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SZSBK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;石嘴山银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TACCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;泰安市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;天津银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏太仓农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;天津农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;台州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;URMQCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;乌鲁木齐市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WHCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;威海市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WHRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;武汉农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WJRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;吴江农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;无锡农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;温州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;西安银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XCYH&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;许昌银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中山小榄村镇银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XTB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;邢台银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;新乡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XYBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;信阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YBCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宜宾市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YDRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;尧都农商行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YNRCC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;云南省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YQCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;阳泉银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YXCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;玉溪市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZBCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;齐商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZGCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;自贡市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZJKCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;张家口市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZJNX&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江省农村信用社联合社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZJTLCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江泰隆商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZRCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;张家港农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZYCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;遵义市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;郑州银行&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>BankCode收集</title>
      <link>https://note.lican.site/tech/bankcode%E6%94%B6%E9%9B%86/</link>
      <pubDate>Wed, 21 Feb 2024 11:11:21 +0800</pubDate>
      <guid>https://note.lican.site/tech/bankcode%E6%94%B6%E9%9B%86/</guid>
      <description>&lt;h3 id=&#34;常用bankcode&#34;&gt;常用BankCode&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ABC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国农业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ARCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;安徽省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ASCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;鞍山银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;AYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;安阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BANKWF&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;潍坊银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BGB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广西北部湾银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BHB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;河北银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BJBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;北京银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BJRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;北京农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOCD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;承德银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOCY&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;朝阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东莞银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BODD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;丹东银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOHAIB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;渤海银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOJZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;锦州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOP&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;平顶山银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOQH&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;青海银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOSZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;苏州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOZK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;周口银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BOYK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;营口银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BSB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;包商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;BZMD&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;驻马店银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CBBQS&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;城市商业银行资金清算中心&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CBKF&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;开封市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国建设银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CCQTGB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;重庆三峡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;国家开发银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CDCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;成都银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CDRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;成都农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CEB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国光大银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CGNB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南充市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CIB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;兴业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CITIC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中信银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CMB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;招商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CMBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国民生银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;COMM&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;交通银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CQBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;重庆银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CRCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;重庆农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CSCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;长沙银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CSRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;常熟农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江稠州商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CZRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;常州农村信用联社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DAQINGB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;龙江银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DLB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;大连银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DRCBCL&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东莞农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;德阳商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DYCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东营市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;DZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;德州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EGBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;恒丰银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;富滇银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FJHXBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;福建海峡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FSCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;抚顺银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;FXCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;阜新银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广东发展银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GDRCC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广东省农村信用社联合社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;桂林银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广州农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GZRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;贵州省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GSRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;甘肃省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GXRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广西省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;贵阳市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;GZB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;赣州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HANABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;韩亚银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;H3CB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;内蒙古银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;河北省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBHSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北银行黄石分行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HBYCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北银行宜昌分行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HDBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;邯郸银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HKB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;汉口银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HKBEA&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;东亚银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HNRCC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖南省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HNRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;河南省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HRXJB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;华融湘江银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HSBK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;衡水银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;徽商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HURCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖北省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;华夏银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;杭州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HZCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;湖州市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ICBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国工商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JHBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;金华银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JINCHB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;晋城银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JJBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;九江银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;吉林银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JLRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;吉林农信&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JNBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;济宁银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏江阴农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JSB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;晋商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JSRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏省农村信用联合社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;嘉兴银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JXRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江西省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;JZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;晋中市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;KLB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;昆仑银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;KORLABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;库尔勒市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;KSRB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;昆山农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LANGFB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;廊坊银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LSBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;莱商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LSBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;临商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LSCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;乐山市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LYBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;洛阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LYCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;辽阳市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;LZYH&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;兰州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MTBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江民泰商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NBBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宁波银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NBYZ&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;鄞州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南昌银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NHB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南海农村信用联社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NHQS&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;农信银清算中心&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NJCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;南京银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宁夏银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NXRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宁夏黄河农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;NYNB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广东南粤银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ORBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;鄂尔多斯银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;PSBC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中国邮政储蓄银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;QDCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;青岛银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;QLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;齐鲁银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;三门峡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SCRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;四川省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SDEB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;顺德农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SDRCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;山东农信&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SHRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上海农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SHBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上海银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SJBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;盛京银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;平安银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SPDB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上海浦东发展银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SRBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;上饶银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;深圳农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SXCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;绍兴银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SXRCCU&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;陕西信合&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;SZSBK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;石嘴山银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TACCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;泰安市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;天津银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TCRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;江苏太仓农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;天津农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;TZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;台州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;URMQCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;乌鲁木齐市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WHCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;威海市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WHRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;武汉农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WJRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;吴江农商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;无锡农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;WZCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;温州银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XABANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;西安银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XCYH&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;许昌银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XLBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;中山小榄村镇银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XTB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;邢台银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XXBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;新乡银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XYBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;信阳银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YBCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;宜宾市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YDRCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;尧都农商行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YNRCC&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;云南省农村信用社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YQCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;阳泉银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;YXCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;玉溪市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZBCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;齐商银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZGCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;自贡市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZJKCCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;张家口市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZJNX&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江省农村信用社联合社&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZJTLCB&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;浙江泰隆商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZRCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;张家港农村商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZYCBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;遵义市商业银行&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ZZBANK&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;郑州银行&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Php安装</title>
      <link>https://note.lican.site/tech/php%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 21 Feb 2024 11:08:40 +0800</pubDate>
      <guid>https://note.lican.site/tech/php%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;php安装&#34;&gt;php安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;devilbox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;prod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;php&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;redis&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TZ&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;Asia&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;配置挂载到容器&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;在第一次启动容器后&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;复制出来&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;然后重建容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;local&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;数据卷挂载到容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;以root方式启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;R&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;php配置&#34;&gt;php配置&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;修改php配置，使其以root角色启动，否则容易出现文件夹读写权限的问题&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;容器php-fpm以root方式启动&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;R&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;修改./php/etc/php-fpm.conf&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;############################################################&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;############################################################&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;www&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;  = &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;配置./php/etc/php/php.ini,避免木马攻击&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;disable_functions&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;assert&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;system&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;passthru&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;shell_exec&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;exec&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;popen&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Redis安装</title>
      <link>https://note.lican.site/tech/redis%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 21 Feb 2024 11:06:39 +0800</pubDate>
      <guid>https://note.lican.site/tech/redis%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;redis安装&#34;&gt;redis安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;redis&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;redis:5.0.13&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 时区&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 启动附加持久化存储及密码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;command&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;redis-server --appendonly yes --requirepass k5tWl7hhhYF^$tEL%SeE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 数据卷&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./redis/data:/data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mysql安装</title>
      <link>https://note.lican.site/tech/mysql%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 21 Feb 2024 11:04:55 +0800</pubDate>
      <guid>https://note.lican.site/tech/mysql%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;mysql安装&#34;&gt;mysql安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# mysql数据库&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;mysql&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;mysql:5.7.35&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mysql&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# root 密码 &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;MYSQL_ROOT_PASSWORD=h!AlL608nGLnY3Abe0KL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 时区&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 数据及配置挂载到容器，在第一次启动容器后，复制出来，然后重建容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./mysql/lib/mysql:/var/lib/mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./mysql/conf.d:/etc/mysql/conf.d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;数据及配置挂载&#34;&gt;数据及配置挂载&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;复制容器文件到主机&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;复制数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;复制配置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;修改docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;mysql配置&#34;&gt;mysql配置&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;需要修改./mysql/conf.d/my.cnf&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;因为mysql5.7以后，mysql的sql_mode默认配置为ONLY_FULL_GROUP_BY,该值表示：对于使用 GROUP BY 进行查询的SQL，不允许 SELECT 部分出现 GROUP BY 中未出现的字段&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;mysqld&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sql_mode&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;STRICT_TRANS_TABLES&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;ERROR_FOR_DIVISION_BY_ZERO&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;NO_AUTO_CREATE_USER&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;NO_ENGINE_SUBSTITUTION&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;解释&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;STRICT_TRANS_TABLES,选项针对事务性存储引擎生效，对于非事务性存储引擎无效，该选项表示开启strict sql模式&lt;/li&gt;&#xA;&lt;li&gt;ERROR_FOR_DIVISION_BY_ZERO,INSERT或者UPDATE语句中，如果数据被0除，则出现警告（非strict sql模式下）或者错误(strict sql模式下)&lt;/li&gt;&#xA;&lt;li&gt;NO_AUTO_CREATE_USER,之前版本中使用GRANT语法，如果用户不存在则会自动创建用户，该选项限制该功能&lt;/li&gt;&#xA;&lt;li&gt;NO_ENGINE_SUBSTITUTION,在使用CREATE TABLE或者ALTER TABLE语法执行存储引擎的时候，如果设定的存储引擎被禁用或者未编译，会产生错误。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;严格模式下，mysql自身会对数据进行严格的校验（格式、长度、类型等），比如一个整型字段我们写入一个字符串类型的数据，在非严格模式下MySQL不会报错，同样如果定义了char或varchar类型的字段，当写入或更新的数据超过了定义的长度也不会报错。我认为这个对于编程来说没有任何好处，虽然我们尽量在代码中做数据校验。MySQL开启了严格模式从一定程序上来讲师对我们代码的一种测试，如果我们的开发环境没有开启严格模式在开发过程中也没有遇到错误，那么在上线或代码移植的时候将有可能出现不兼容的情况，因此在开发过程做最好开启MySQL的严格模式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx安装</title>
      <link>https://note.lican.site/tech/nginx%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 21 Feb 2024 11:01:45 +0800</pubDate>
      <guid>https://note.lican.site/tech/nginx%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;nginx安装&#34;&gt;nginx安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# nginx web服务器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;nginx&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx:1.21&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nginx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 运行依赖，保证其它程序先启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 如果还有其它程序，则依次添加在这里&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;php&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 指定时区&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 数据卷挂载&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 配置挂载到容器，在第一次启动容器后，复制出来，然后重建容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./nginx/nginx.conf:/etc/nginx/nginx.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./nginx/conf.d:/etc/nginx/conf.d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 证书目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# ./nginx/ssl:/ssl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 数据卷挂载到容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./front:/front&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./back:/back&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 日志&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 容器发生意外时，能自动重启&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;nginx-配置参考&#34;&gt;nginx 配置参考&lt;/h3&gt;&#xA;&lt;h2 id=&#34;1nginxconf&#34;&gt;1、nginx.conf&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;client_max_body_size 需要配置一下，否则上传大文件会失败&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;worker_processes&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;auto&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;error_log&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;notice&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pid&lt;/span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pid&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;events&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;worker_connections&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;types&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;default_type&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;octet&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stream&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log_format&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remote_addr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remote_user&lt;/span&gt; [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;time_local&lt;/span&gt;] &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$request&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;body_bytes_sent&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$http_referer&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$http_user_agent&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$http_x_forwarded_for&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;access_log&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;access&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sendfile&lt;/span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tcp_nopush&lt;/span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;keepalive_timeout&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;开启gzip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;启用gzip压缩的最小文件&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;；&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;小于设置值的文件将不会被压缩&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_min_length&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;压缩级别&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_comp_level&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;进行压缩的文件类型&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_types&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;plain&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;javascript&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;javascript&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;css&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;xml&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;javascript&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;httpd&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;jpeg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gif&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;png&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;是否在http&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header中添加Vary&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;Accept&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;建议开启&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_vary&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;这个最好配置一下&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;否则上传大文件会失败&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;client_max_body_size&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;vhost配置&#34;&gt;vhost配置&lt;/h3&gt;&#xA;&lt;h4 id=&#34;农场示例&#34;&gt;农场，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host主机&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以多个&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;农场大数据示例&#34;&gt;农场大数据，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;农场销售页面示例&#34;&gt;农场销售页面，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host主机&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以多个&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sales&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sales&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;农场溯源示例&#34;&gt;农场溯源，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host主机&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以多个&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;php&#34;&gt;php&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;api&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;public&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;下面三行是为了支持跨域&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Origin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Headers&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Requested&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;With&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Methods&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;POST&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;OPTIONS&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (!&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;request_filename&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;rewrite&lt;/span&gt;  ^(.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; ~ &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;(.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_pass&lt;/span&gt;   &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9000&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_index&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_split_path_info&lt;/span&gt;  ^((&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;U&lt;/span&gt;).&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;)(&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_param&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SCRIPT_FILENAME&lt;/span&gt;   &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;document_root&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_script_name&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_param&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;PATH_INFO&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_path_info&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_params&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;hls直播&#34;&gt;hls直播&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;live&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;srs&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hls&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;live&lt;/span&gt; {  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;新摄像头服务&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;HLS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;types&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vnd&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;apple&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mpegurl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m3u8&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;video&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp2t&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ts&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Origin&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Credentials&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Methods&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;POST&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OPTIONS&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Headers&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Cache&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;no&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cache&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;https配置支持&#34;&gt;https配置支持&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;注意这里的路径ssl为容器nginx的路径&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;使用前&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;注意在docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose中做数据卷映射&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;如&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;：&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;OCSP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Stapling&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;开启&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;。&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;OCSP是用于在线查询证书吊销情况的服务&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;使用OCSP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Stapling能将证书有效状态的信息缓存到服&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;务器&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;提高&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLS&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;握手速度&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_stapling&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_stapling_verify&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_trusted_certificate&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;resolver&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8.8.8.8&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8.8.4.4&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.1.1.1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;valid&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;resolver_timeout&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http请求重定向到https&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_protocol&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;301&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//$host$request_uri;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;反向代理设置代理头&#34;&gt;反向代理，设置代理头&lt;/h4&gt;&#xA;&lt;p&gt;使后端可以获取真实的host地址及ip&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker安装</title>
      <link>https://note.lican.site/posts/docker%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 21 Feb 2024 10:55:53 +0800</pubDate>
      <guid>https://note.lican.site/posts/docker%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;docker-安装&#34;&gt;docker 安装&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装软件包&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y yum-utils &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  device-mapper-persistent-data &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lvm2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置仓库源&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 否则安装比较缓慢&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo yum-config-manager &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --add-repo &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装社区版&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -y  中间自动同意，不需要人工干预&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y docker-ce docker-ce-cli containerd.io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 启动docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl start docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置开机启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl enable docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;设置docker数据存储位置&#34;&gt;设置docker数据存储位置&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;因为系统盘一般比较小，如果有额外的数据盘，建议将将docker数据放到数据盘&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 修改docker默认存储位置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 停止docker服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl stop docker.socket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl stop docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 移动数据到新的目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mv /var/lib/docker /data/docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 修改docker.service文件，使用-graph参数指定存储位置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph /data/docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim /usr/lib/systemd/system/docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# reload并重启docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl daemon-reload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl restart docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 确认docker信息&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;docker-compose-安装&#34;&gt;docker-compose 安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;因为应用程序有启动顺序要求，所以需要通过docker-compose进行服务编排&lt;/p&gt;</description>
    </item>
    <item>
      <title>Docker安装</title>
      <link>https://note.lican.site/tech/docker%E5%AE%89%E8%A3%85/</link>
      <pubDate>Wed, 21 Feb 2024 10:55:53 +0800</pubDate>
      <guid>https://note.lican.site/tech/docker%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;docker-安装&#34;&gt;docker 安装&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装软件包&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y yum-utils &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  device-mapper-persistent-data &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lvm2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置仓库源&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 否则安装比较缓慢&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo yum-config-manager &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    --add-repo &lt;span style=&#34;color:#ae81ff&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 安装社区版&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# -y  中间自动同意，不需要人工干预&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yum install -y docker-ce docker-ce-cli containerd.io&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 启动docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl start docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 设置开机启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl enable docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;设置docker数据存储位置&#34;&gt;设置docker数据存储位置&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;因为系统盘一般比较小，如果有额外的数据盘，建议将将docker数据放到数据盘&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 修改docker默认存储位置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 停止docker服务&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl stop docker.socket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl stop docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 移动数据到新的目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;mv /var/lib/docker /data/docker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 修改docker.service文件，使用-graph参数指定存储位置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph /data/docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vim /usr/lib/systemd/system/docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# reload并重启docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl daemon-reload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl restart docker.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 确认docker信息&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker info&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;docker-compose-安装&#34;&gt;docker-compose 安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;因为应用程序有启动顺序要求，所以需要通过docker-compose进行服务编排&lt;/p&gt;</description>
    </item>
    <item>
      <title>创建物理卷</title>
      <link>https://note.lican.site/tech/linux%E5%8D%B7%E7%BB%84%E5%88%9B%E5%BB%BA/</link>
      <pubDate>Wed, 21 Feb 2024 10:47:23 +0800</pubDate>
      <guid>https://note.lican.site/tech/linux%E5%8D%B7%E7%BB%84%E5%88%9B%E5%BB%BA/</guid>
      <description>&lt;p&gt;创建物理卷&#xA;pvcreate /dev/vdb1&#xA;创建卷组：&#xA;vgcreate &amp;lt;卷组名称&amp;gt; /dev/sdb&#xA;创建逻辑卷：&#xA;lvcreate -n &amp;lt;逻辑卷名称&amp;gt; -l 100%FREE &amp;lt;卷组名称&amp;gt;&#xA;格式化逻辑卷：&#xA;mkfs.ext4 /dev/&amp;lt;卷组名称&amp;gt;/&amp;lt;逻辑卷名称&amp;gt;&#xA;创建挂载点：&#xA;mkdir /data_new&#xA;挂载逻辑卷：&#xA;mount /dev/&amp;lt;卷组名称&amp;gt;/&amp;lt;逻辑卷名称&amp;gt; /data_new&#xA;配置自动挂载（可选）：&#xA;如果希望系统在启动时自动挂载逻辑卷，可以将其添加到 /etc/fstab 文件中。打开 /etc/fstab 文件并添加以下行：&#xA;/dev/&amp;lt;卷组名称&amp;gt;/&amp;lt;逻辑卷名称&amp;gt;   /data_new   ext4   defaults   0  0&lt;/p&gt;&#xA;&lt;p&gt;pvdisplay：查看空间情况&#xA;vgdisplay 查看vg&lt;/p&gt;</description>
    </item>
    <item>
      <title>磁盘挂载</title>
      <link>https://note.lican.site/posts/%E7%A3%81%E7%9B%98%E6%8C%82%E8%BD%BD/</link>
      <pubDate>Wed, 21 Feb 2024 10:47:23 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E7%A3%81%E7%9B%98%E6%8C%82%E8%BD%BD/</guid>
      <description>&lt;h3 id=&#34;磁盘挂载&#34;&gt;磁盘挂载&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;列出所有磁盘&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fdisk&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;磁盘分区&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fdisk&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;按下&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;获取帮助&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;因为要新建分区所以选择&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;接下来选择分区类型&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Partition&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;默认主分区&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;分区号&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;默认&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）：&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;分区的起始扇区&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;回车&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;默认&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;），&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;相当于&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;结束扇区&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;回车默认&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;输入&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;保存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;创建磁盘文件系统&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mkfs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ext4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;挂载磁盘&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;永久挂载&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;查看磁盘的UUID&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;blkid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;编辑&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fstab&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fstab&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;加入&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UUID&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ext4&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;defaults&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;取消挂载&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;umount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>磁盘挂载</title>
      <link>https://note.lican.site/tech/%E7%A3%81%E7%9B%98%E6%8C%82%E8%BD%BD/</link>
      <pubDate>Wed, 21 Feb 2024 10:47:23 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E7%A3%81%E7%9B%98%E6%8C%82%E8%BD%BD/</guid>
      <description>&lt;h3 id=&#34;磁盘挂载&#34;&gt;磁盘挂载&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;列出所有磁盘&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fdisk&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;磁盘分区&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fdisk&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;按下&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;获取帮助&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;因为要新建分区所以选择&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;接下来选择分区类型&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Partition&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;默认主分区&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;分区号&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;默认&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;）：&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;分区的起始扇区&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;回车&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;（&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;默认&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;），&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;相当于&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2048&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;结束扇区&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;回车默认&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;输入&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;保存&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;创建磁盘文件系统&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mkfs&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ext4&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;挂载磁盘&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;永久挂载&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;查看磁盘的UUID&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;blkid&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;编辑&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fstab&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vim&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fstab&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;加入&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;UUID&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ext4&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;defaults&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;取消挂载&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;umount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>关于作者</title>
      <link>https://note.lican.site/about/two/</link>
      <pubDate>Wed, 21 Feb 2024 10:41:05 +0800</pubDate>
      <guid>https://note.lican.site/about/two/</guid>
      <description>&lt;h3 id=&#34;后续更新敬请期待&#34;&gt;后续更新，敬请期待&amp;hellip;&lt;/h3&gt;</description>
    </item>
    <item>
      <title>linux清理磁盘</title>
      <link>https://note.lican.site/posts/%E6%B8%85%E7%90%86%E7%A3%81%E7%9B%98/</link>
      <pubDate>Wed, 27 Dec 2023 14:12:42 +0800</pubDate>
      <guid>https://note.lican.site/posts/%E6%B8%85%E7%90%86%E7%A3%81%E7%9B%98/</guid>
      <description>&lt;h3 id=&#34;linux清理磁盘&#34;&gt;linux清理磁盘&lt;/h3&gt;&#xA;&lt;p&gt;1.清理日志文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;rm&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;-rf&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/var/log/*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.清理临时文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;rm&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;-rf&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/tmp/*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3.清理缓存&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/proc/sys/vm/drop_caches&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/proc/sys/vm/drop_caches&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>linux清理磁盘</title>
      <link>https://note.lican.site/tech/%E6%B8%85%E7%90%86%E7%A3%81%E7%9B%98/</link>
      <pubDate>Wed, 27 Dec 2023 14:12:42 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E6%B8%85%E7%90%86%E7%A3%81%E7%9B%98/</guid>
      <description>&lt;h3 id=&#34;linux清理磁盘&#34;&gt;linux清理磁盘&lt;/h3&gt;&#xA;&lt;p&gt;1.清理日志文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;rm&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;-rf&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/var/log/*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.清理临时文件&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;sudo&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;rm&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;-rf&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/tmp/*&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;3.清理缓存&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/proc/sys/vm/drop_caches&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;/proc/sys/vm/drop_caches&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Redis安装</title>
      <link>https://note.lican.site/posts/redis%E5%AE%89%E8%A3%85/</link>
      <pubDate>Fri, 11 Aug 2023 11:06:39 +0800</pubDate>
      <guid>https://note.lican.site/posts/redis%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;redis安装&#34;&gt;redis安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;redis&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;redis:5.0.13&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 时区&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 启动附加持久化存储及密码&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;command&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;redis-server --appendonly yes --requirepass k5tWl7hhhYF^$tEL%SeE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 数据卷&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./redis/data:/data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mysql安装</title>
      <link>https://note.lican.site/posts/mysql%E5%AE%89%E8%A3%85/</link>
      <pubDate>Tue, 27 Jun 2023 11:04:55 +0800</pubDate>
      <guid>https://note.lican.site/posts/mysql%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;mysql安装&#34;&gt;mysql安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# mysql数据库&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;mysql&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;mysql:5.7.35&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;mysql&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# root 密码 &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;MYSQL_ROOT_PASSWORD=h!AlL608nGLnY3Abe0KL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 时区&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 数据及配置挂载到容器，在第一次启动容器后，复制出来，然后重建容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./mysql/lib/mysql:/var/lib/mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./mysql/conf.d:/etc/mysql/conf.d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;数据及配置挂载&#34;&gt;数据及配置挂载&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;复制容器文件到主机&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cd&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;复制数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;复制配置&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;docker&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cp&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;修改docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;lib&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;mysql配置&#34;&gt;mysql配置&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;需要修改./mysql/conf.d/my.cnf&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;因为mysql5.7以后，mysql的sql_mode默认配置为ONLY_FULL_GROUP_BY,该值表示：对于使用 GROUP BY 进行查询的SQL，不允许 SELECT 部分出现 GROUP BY 中未出现的字段&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;mysqld&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sql_mode&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;STRICT_TRANS_TABLES&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;ERROR_FOR_DIVISION_BY_ZERO&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;NO_AUTO_CREATE_USER&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;NO_ENGINE_SUBSTITUTION&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;解释&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;STRICT_TRANS_TABLES,选项针对事务性存储引擎生效，对于非事务性存储引擎无效，该选项表示开启strict sql模式&lt;/li&gt;&#xA;&lt;li&gt;ERROR_FOR_DIVISION_BY_ZERO,INSERT或者UPDATE语句中，如果数据被0除，则出现警告（非strict sql模式下）或者错误(strict sql模式下)&lt;/li&gt;&#xA;&lt;li&gt;NO_AUTO_CREATE_USER,之前版本中使用GRANT语法，如果用户不存在则会自动创建用户，该选项限制该功能&lt;/li&gt;&#xA;&lt;li&gt;NO_ENGINE_SUBSTITUTION,在使用CREATE TABLE或者ALTER TABLE语法执行存储引擎的时候，如果设定的存储引擎被禁用或者未编译，会产生错误。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;严格模式下，mysql自身会对数据进行严格的校验（格式、长度、类型等），比如一个整型字段我们写入一个字符串类型的数据，在非严格模式下MySQL不会报错，同样如果定义了char或varchar类型的字段，当写入或更新的数据超过了定义的长度也不会报错。我认为这个对于编程来说没有任何好处，虽然我们尽量在代码中做数据校验。MySQL开启了严格模式从一定程序上来讲师对我们代码的一种测试，如果我们的开发环境没有开启严格模式在开发过程中也没有遇到错误，那么在上线或代码移植的时候将有可能出现不兼容的情况，因此在开发过程做最好开启MySQL的严格模式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-six</title>
      <link>https://note.lican.site/project/share6/</link>
      <pubDate>Sun, 18 Jun 2023 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share6/</guid>
      <description>&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#draft-false&#34;&gt;draft: false&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#ai-%E7%BB%98%E7%94%BB&#34;&gt;AI 绘画&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#aigc&#34;&gt;AIGC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#ai-%E5%B7%A5%E5%85%B7&#34;&gt;AI 工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7&#34;&gt;实用工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%8F%92%E4%BB%B6&#34;&gt;插件&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E9%9B%86%E5%90%88&#34;&gt;资料集合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E4%B9%A6%E7%B1%8D%E6%95%99%E7%A8%8B&#34;&gt;书籍/教程&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E4%BB%96&#34;&gt;其他&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;ai-绘画&#34;&gt;AI 绘画&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SupaGruen/StableDiffusion-CheatSheet&#34;&gt;Stable Diffusion Cheat-Sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Stable Diffusion 开源速查表，里面拥有超过 700 种经过测试的艺术风格，可快速搜索查找各类艺术家，并支持一键复制 Prompt。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N3Qqdubhy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Stability-AI/StableStudio&#34;&gt;StableStudio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;人手一个 Midjourney，Stability AI 开源的 AI 图像生成平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N14VOFWKZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/s0md3v/roop&#34;&gt;Roop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一键实现 AI 换脸，仅需一张换脸图像，无需数据集，无需训练，自带敏感图像检测功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N63U7sEzT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://pixian.ai/&#34;&gt;pixian.ai&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;能够利用 AI 一键移除各种图像背景，并支持在线调整图片分辨率、背景颜色等等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N5hJ6bIQ5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geekyutao/Inpaint-Anything&#34;&gt;Inpaint Anything&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 AI 图像编辑工具，支持一键擦除、替换图像中的指定物品，通过提示词来自动更换背景图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCqg6oZvy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facebookresearch/segment-anything&#34;&gt;Segment Anything (SAM)&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个图像分割模型，可自动分割图片或视频中的所有物品，一键完成自动分割，并支持零样本转移到其他分割任务。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MAGpKkHqx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/soulteary/docker-prompt-generator&#34;&gt;Docker 作图咒语生成器&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持一键从图片中解析出 Prompt 描述，并能够基于描述进行扩展，以便二次图片生成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBvFcy0Mp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://plask.ai/&#34;&gt;Plask.ai&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 AI 工具，可以通过 3D 建模，直接生成模特效果图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MB4AHhvIU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/willwulfken/MidJourney-Styles-and-Keywords-Reference&#34;&gt;MidJourney-Styles-and-Keywords-Reference&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了很多实用的 Midjourney 提示词，包括图像风格样式关键词、分辨率、图像权重等，帮助你更好的完成 AI 绘画。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyT4yjBL3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Nutlope/roomGPT&#34;&gt;roomGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;只需上传一张房间照片，即可用 AI 生成对应的梦幻房间效果图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MwcUOvhgh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;aigc&#34;&gt;AIGC&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Mintplex-Labs/anything-llm&#34;&gt;AnythingLLM&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可打造成企业内部知识库的私人专属 GPT！可以将任何文档、资源或内容转换为大语言模型（LLM）知识库，使得在对话过程中可引用到里面的内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NwDwQrO9Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LouisShark/chatgpt_system_prompt&#34;&gt;chatgpt_system_prompt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有获取 GPTs 的 Prompt、Knowledge 以及如何防护的教程，另外单独对破解官方 GPTs 的 Prompt 进行分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NvSp3wtRm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/linexjlin/GPTs&#34;&gt;GPTs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了超级多被破解的 GPTs Prompt&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NvSp3wtRm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/awesome-assistants/awesome-assistants&#34;&gt;Awesome assistants&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集整理的优秀 AI 助手列表。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NvHARfYTA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HumanAIGC/AnimateAnyone&#34;&gt;Animate Anyone&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;只需一张角色图片，即可生成与角色一致且动作可控的生动视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NvAwuuUz1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SillyTavern/SillyTavern/&#34;&gt;SillyTavern&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以安装在电脑（和安卓手机）上的用户界面，让你可以与文本生成的人工智能互动，并与社区创建的角色聊天/玩角色扮演游戏。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nty2uEtjH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/promptflow&#34;&gt;Prompt flow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 开源的一套 AI 工具，可用于简化大模型应用的开发周期。打通了从项目构思、原型设计、测试、评估到生产部署和监控的全流程，让开发者可以快速构建出高质量的大语言模型应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nj6Ut6pyi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/roboflow/supervision&#34;&gt;supervision&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的计算机视觉 AI 工具箱，安装简便，可供开发者重复使用，大幅提升效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ni2mLvoQ6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shroominic/codeinterpreter-api%E2%80%8B%E2%80%8B%E2%80%8B&#34;&gt;Code Interpreter API&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;ChatGPT 代码解释器开源版，开发者可直接调用 API，在项目使用 AI 来快速处理数据分析、图像处理、股票图表展示等工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NaH2UpX58&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Shaunwei/RealChar&#34;&gt;RealChar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;帮助你快速创建、自定义各种 AI 角色。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NaobWifhP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geekan/MetaGPT&#34;&gt;MetaGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 AI 构建的实验性项目。可通过用户需求，直接生成产品分析文档、用户故事、竞品分析、数据结构、项目 API 等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N8znsi6tv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0xpayne/gpt-migrate&#34;&gt;GPT Migrate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 GPT-4 的大胆尝试，让 AI 重写整个项目代码，实现所有代码框架、编程语言的迁移。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N89Mo5O1R&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;AI Getting Started&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单的 AI 入门项目，实现了 AIGC 中常用的图像/文本模型、向量存储、身份验证、项目部署等一整套流程，可作为开发 AI 应用时的项目参考。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N6VXUbzqH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;Vercel AI SDK&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Vercel 在 GitHub 开源的一个 AI SDK，可帮你快速构建 AI 应用，包括 AI 对话、聊天界面、流式文本输出等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N61N34NeN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tameyer41/liftoff&#34;&gt;Liftoff Interviews&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让 AI 对你进行技术面试，并给出能力评估，帮助你改善不足之处，提高面试通过率。用户可根据自身能力来选择面试题难度，项目支持自部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N4Ykbek0d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facebookresearch/audiocraft&#34;&gt;Audiocraft&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Meta 开源的一个 Python 库，可直接用 AI 生成音乐&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N4CSIibMS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pengxiao-song/LaWGPT&#34;&gt;LaWGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;个基于中文法律知识的大语言模型，你可以用它来打造一个 AI 专属法律顾问。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N1J1ioVGI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ricklamers/gpt-code-ui/&#34;&gt;GPT Code UI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;简化版的 GPT 代码解释器，可利用大语言模型能力，自动生成与执行代码。另外还支持文件上传、下载，上下文理解，可选 GPT-3.5 和 GPT-4 模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N1o8NyGcw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/StanGirard/quivr&#34;&gt;Quivr&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用 AI 来打造你的第二大脑。作为一个开源的 AI 知识库解决方案，Quivr 支持将文本、图像、视频、代码片段、PPT、Excel 数据表等内容直接上传云端，并通过大语言模型，快速实现信息检索、问答。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N1nUy3Drf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/langgenius/dify&#34;&gt;Dify.AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于快速创建 AI 应用的开源平台，帮助开发者创建可持续运营的原生 AI 应用。平台提供了多种类型应用的可视化编排，开箱即用，集成了诸多便于使用的 API。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N0Gk398PL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/openai/shap-e&#34;&gt;Shap-E&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;OpenAI 开源的一个 3D 模型，可以根据文本或图像，直接生成 3D 对象。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MFDY5rR1t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gventuri/pandas-ai&#34;&gt;Pandas AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为流行的数据分析和操作工具 Pandas 添加了生成人工智能功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MF2fL4dsY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/whoiskatrin/chart-gpt&#34;&gt;Chart-GPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 GPT 实现的开源工具，可在几秒内，将文本快速转换为漂亮的图表。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MDTlbwM34&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s?__biz=MzAxOTcxNTIwNQ%3D%3D&amp;amp;mid=2457982448&amp;amp;idx=1&amp;amp;sn=aa3c06c76aa67ba2bf77ca32d8967865&amp;amp;chksm=8cb7b01abbc0390c8b8afefc8d4e982430c27a85b1f26719550da1252e33c9d13bbaf6dbd518&amp;amp;token=1761457851&amp;amp;lang=zh_CN#rd&#34;&gt;Bloop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 GPT-4 构建的代码搜索引擎，该工具采用基于 GPT-4 的 AI 智能模型，成功实现用自然语言，语义化的代码搜索方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MDn59bLYx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s?__biz=MzAxOTcxNTIwNQ%3D%3D&amp;amp;mid=2457982256&amp;amp;idx=1&amp;amp;sn=0db7f60f1d5670a0d9fc1da554f300a4&amp;amp;chksm=8cb7b0dabbc039cca80bc1eed9abe23dbc80aba1ff4c49278488aeda896b7a07674422469fa2&amp;amp;token=1761457851&amp;amp;lang=zh_CN#rd&#34;&gt;Bark&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Suno 开源的 AI 项目能够生成高度逼真的人类语音（支持多个语种）及音乐。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MDdnFumSh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/haotian-liu/LLaVA&#34;&gt;LLaVA&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个拥有类似 GPT-4 的大语言+视觉模型&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MD3zxft0Z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://cognosys.ai/&#34;&gt;Cognosys&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可在线运行 Auto-GPT，，只需在线设定好机器人名称、目标、任务，即可自动运行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCgPBlRz3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Moonvy/OpenPromptStudio&#34;&gt;OpenPromptStudio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Prompt（提示词）编辑神器，可以把 AIGC 提示词可视化，并提供在线编辑功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBsDYszbm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/IDEA-Research/Grounded-Segment-Anything&#34;&gt;Grounded-Segment-Anything&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可实现自动检测、分割、生成图像与文本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBjsaDQBT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dice2o/BingGPT&#34;&gt;BingGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Bing 桌面客户端，支持 Windows、macOS、Linux 等主流操作系统，登录 Microsoft 账号即可使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MAZWSdU8f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://spline.design/ai&#34;&gt;Spline AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过跟 AI 对话，基于文本快速实现 3D 建模。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MAQfI0Gh4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://opus.ai/&#34;&gt;OpusAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可通过文本来快速生成 3D 世界，构建一个属于自己的虚拟宇宙。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MA3SRoifJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/madawei2699/myGPTReader&#34;&gt;myGPTReader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 ChatGPT 搭建的 Slack 机器人，可以完成阅读网页、电子书、视频 (YouTube) 或文档等操作，并使用 ChatGPT 对这些内容进行总结。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MzfsJlgb9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/showlab/Tune-A-Video&#34;&gt;Tune-A-Video&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可直接通过文本直接生成视频。只需要提供文本 prompt，再利用 Stable Diffusion 的能力，即可快速生成多种不同风格的视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MzdJQ3FjI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/binary-husky/chatgpt_academic&#34;&gt;ChatGPT 学术优化&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中科院科研工作专用，特别优化了学术 Paper 润色体验，支持自定义快捷按钮，支持 markdown 表格显示，Tex 公式双显示，代码显示功能完善，新增本地 Python 工程剖析功能 / 自我剖析功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mz4qLExXR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/keijiro/AICommand&#34;&gt;AICommand&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;将 ChatGPT 功能集成到 Unity 编辑器中。通过对话的方式，可视化动态调整与生成内容，提升游戏开发效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyNbf7iEn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jtmuller5/The-HustleGPT-Challenge&#34;&gt;The-HustleGPT-Challenge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;记录了一些可通过 GPT-4 实现的项目，其中有部分项目还实现盈利了。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyCzGD7eL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rockbenben/ChatGPT-Shortcut&#34;&gt;ChatGPT Shortcut&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理并汇总了多种让生产力加倍的 ChatGPT 快捷指令，按照领域和功能分区，可对提示词（Prompt）进行标签筛选、关键词搜索和一键复制。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MxmNBjBre&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GaiZhenbiao/ChuanhuChatGPT&#34;&gt;川虎 ChatGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 ChatGPT Web UI 应用，为 ChatGPT API 提供了一个 Web 图形界面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MwseCqYHc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Chanzhaoyu/chatgpt-web&#34;&gt;ChatGPT Demo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 ChatGPT 演示网页，基于 Express 和 Vue3 搭建，开发者可以用其搭建一个类似 ChatGPT 的网站。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MvrMlFDmF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/acheong08/EdgeGPT&#34;&gt;Edge GPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软 Bing Chat 的逆向工程 API，利用该接口，开发者可自行搭建 EdgeGPT 聊天机器人，自定义智能搜索功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MsZhfkrPZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;ai-工具&#34;&gt;AI 工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jianchang512/clone-voice&#34;&gt;clone-voice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个带 Web 界面简单易用的声音克隆工具。可使用任何人类音色，将一段文字合成为使用该音色说话的声音，或者将一个声音使用该音色转换为另一个声音。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NyUSJm4Zu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/open-mmlab/Amphion&#34;&gt;Amphion&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的音频、音乐和语音生成整合工具包。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NyBlizeys&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lobehub/lobe-chat&#34;&gt;Lobe Chat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一键部署私人 GPT/LLM 的聊天机器人。支持语音合成、多模态和可扩展的插件系统，可以联网、画图、爬虫等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nxcuzzyku&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BuilderIO/gpt-crawler&#34;&gt;GPT Crawler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;能够利用爬虫，自动抓取与整合指定 URL 地址中的各种信息，并生成一个&lt;code&gt;output.json&lt;/code&gt;的数据文件。将其喂给 ChatGPT，便可快速定制你的专属 GPT，打造个人知识库或者智能助理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NttIAuO1X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/abi/screenshot-to-code&#34;&gt;screenshot-to-code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给 AI 看一眼截屏，便能直接生成代码。该项目可借助 GPT-4 Vision 的能力，直接给你将屏幕截图转换为 HTML/Tailwind CSS，并利用 DALL-E 3 的图像生成能力，生成外观相似的图像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ntsxx9wzI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KillianLucas/open-interpreter&#34;&gt;Open Interpreter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可在命令行终端，直接调用与展示各种大模型能力。实现了视频和照片编辑、系统配置更改、自动生成并运行 Demo 源码，AI 一对一聊天问答等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NhJzrafM0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mshumer/gpt-prompt-engineer&#34;&gt;GPT Prompt Engineer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该工具便会自动帮你生成各种 Prompt，自动对 Prompt 测试和评分，帮你尽可能找到最优项目提示。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N8EazkYv1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mylxsw/aidea&#34;&gt;AIdea&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的 AI 应用，集成了主流大语言模型以及绘图模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nha6mFPW3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adams549659584/go-proxy-bingai&#34;&gt;go-proxy-bing&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让你无需登录，即可直接使用 New Bing。拥有与 Bing 一致的 UI 体验，并支持 ChatGPT 提示词。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N3UK6u76u&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nadermx/backgroundremover&#34;&gt;Background Remover&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的命令行工具，，可借助 AI 能力，快速移除图像和视频背景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MFtZ5A6X1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SCUTlihaoyu/open-chat-video-editor&#34;&gt;open-chat-video-editor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款短视频生成和编辑工具，结合 ChatGPT，Stable Diffusion 和多模态搜索，实现短句转短视频、网页链接转短视频、长视频转短视频功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MFrCY6STG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/peterw/Chat-with-Github-Repo&#34;&gt;Chat-with-GitHub-Repo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个让你可以跟 GitHub 仓库进行对话的 Python 工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ME4o9jYBe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://chat.lmsys.org/&#34;&gt;Chatbot Arena&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以在线测试多种开源大语言模型的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MD7t2pMJg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://githubdaily.gitee.io/posts/2023-04-21-keepchatgpt/&#34;&gt;KeepChatGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个插件，让你的 ChatGPT 不再报错！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MD3bAu4A1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://githubdaily.gitee.io/posts/2023-04-17-minigpt-4/&#34;&gt;MiniGPT-4&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个拥有类似 GPT-4 图像对话能力的项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCrYlzRNl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://githubdaily.gitee.io/posts/2023-04-16-animated-drawings/&#34;&gt;Animated Drawings&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款很有趣的 AI 工具，可以借助人工智能技术，让绘画作品动起来。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCiok4UZG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://aws.amazon.com/cn/codewhisperer/&#34;&gt;CodeWhisperer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 AI 编程助手，可集成到 VSCode 和 IntelliJ IDEA 等代码编辑器上使用，个人版对所有开发者免费开放。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBVZY3W8f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kaixindelele/ChatPaper&#34;&gt;ChatPaper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;利用 ChatGPT 进行论文全文总结+专业翻译+润色+审稿+审稿回复&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBkWJ47D4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VideoCrafter/VideoCrafter&#34;&gt;VideoCrafter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 工具，可直接基于文本，快速生成与编辑视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MB3pDDgQk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://get.imagica.ai/&#34;&gt;Imagica&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一分钟内，快速创建属于自己的 AI 应用。特点是：&amp;ldquo;零代码、实时数据、多模态、响应快速&amp;rdquo;。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MAIcwt5uh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hahahumble/speechgpt&#34;&gt;SpeechGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以让你与 ChatGPT 进行语音聊天的网站。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MArHECDIs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mckaywrigley/ai-code-translator&#34;&gt;AI Code Translator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用 GPT 做了一款 AI 工具，可实现数十种编程语言的互相切换，支持 GPT-3.5 和 GPT-4。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MAplwsiaS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Yidadaa/ChatGPT-Next-Web&#34;&gt;ChatGPT Next Web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持一键免费部署你的私人 ChatGPT 网页应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mzn339tqR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://playground.play.ht&#34;&gt;Play.ht&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;它可以从 20 秒的音频中快速生成克隆语音，并自动转换为英语。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mzjoh03kw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/getcursor/cursor&#34;&gt;Cursor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个能利用 AI 辅助编程的代码编辑器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mz3xcdoWB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;GerevAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 ChatGPT 能力，可在几秒内找到任何聊天记录、文档或代码片段。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyVqG7ZNG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sunner/ChatALL&#34;&gt;ChatAll&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以让你同时与多个 AI 机器人实时聊天的开源工具。支持 ChatGPT、Bing Chat、bard、Alpaca、Vincuna、Claude、ChatGLM、MOSS、iFlytek Spark、ERNIE 等主流 AI 聊天机器人。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N10ktk3O4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TheExplainthis/AI-Products-All-In-One&#34;&gt;AI-Products-All-In-One&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理了一些 ChatGPT 以及 AI 相关的生产力工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyKP8c8dr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TheR1D/shell_gpt&#34;&gt;Shell GPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该工具直接在命令行中集成了 ChatGPT，通过它，可以帮助你快速编写 shell 命令、代码片段编写、Git 提交信息、文档、注释等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyJE4mTDI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Leizhenpeng/feishu-chatgpt&#34;&gt;飞书 GPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;集成了飞书 + GPT-3.5 + Dall·E + Whisper 等 API，支持语音对话、角色扮演、多话题讨论、图片创作、表格分析、文档导出 等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyDKKgfTp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mayooear/gpt4-pdf-chatbot-langchain&#34;&gt;ChatPDF&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;它可以提取 PDF 文件中的内容，并将内容交给 ChatGPT 进行分析。待解析完成之后，你便可以跟它进行一对一对话交流，就好像它是一个完全理解内容的人一样。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Myukg0Qdo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://githubdaily.gitee.io/posts/2023-03-23-github-copilot-x/&#34;&gt;GitHub Copilot X&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 AI 驱动的、跨时代代码编辑器，将为开发者带来前所未有的编程体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyyfNDa5k&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/futantan/OpenGpt&#34;&gt;OpenGpt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以让你快速尝试各种 ChatGPT 应用的开源项目，借助这个项目，你还能在几秒钟内创建属于自己的应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mxwe66eAv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;实用工具&#34;&gt;实用工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Frooodle/Stirling-PDF&#34;&gt;Stirling-PDF&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款强大的本地网页版 PDF 文件处理工具，可 Docker 部署。提供了丰富的 PDF 文件操作功能，包括拆分、合并、格式转换、内容排列、添加图片、旋转、压缩等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nz3Yy5Stj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JoeanAmier/TikTokDownloader&#34;&gt;TikTokDownloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款完全免费开源的 抖音/TikTok 采集工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ny9wDsfl6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JoeanAmier/XHS-Downloader&#34;&gt;XHS-Downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;小红书的 图文/视频 作品采集工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ny9wDsfl6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/penpot/penpot&#34;&gt;Penpot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可平替 Figma 的开源免费工具，它是首个开源的 UI 设计与原型制作平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NxPQPc0Su&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VikParuchuri/marker&#34;&gt;Marker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个能够快速且准确地将 PDF、EPUB 和 MOBI 文档转换成 Markdown 格式的工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NvG1r1n32&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/outline/outline&#34;&gt;Outline&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可平替 Notion 的开源软件，可用于部署搭建团队内部知识库。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nvyamr8nE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mangerlahn/Latest&#34;&gt;Latest&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费 Mac 小众工具，用于检查并更新电脑上已安装应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NvwAWfPux&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chaitin/safeline&#34;&gt;雷池 WAF&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用、广受好评的 Web 防火墙工具，可保护你的网站不受黑客攻击。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Nj8EPqUGc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GraphiteEditor/Graphite&#34;&gt;Graphite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 2D 矢量图形编辑器，适用于照片编辑、图像处理、图形设计、插图、数据可视化、数字绘画等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NcBhtAAm3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xitanggg/open-resume&#34;&gt;OpenResume&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个功能强大的开源简历生成器，拥有简洁美观的 UI 设计，并支持导入与解析 PDF 简历文件，实时更新简历数据，帮你快速撰写出清晰直观的个人简历。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N7cduFVGC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kochrt/qr-designer&#34;&gt;QR Designer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于二维码设计的项目，可以给二维码添加各种图案、文字、图像、更改背景颜色等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N3aW86E0t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/devhome&#34;&gt;Dev Home&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软开源了一款全新的开发工具，可在 Windows 系统中，内置了可视化控制面板。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N24UUwDwF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NaiboWang/EasySpider&#34;&gt;EasySpider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可视化爬虫软件。使用图形化界面，无代码设计和执行爬虫任务。开发者只需在网页上选择爬取内容，并根据提示框操作，即可完成爬虫设计和执行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N1K0G2vP5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/3nock/SpiderSuite&#34;&gt;Spider Suite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的多功能 GUI 网络安全爬虫工具，专为网络安全专业人员设计。目前支持 Windows 和 Linux 操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MFKEnrGkU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://paw.cloud/&#34;&gt;RapidAPI for Mac&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颜值颇高的 HTTP 调试工具，可以用它来编写 API 接口请求、完善 API 描述文档、测试服务器响应、生成客户端代码等工作，并支持多个团队成员实时协作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCUmtqa1t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dataease/dataease&#34;&gt;DataEase&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的数据可视化分析神器，操作简单易上手，开箱即用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCPoKEzsE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/upscayl/upscayl&#34;&gt;Upscayl&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 AI 图像无损放大神器，可以快速将模糊图片秒变高清图。我用了挺长一段时间了，效果很不错。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCvL3mXDE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dwarvesf/hidden&#34;&gt;Hidden Bar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一键折叠 Mac 菜单栏中的图标，长按 Command 对图标进行拖拽，自由调整图标的隐藏状态，非常方便。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MCjTmDixW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tangly1024/NotionNext&#34;&gt;NotionNext&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的静态博客系统，基于 NextJS + Notion API 实现，支持多种部署方案，无需服务器、零门槛搭建网站，为 Notion 和所有创作者设计。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBCw0lWeu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/libpag&#34;&gt;PAG 动效组件&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;腾讯开源的一款设计神器，提供了一套完善的动效设计工作流，可广泛应用于UI 动画、贴纸动画、视频编辑、模板设计等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBwSbxIfP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/whoiskatrin/sql-translator&#34;&gt;SQL Translator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以将人类自然语言转换为 SQL 语言的开源工具，反之亦然，用起来很方便。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MxgUhgdNJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/frangoteam/FUXA&#34;&gt;FUXA&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的流程可视化 Web 应用，可为机器的实时数据，构建多种不同设计风格的可视化流程图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MwiO8xyhd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/usememos/memos&#34;&gt;Memos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级开源笔记应用，支持自托管、轻量级、开箱即用、知识管理、社交讨论等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mv8Vl4yuA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qgis/QGIS&#34;&gt;QGIS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个功能丰富、用户友好、免费开源的跨平台地理信息系统，支持在 macOS、Windows、Linux 等平台运行&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MsI5nx8Cj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/localsend/localsend&#34;&gt;LocalSend&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AirDrop 替代品，可在附近设备间快速共享文件，跨终端，无需联网。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MqSXqalfr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;插件&#34;&gt;插件&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/windingwind/zotero-better-notes&#34;&gt;Better Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的笔记插件，需搭配文献管理工具 Zotero 使用。集成了论文阅读、段落注释、做笔记、元数据分析、知识输出、AI 写作等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N6XqG6Z8F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Helixform/CodeCursor&#34;&gt;CodeCursor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;你可以利用这个插件将 Cursor 快速集成到 VSCode 上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MzgfrmwMm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/intitni/CopilotForXcode&#34;&gt;CopilotForXcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该插件可为 Xcode 提供 GitHub Copilot 和 ChatGPT 支持，帮助你更快开发出 iOS/macOS/iPadOS 软件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MzehG7Grn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gencay/vscode-chatgpt&#34;&gt;vscode-chatgpt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 VSCode 插件，可将 OpenAI ChatGPT 集成到 VSCode&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MyrY7E70X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/josStorer/chatGPTBox&#34;&gt;ChatGPT Box&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以将 ChatGPT 深度集成到浏览器中的开源插件。，除了对主流网站进行适配，还内置了诸如翻译、总结、润色、情感分析、段落划分、代码解释、问询等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MybtgAlNl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yetone/openai-translator&#34;&gt;OpenAI Translator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 ChatGPT API 的划词翻译 Chrome 插件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mwmljj29i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;资料集合&#34;&gt;资料集合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kuchin/awesome-cto&#34;&gt;awesome-cto&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份专为首席技术官（CTO ）设计的资源清单，含有 CTO 角色介绍、招聘技巧、团队管理、职业发展、项目管理实践、开发流程、初创公司指南、产品开发、市场营销等等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NzmZDfDhj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pheralb/svgl&#34;&gt;SVGL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 SVG Logo 资源合集，精心收集了所有目前主流行公司以及技术框架工具的 Logo。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NxlV4rGil&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ai-collection/ai-collection&#34;&gt;AI Collection&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了诸多实用的 AI 工具，覆盖编程、金融、创作、教育、市场营销等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ME78CtvfS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;zihao_course&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 AI 技术资料。覆盖计算机视觉、图机器学习、人工智能可解释性、图像分类等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MoBYmeZhU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/easychen/stack-roadmap&#34;&gt;方糖全栈路线图&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这是一份开源技术路线图，尝试让读者在短时间内补全包括商业模式、设计、开发、运营、增长在内的「最小可行技能栈」，帮助读者完成「从螺丝钉到一人企业」的蜕变。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MmCZwtbaN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;书籍教程&#34;&gt;书籍/教程&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming&#34;&gt;GitHubCopilotAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软出了一期学习 GitHub Copilot 教程。一共有 6 节课程，共 10 个小时。旨在教授如何有效使用 GitHub Copilot 并用于辅助编程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/NxFSGaC1l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1s24y1F7eq/&#34;&gt;ChatGPT 提示工程&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该教程由吴恩达老师与 OpenAI 开发者 Iza Fulford 联手教授。教程总共分为 9 个章节，时长一个多小时，里面主要涵盖：提示词最佳实践、评论情感分类、文本总结、邮件撰写、文本翻译、快速搭建一个聊天机器人等等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MEhkq7gXG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sumn2u/learn-javascript&#34;&gt;JavaScript 新手教程&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本书主要介绍 JavaScript 基础知识、如何在 Web 浏览器上用 JavaScript 进行编程，以及 JavaScript 相关的各种重要话题、案例、练习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MBF7CadeE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://learningprompt.wiki/docs/midjourney-learning-path&#34;&gt;Midjourney 学习导航&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Midjourney 中文教程，能让不同水平的朋友快速了解和学会 Midjourney&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MB13vj0QJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tjy-gitnub/win12&#34;&gt;Windows 12 网页版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源的 Windows 12 网页体验版，提供了精美的 UI 设计、丰富流畅的动画、各种功能小组件、动态壁纸、文件系统等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ni4FlyrEl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.modular.com/mojo&#34;&gt;Mojo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一种适用于所有 AI 开发人员的新编程语言，由 LLVM、Swift、Clang 作者 Chris Lattner 发布，被誉为 AI 新时代的编程语言变革者，比 Python 高效 35000 倍。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MF7AUv9AT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://x.st/spinning-diagrams-with-css/?continueFlag=a35c5f7ece912457d1540746cbcfe91f&#34;&gt;Spinning Diagrams with CSS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;不借助 JavaScript，纯使用 CSS 来生成 LateX 数学公式动画，给数学增添点趣味。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MD92sA0XW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/twitter/the-algorithm&#34;&gt;the-algorithm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Twitter 的推荐算法在 GitHub开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.happyhues.co/palettes/11&#34;&gt;happyhues.co&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这里提供了诸多 UI 配色方案，各种颜色直接点击就能获取，很方便，可在这里获取到做网站或设计时的主题配色灵感&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MzTcxwjmo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/epicmaxco/vuestic-ui&#34;&gt;Vuestic UI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Vue.js 3.0 UI 库，拥有超过 60 个可定制组件，具备简单易用、定制灵活度高等特点。支持国际化、暗黑模式、无缝集成等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MuQ4mgOi2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kanaries/pygwalker&#34;&gt;PyGWalker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个最近在 GitHub 上较为流行的 Python 库，可用于简化 Jupyter Notebook 数据分析和数据可视化工作流程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MuGDQyIL8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/intel/intel-one-mono&#34;&gt;One Mono&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;英特尔在 GitHub 开源的字体，一种富有表现力的等宽字体系列，在构建时考虑到了清晰度、易读性和开发人员的扩展需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/N4WI7kJxS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>Nginx安装</title>
      <link>https://note.lican.site/posts/nginx%E5%AE%89%E8%A3%85/</link>
      <pubDate>Sun, 21 May 2023 11:01:45 +0800</pubDate>
      <guid>https://note.lican.site/posts/nginx%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;nginx安装&#34;&gt;nginx安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# nginx web服务器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;nginx&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx:1.21&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nginx&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 运行依赖，保证其它程序先启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 如果还有其它程序，则依次添加在这里&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;php&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 指定时区&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;TZ=Asia/Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 数据卷挂载&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 配置挂载到容器，在第一次启动容器后，复制出来，然后重建容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./nginx/nginx.conf:/etc/nginx/nginx.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# - ./nginx/conf.d:/etc/nginx/conf.d&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 证书目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# ./nginx/ssl:/ssl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# 数据卷挂载到容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./front:/front&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#ae81ff&#34;&gt;./back:/back&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 日志&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;json-file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;max-file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 容器发生意外时，能自动重启&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;nginx-配置参考&#34;&gt;nginx 配置参考&lt;/h3&gt;&#xA;&lt;h2 id=&#34;1nginxconf&#34;&gt;1、nginx.conf&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;client_max_body_size 需要配置一下，否则上传大文件会失败&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;worker_processes&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;auto&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;error_log&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;notice&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pid&lt;/span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;run&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pid&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;events&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;worker_connections&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;1024&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt;       &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;types&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;default_type&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;octet&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;stream&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log_format&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remote_addr&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;remote_user&lt;/span&gt; [&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;time_local&lt;/span&gt;] &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$request&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;body_bytes_sent&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$http_referer&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$http_user_agent&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;$http_x_forwarded_for&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;access_log&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;access&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;sendfile&lt;/span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;tcp_nopush&lt;/span&gt;     &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;keepalive_timeout&lt;/span&gt;  &lt;span style=&#34;color:#ae81ff&#34;&gt;65&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;开启gzip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;启用gzip压缩的最小文件&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;；&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;小于设置值的文件将不会被压缩&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_min_length&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;压缩级别&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_comp_level&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;进行压缩的文件类型&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_types&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;plain&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;javascript&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;javascript&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;css&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;xml&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;text&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;javascript&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;httpd&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;jpeg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gif&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;png&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;是否在http&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;header中添加Vary&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;Accept&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Encoding&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;建议开启&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gzip_vary&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;这个最好配置一下&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;否则上传大文件会失败&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;client_max_body_size&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;vhost配置&#34;&gt;vhost配置&lt;/h3&gt;&#xA;&lt;h4 id=&#34;农场示例&#34;&gt;农场，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host主机&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以多个&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;农场大数据示例&#34;&gt;农场大数据，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;农场销售页面示例&#34;&gt;农场销售页面，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host主机&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以多个&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sales&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;sales&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;农场溯源示例&#34;&gt;农场溯源，示例&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host主机&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;可以多个&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;host2&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;source&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;html&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;htm&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;php&#34;&gt;php&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;farm&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;api&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;public&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;下面三行是为了支持跨域&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Origin&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Headers&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Requested&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;With&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Methods&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;POST&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;OPTIONS&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (!&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;request_filename&lt;/span&gt;){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#a6e22e&#34;&gt;rewrite&lt;/span&gt;  ^(.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; ~ &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;(.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_pass&lt;/span&gt;   &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;9000&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_index&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;index&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_split_path_info&lt;/span&gt;  ^((&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;U&lt;/span&gt;).&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;\&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;)(&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;?&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;)&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_param&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;SCRIPT_FILENAME&lt;/span&gt;   &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;document_root&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_script_name&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_param&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;PATH_INFO&lt;/span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_path_info&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fastcgi_params&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;hls直播&#34;&gt;hls直播&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;80&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;live&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;xxx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;com&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;srs&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hls&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;live&lt;/span&gt; {  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;新摄像头服务&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;HLS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;types&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;application&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;vnd&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;apple&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;mpegurl&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m3u8&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a6e22e&#34;&gt;video&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp2t&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ts&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Origin&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Credentials&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Methods&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;POST&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OPTIONS&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Access&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Allow&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Headers&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;add_header&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Cache&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Control&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;no&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;cache&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;https配置支持&#34;&gt;https配置支持&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;listen&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;注意这里的路径ssl为容器nginx的路径&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;使用前&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;注意在docker&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;compose中做数据卷映射&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;如&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;：&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;OCSP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Stapling&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;开启&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;。&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;OCSP是用于在线查询证书吊销情况的服务&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;使用OCSP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Stapling能将证书有效状态的信息缓存到服&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;务器&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;提高&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TLS&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;握手速度&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_stapling&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_stapling_verify&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;on&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_trusted_certificate&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;nginx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/*&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;nongbotech&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cn&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fullchain&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;pem&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;resolver&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8.8.8.8&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8.8.4.4&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1.1.1.1&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;valid&lt;/span&gt;=&lt;span style=&#34;color:#ae81ff&#34;&gt;60&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;resolver_timeout&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http请求重定向到https&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl_protocol&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;) {&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;301&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;:&lt;span style=&#34;color:#75715e&#34;&gt;//$host$request_uri;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;反向代理设置代理头&#34;&gt;反向代理，设置代理头&lt;/h4&gt;&#xA;&lt;p&gt;使后端可以获取真实的host地址及ip&lt;/p&gt;</description>
    </item>
    <item>
      <title>Php安装</title>
      <link>https://note.lican.site/posts/php%E5%AE%89%E8%A3%85/</link>
      <pubDate>Thu, 16 Mar 2023 11:08:40 +0800</pubDate>
      <guid>https://note.lican.site/posts/php%E5%AE%89%E8%A3%85/</guid>
      <description>&lt;h3 id=&#34;php安装&#34;&gt;php安装&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在./docker-compose中，增加service，实例如下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;version&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;3.7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;services&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;devilbox&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;:&lt;span style=&#34;color:#ae81ff&#34;&gt;7.2&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;prod&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;container_name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;php&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;depends_on&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mysql&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;redis&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;environment&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;TZ&lt;/span&gt;=&lt;span style=&#34;color:#a6e22e&#34;&gt;Asia&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Shanghai&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;volumes&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;配置挂载到容器&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;在第一次启动容器后&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;复制出来&lt;/span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;，&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;然后重建容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;usr&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;local&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;etc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;数据卷挂载到容器&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;front&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; .&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;:&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;back&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;以root方式启动&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;R&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;driver&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;options&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10M&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;max&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;restart&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;always&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 id=&#34;php配置&#34;&gt;php配置&lt;/h1&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;修改php配置，使其以root角色启动，否则容易出现文件夹读写权限的问题&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;容器php-fpm以root方式启动&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;command&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;php&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fpm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;R&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;修改./php/etc/php-fpm.conf&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;############################################################&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;and&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Group&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;############################################################&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;www&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;user&lt;/span&gt;  = &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;配置./php/etc/php/php.ini,避免木马攻击&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;disable_functions&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;assert&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;system&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;passthru&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;shell_exec&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;exec&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;popen&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>基于hugo搭建个人博客</title>
      <link>https://note.lican.site/tech/%E5%9F%BA%E4%BA%8Ehugo%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/</link>
      <pubDate>Tue, 27 Dec 2022 15:11:18 +0800</pubDate>
      <guid>https://note.lican.site/tech/%E5%9F%BA%E4%BA%8Ehugo%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/</guid>
      <description>&lt;p&gt;背景：做一个线上的笔记本，基于md语法，结合hugo，静态编译成个人博客&lt;/p&gt;&#xA;&lt;h4 id=&#34;安装hugo&#34;&gt;安装hugo&lt;/h4&gt;&#xA;&lt;p&gt;linux系统下，使用yum安装&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;yum -y install hugo&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装完成后，可以全局使用hugo命令&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt; hugo version&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;创建个人网站&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt; hugo new site myblog&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;进入创建的myblog目录，可以看到生成的目录结构是这样的:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;├── archetypes&#xD; │   └── default.md&#xD; ├── config.toml&#xD; ├── content&#xD; ├── data&#xD; ├── layouts&#xD; ├── static&#xD; └── themes&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;选择一个主体&#34;&gt;选择一个主体&lt;/h4&gt;&#xA;&lt;p&gt;创建完网站之后，我们可以在Hugo官方的&lt;!-- raw HTML omitted --&gt;主体商店&lt;!-- raw HTML omitted --&gt;选择一个自己喜欢的主题，并下载下来使用&lt;/p&gt;&#xA;&lt;p&gt;这里以hugo-notepadiem这个主题为例，进入上一步创建的个人网站，并克隆主题到themes文件夹&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt; git clone https://github.com/cntrump/hugo-notepadium.git themes/hugo-notepadium&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;.&#xD; ├── archetypes&#xD; │   └── default.md&#xD; ├── config.toml&#xD; ├── content&#xD; ├── data&#xD; ├── layouts&#xD; ├── static&#xD; └── themes&#xD; └── hugo-notepadium&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-five</title>
      <link>https://note.lican.site/project/share5/</link>
      <pubDate>Sat, 18 Jun 2022 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share5/</guid>
      <description>&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#2022-%E5%B9%B4%E5%A4%8D%E7%9B%98&#34;&gt;2022 年复盘&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#java&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#python&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%89%8D%E7%AB%AF&#34;&gt;前端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%B7%A5%E5%85%B7&#34;&gt;工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%8F%92%E4%BB%B6&#34;&gt;插件&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E9%9B%86%E5%90%88&#34;&gt;资料集合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E4%B9%A6%E7%B1%8D%E6%95%99%E7%A8%8B&#34;&gt;书籍/教程&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&#34;&gt;机器学习/人工智能&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%BC%80%E6%BA%90%E5%AD%97%E4%BD%93&#34;&gt;开源字体&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E4%BB%96&#34;&gt;其他&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%A3%B0%E6%98%8E&#34;&gt;声明&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;java&#34;&gt;Java&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gz-yami/mall4cloud&#34;&gt;mall4cloud&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Spring Cloud 构建的开源电商系统。采用主流微服务技术实现，支持集群部署、服务注册和发现以及拥有完整的订单流程等，是一个适合二次开发的电商平台系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LC5Jk3w36&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yangzongzhuan/RuoYi&#34;&gt;RuoYi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的权限管理系统：RuoYi，基于 SpringBoot 搭建，代码易读易懂、界面简洁美观。项目可用于所有的 Web 应用程序，如网站管理后台，网站会员中心，CMS，CRM，OA，支持移动客户端访问。核心技术采用 Spring、MyBatis、Shiro，没有任何其它重度依赖，直接运行即可使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwBap7sg9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adlered/bolo-solo&#34;&gt;Bolo Solo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的个人博客系统：Bolo Solo，简单易部署，自带精致主题、数据统计表、邮件提醒、自定义图床、功能丰富的 Markdown 编辑器，专为程序员设计。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqqbdewnY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Naccl/NBlog&#34;&gt;NBlog&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个前后端分离的开源博客系统，基于 Spring Boot + Vue 技术栈开发，界面清新简洁，拥有多个丰富的博客组件，自带管理后台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgMIKs1ng&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xingxingzaixian/django-drf-online-exam&#34;&gt;algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的在线考试系统，按照不同功能，可划分为题目管理、答题系统、权限分配、评卷系统等模块。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgGPqCVrZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/4ra1n/JavaSecInterview&#34;&gt;JavaSecInterview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由国内开发者更新与维护的 Java 面试题库，主要围绕 Java 安全研究与安全开发领域，覆盖了Shiro 和 Spring 框架、Fastjson 和 Log4j2 组件等安全知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LfUI46bDG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;python&#34;&gt;Python&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pynecone-io/pynecone&#34;&gt;Pynecone&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源 Python 全栈开发框架：Pynecone，可让你在短短几分钟内，快速搭建一个 Web 应用。无需任何 Web 开发基础，即可上手使用。非常适合用来构建 AI 模型的 Demo 示例，简单又方便。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mjr16mOmN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shibing624/python-tutorial&#34;&gt;python-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源 Python 实用教程。包括了 Python 基础，Python 高级特性，面向对象编程，多线程，数据库，数据科学，Flask，爬虫开发教程。教程中包含的范例，涵盖了大多数 Python 日常脚本任务，可作为入门学习资料，亦可作为工作中编写脚本的参考实现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MaegHpKyi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/marceloprates/prettymaps&#34;&gt;PrettyMaps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的小型 Python 库，可基于 OpenStreetMap 数据，帮助开发者快速绘制简洁美观的地图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M0eOpztkq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bee-san/pyWhat&#34;&gt;pyWhat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐一款比较实用的 Python 脚本工具：pyWhat，能够快速提取信息中的 IP 地址、邮箱、信用卡、数字货币钱包地址、YouTube 视频等内容。不仅如此，pyWhat 还可对文件和目录进行扫描，通过递归搜索，快速获取核心信息，并对结果进行筛选、过滤、排序、导出等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M06z02xGH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lorey/mlscraper&#34;&gt;MLScraper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Python 爬虫脚本，可基于机器学习自动从 HTML 页面中抓取数据。在给爬虫提供输出结果的示例后，它便会自动提取规则，对页面数据进行抓取，整个过程无需指定 CSS 选择器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LE4hMxRgU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://inventwithpython.com/bigbookpython/&#34;&gt;《动手开发一个 Python 小项目》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;书中收录了 80 多个 Python 项目，每个项目都是一个独立章节，其中包括项目实例、源码、进一步开发建议等内容。书中每个项目代码量最多只有 200 多行，对新手友好，适合快速上手学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBdwuw5KU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yihong0618/Kindle_download_helper&#34;&gt;Kindle_download_helper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一年后，Kindle 将退出中国市场，此前购买的书籍，在 2024 年 6 月 30 日后，将无法进行下载。一个在 GitHub 上开源的 Python 脚本，可用于批量下载往期已购买的 Kindle 电子书，并将其保存到本地。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwLLWnfmd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NannyML/nannyml&#34;&gt;NannyML&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个适合数据科学开发者使用的 Python 库：NannyML，该项目搭配了拥有简单、易用的可视化界面，让你可以提前预估部署后的模型性能，检测数据漂移。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ltqn287bb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pyscript/pyscript&#34;&gt;PyScript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;简单添加几行代码，便能在 HTML 中内嵌 Python 代码，并在浏览器上运行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrWscwV7h&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cyrus-and/gdb-dashboard&#34;&gt;GDB dashboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的 Python 调试工具：GDB dashboard，为 Python GDB 提供了可视化界面，更清晰的显示了程序调试信息，使开发者能专注于 Python 控制流。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqGG6kbV9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TheSadError/NIVOS&#34;&gt;NIVOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Python 工具包，可用于深入扫描、破解 WIFI，适用于所有 Linux 系统，部分功能仍在持续升级中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqeoBnWyo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/greppo-io/greppo&#34;&gt;Greppo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源 Python 框架，可快速搭建一款可交互式的「地理空间」应用。该框架提供了一整套完整工具包，让你可以轻松打通数据、算法、可视化 UI 等模块，构建一款交互式应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Liw9zejPT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xingxingzaixian/django-vue3.2-online-exam&#34;&gt;algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的在线考试系统，按照不同功能，可划分为题目管理、答题系统、权限分配、评卷系统等模块。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgGPqCVrZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kedro-org/kedro&#34;&gt;Kedro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源 Python 框架，可帮助你创建可复用、可维护、模块化的数据科学代码，支持与 VSCode 和 PyCharm 搭配使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgmNn1rJ5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;前端&#34;&gt;前端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/linyiLYi/pose-monitor&#34;&gt;「PoseMon 让爷康康」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者在 GitHub 开源的一款 Android 应用：「PoseMon 让爷康康」，可借助 AI 技术，实时监测不良坐姿，并及时给出语音提示。应用不需要联网使用，所有 AI 特性均在手机本地运行，不需要将视频画面传输至外部服务器，仅需要摄像头权限用于获取姿态画面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MecX2f7DZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lixi5338619/magical_spider%E2%80%8B%E2%80%8B%E2%80%8B&#34;&gt;Magical Spider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;神奇的蜘蛛，一个几乎适用于所有 Web 端站点的采集方案&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M1jYX9t87&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/UxxHans/Rainbow-Cats-Personal-WeChat-MiniProgram&#34;&gt;云开发情侣互动小程序&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上这个情侣互动小程序可以玩一下，给生活增添点趣味。项目基于云开发能力构建，可作为情侣自己的任务和商城系统，主要特性包括做任务，攒积分，换商品等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LFiSO1hRm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/webfansplz/vuejs-challenges&#34;&gt;vuejs-challenges&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Vue.js 在线挑战平台，里面提供了多道 Vue.js 练习题，帮你一步步掌握 Vue.js 的使用。该项目意在帮助你更好地了解 Vue.js，编写出实用程序，或单纯享受挑战乐趣。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LC2YQimtz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bcakmakoglu/vue-flow&#34;&gt;Vue Flow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的 Web 流程图组件：Vue Flow，支持灵活定制、可应用于 Vue 3，具有丝滑的缩放与拖拽交互，自带 Minimap 和各类实用的图形组件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyCh8l1Pt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MakinoharaShoko/WebGAL&#34;&gt;WebGAL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这是一款界面美观、易于开发的网页端视觉小说引擎。通过该引擎，你可以快速制作属于自己的小游戏。项目配有使用教程，令你无需网页开发基础，3 分钟即可学会所有的语法。只要你有灵感，便可以立刻开始创作自己的 Galgame。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwJ1teQwW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cotes2020/jekyll-theme-chirpy&#34;&gt;Chirpy Jekyll Theme&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级、响应式的个人静态博客主题：Chirpy Jekyll Theme，自带暗黑模式、可自动生成相关帖子，支持语法高亮、数学公式、流程图等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LvylZlO9j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rocboss/paopao-ce&#34;&gt;PaoPao&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个风格类似 Twitter 的开源社区，基于 Gin、Zinc、Vue 等技术栈搭建。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LvrtLyUq7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eludadev/css-buttons&#34;&gt;CSS Buttons&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个 GitHub 项目基于 CSS，实现了 100 种不同的 Web 按钮样式，包括动画效果、外观、转场过渡效果等，脑洞颇大。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtGtxq7JV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HalseySpicy/Geeker-Admin&#34;&gt;Geeker Admin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐 GitHub 上一套开源的后台管理框架：Geeker Admin，项目基于 Vue3.2、TypeScript、Vite2、Pinia、Element-Plus 等技术栈开发而成。拥有数据大屏、统计信息可视化、表格操作 Hooks 封装、组件 UI 动态切换、i18n 国际化多语言、常见 Web 指令定制等诸多功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtjiEccit&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/horizon-ui/horizon-ui-chakra&#34;&gt;Horizon UI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的管理后台模板：Horizon UI，内置数百个组件与模块，可帮你快速开发出精美、简洁的网站。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lqddyamna&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mengshukeji/Luckysheet&#34;&gt;Luckysheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款纯前端实现的，类似 Excel 的在线表格，功能强大、配置简单、完全开源。支持大部分 Excel 功能，如冻结行列、合并单元格、筛选、排序。并内置了透视表、图表、计算函数等数据分析常用功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LoYe9w229&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hooray/fantastic-admin&#34;&gt;Fantastic-admin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开箱即用的 Vue 中后台管理系统框架，拥有多种布局与主题，动效丰富，可灵活定制，并支持多语言、多级路由缓存、自动生成导航栏等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LnZlhmZjL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jigar-sable/instagram-mern&#34;&gt;Instagram MERN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;应该是我见过最全功能复现的 Instagram 克隆版了，基本上覆盖了诸多 ins 常用的前后端功能。支持登录注册、个人信息的增删改查、帖子与私信互动，Emoji 支持等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkVCh6wku&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/H5-Dooring/dooringx&#34;&gt;dooringx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的可视化平台搭建方案：dooringx，通过提供一套数据流事件机制、弹窗等解决方案，让你可以快速定制一个可视化拖拽平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgW9f0ltw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vbenjs/vue-vben-admin&#34;&gt;Vue vben admin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的管理后台模板：Vue vben admin，基于 Vue 构建，开箱即用，拥有多款可配置主题，内置 Mock 数据方案、动态路由权限生成方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeYLR12Zj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/medusajs/medusa&#34;&gt;Medusa&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的电商建站平台，可基于各种 UI 组件与 API，用模块拼装的方式，快速搭建个人电商平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LePllw9iF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dragonir/3d/tree/master/src/containers/Olympic&#34;&gt;Olympic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者用代码实现的「冰墩墩」，基于 Three.js + React 技术栈构建，代码已在 GitHub 开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeOahodSj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/entronad/graphic&#34;&gt;Graphics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的可视化 Flutter 图表库，提供了一种基于图形语法的声明式定义，可组合出多种图表类型，并拥有丰富的属性配置和交互组件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbACshpig&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antvis/S2&#34;&gt;S2&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于数据驱动的多维分析表格，通过提供底层能力库，基础组件，业务场景组件以及自由扩展的能力。具备高性能、高扩展、可交互、开箱即用等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaJZ0yxiX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangyuan389/mall-cook&#34;&gt;Mall Cook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的可视化商城搭建平台，包括多页面可视化构建、JSON Schema 生成器（可视化搭建物料控制面板），实现组件流水线式标准接入平台等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/La8h0y4z3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;工具&#34;&gt;工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/illacloud/illa-builder&#34;&gt;ILLA Builder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上最近比较火的一款低代码开发工具：ILLA Builder。可让你在短短几分钟内，快速搭建一个企业内部应用。项目内置了一整套 UI 组件库，通过拖拽组件，即可完成应用搭建。此外，工具还接入了多种数据库和 API，让数据调用更加简单方便。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MkvLkwZ3j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shinework/photoshot&#34;&gt;Photoshot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 AI 头像生成器，用户将自己的个人头像上传后，可借助 Stable Diffusion 模型进行训练，并生成一款拥有不同风格的个人头像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mjgk2lKIG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fuergaosi233/wechat-chatgpt&#34;&gt;ChatGPT 微信&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将 ChatGPT 集成到微信的开源项目，通过发送对话，即可接受到来自 ChatGPT 的结果反馈，玩起来又更方便了，另外一款是 &lt;a href=&#34;https://github.com/AutumnWhj/ChatGPT-wechat-bot&#34;&gt;ChatGPT-wechat-bot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/misskey-dev/misskey&#34;&gt;Misskey&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的去中心化微博社交平台：Misskey，完美适配了 PC 与移动端界面。支持丰富且可定制化的 Web UI、Emoji 表情、在线笔记、云存储、多主题、统计图表、实用组件等多种功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mic1I1tiU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.stockai.com/&#34;&gt;StockAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇有意思的图片搜索引擎：StockAI。输入关键词即可搜索图片，如果图片不存在，则会通过 AI 自动生成近似图片。个人非商业可免费下载小图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mi4aDBbtZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Sanster/lama-cleaner&#34;&gt;Lama Cleaner&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的图像修复工具：Lama Cleaner，基于 SOTA AI 模型构建，功能颇为齐全。可用于快速去除图像中各种物品、人物、字体、水印等对象，并支持老照片修复、文本替换图像内容等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MftUc9pdK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mli/autocut&#34;&gt;AutoCut&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的视频剪辑工具：AutoCut，可通过字幕快速剪切视频。工具支持自动生成字幕，用户无需使用视频编辑软件，仅需编辑文本文件，即可完成剪切。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MfktHxK73&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/superseriousbusiness/gotosocial&#34;&gt;GoToSocial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的轻量级社交平台，类似 Twitter 与 Tumblr。支持关注他人、发布推文、点赞分享内容、一键拉黑等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MefjaiTnv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/stashapp/stash&#34;&gt;Stash&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的视频与图像管理 Web 应用，基于 Go 编写，支持自部署，可将视频和图像按标签进行分类，以及信息提取与统计等功能。项目支持通过 Windows、macOS、Linux、Docker 等方式进行安装部署，并拥有多种 CSS 样式可供定制。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mee86n3KX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/memphisdev/memphis-broker&#34;&gt;Memphis&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的实时数据处理平台：Memphis，与 Apache Kafka 相比，构建数据流应用程序的速度快 9 倍。该项目提供了功能丰富的命令行与可视化界面，帮助实现快速开发，极大降低成本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MebnCFcES&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/charmbracelet/vhs&#34;&gt;VHS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的命令行 GIF 生成工具，可自动生成命令行的 GIF 动画，并应用到教程、文档、工具演示、测试等场景上。该工具支持自定义配置动画字体、间距、行高、延迟、打字速度、主题、删除与指针移动效果等各种属性，功能非常齐全。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Md0I8aM1M&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tw93/Pake&#34;&gt;Pake&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可将各种网页快速打包成 Mac App 的开源工具。相比 Electron 更加小巧易用，速度更快，同时实现了通用的快捷键透传、沉浸式窗口、拖动、打包样式兼容等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MaZpcf4sH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cisagov/RedEye&#34;&gt;RedEye&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的安全可视化分析工具：RedEye，可用于协助红队可视化报告指挥和控制行动。该工具允许操作员评估和展示复杂数据，调整策略，并根据红队评估做出有效决策。支持日志解析，格式化输出数据，对行动进行标注等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MaV5in0Jr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FyroxEngine/Fyrox&#34;&gt;Fyrox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Rust 开发的 2D &amp;amp; 3D 游戏引擎。自带功能齐全的可视化操作界面、高度可扩展的渲染器、拥有创建复杂动画的内置系统、高品质双耳音响系统，支持 Windows、Linux、macOS 等主流操作系统。另外，该项目还配套了工具使用教程，帮助你更快的上手游戏开发。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MaicgjMt5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kochrt/markwhen&#34;&gt;Markwhen&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可快速创建时间线的开源工具：Markwhen。通过类似 Markdown 语法，即可快速生成直观、可视化的时间线内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MafQ8dNRK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hiroi-sora/Umi-OCR&#34;&gt;Umi-OCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能颇全的开源 OCR 软件，可离线使用，适用于 Win10 x64 平台。该软件支持截屏识别、粘贴图片，支持批量导入本地图片，将 OCR 结果输出到软件面板或本地文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ma6pD0MW6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/parvardegr/sharing&#34;&gt;Sharing&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的命令行工具。无需安装任何移动端 App，即可实现 PC 到移动端的文件共享功能，支持 iOS 和 Android。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M9vSIpEPy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thebaselab/codeapp&#34;&gt;Code App&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 iPad 代码编辑器：Code App。内置 Node.js、Python、C、C++、PHP 等多种开发环境，自带 Git、Pip、NPM 等工具，可连接并管理远程服务器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M9t8ekIcm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nuttyartist/notes&#34;&gt;Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的跨平台笔记应用，支持文件夹嵌套与标签管理、可自定义界面主题，采用QT、C++ 原生开发，响应速度快。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M7GyyFDWT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chriskiehl/Gooey&#34;&gt;Gooey&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可直接将 Python 命令行工具转为 GUI 应用的开源程序，帮助你优化用户体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M6vGU7Izk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vincentdchan/CubyText&#34;&gt;CubyText&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的知识管理软件：Cuby Text，通过区块来管理内容，让信息更有条理。软件界面清新、简洁、数据存储在本地，可更快搜索查找，并支持 Windows、Linux、macOS 等主流操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M6s9Ibq2z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/motionity&#34;&gt;Motionity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的动画编辑工具，可在浏览器直接打开使用。支持视频剪切、图像搜索过滤、文本动画库、图层蒙版等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M4KSR1axX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/streetwriters/notesnook&#34;&gt;Notesnook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的端到端加密笔记软件，可用于替代 Evernote，该项目提供笔记共享、历史回溯、个性化主题定制、富文本编辑，并支持导出成 PDF 与 Markdown 等格式的笔记文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M4BskoKun&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/surrealdb/surrealdb&#34;&gt;SurrealDB&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的云原生数据库：SurrealDB，通过简化数据库和 API 堆栈，以减少项目开发时间，提高生产力。除了处理日常数据事务，该数据库还能当做 API 后端层使用。支持 SQL 查询、GraphQL、ACID 事务、WebSocket 连接、结构化和非结构化数据、图形查询、全文索引等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M2xoVB8yQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SlyFabi/WSysMon&#34;&gt;WSysMon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Windows 任务管理工具克隆版，可用于 Linux 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M2wdR50H3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/emrecancubukcu/Terrain-Decorator&#34;&gt;TerrainDecorator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级 Unity 3D 地形绘制工具：TerrainDecorator，包含了各种坡度、高度、噪声、图像遮罩和混合模式等过滤器，可帮助开发者快速创建地形纹理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M2v2Nwh3a&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/itorr/one-last-image&#34;&gt;One Last Image&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个能将「赛璐璐风格」动画截图或插画，转换成 One Last Kiss 封面风格的在线生成器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M18cku47e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/serhack/pdf-diff&#34;&gt;pdf-diff&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的 PDF 文件对比工具：pdf-diff。可用于追踪、对比不同 PDF 版本间的差异。像 Git 一样，让你更好的了解 PDF 内容变更情况。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M0prZBkBt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/heartexlabs/label-studio&#34;&gt;Label Studio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的数据标注神器：Label Studio，可用于标注音视频、文本、图像、时间序列等数据类型，并导出为多种模型格式。此外，该工具还支持多账号登录、流线型工作模式、可配置标签格式、集成机器学习模型、嵌入数据管道等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M0fZuF2AD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/toeverything/AFFiNE&#34;&gt;AFFiNE&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上又一个开源的 Notion 替代品：AFFiNE，一款功能颇为强大的知识库管理工具。界面样式清新简洁、支持所见即所得的编辑和排版，拥有基于 Markdown 的多任务管理、多人实时协作。私密性强，可在本地自部署，目前项目仍在持续更新迭代。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M04e0h98c&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vanila-io/wireflow&#34;&gt;Wireflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的在线流程图绘制工具，支持使用 100 多种自定义图形、可进行多人协作、权限分配、实时聊天等功能、并拥有丰富的功能组件库。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LE36JxtQd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jvalen/pixel-art-react&#34;&gt;Pixel Art to CSS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的像素风图像编辑工具，基于 React 开发，通过结合 CSS 的 box-shadow 和 keyframes 特性，实现了在线绘制像素风图像的需求。在绘制完成后，你还能将其导出成 GIF、静态图像或纯代码，并粘贴到自己的网站上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LDj9ja8ou&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/findyourmagic/dber&#34;&gt;DBER&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的数据库设计工具：DBER，基于实体连接图，支持可视化数据库结构设计、拖拽生成模型引用关系、一键导出 SQL 语句等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LDgoP6gGD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/loov/lensm&#34;&gt;Lensm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Go 语言开发的汇编及源代码浏览工具，可用于项目性能优化、调试等场景。作者还特地写了一篇文章，阐述了整个项目的开发历程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LDaTSg1k6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kraanzu/termtyper&#34;&gt;Termtyper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了提升自己的打字速度，国外一位开发者在 GitHub 开源了一款命令行终端打字游戏，该游戏提供了一个简单直观的可交互界面，支持设置游戏难度、主题样式、游戏时间以及按键声音，最后还能统计打字精准度，帮你快速提升打字速度。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LD8xK6Kvp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dicebear/dicebear&#34;&gt;DiceBear&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的头像生成库，可通过给定的唯一标识，快速帮助开发者与设计师，生成一款简单可爱的用户头像。还提供了 API，供开发者接入调用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LD6YkxV46&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/navidrome/navidrome&#34;&gt;Navidrome&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的跨终端音乐播放器：Navidrome。基于 Material UI 设计风格构建，支持所有主流音乐格式，拥有播放、收藏、专辑管理等功能特性。该播放器兼容 macOS、Linux、Windows 等主流桌面系统与移动端，内置多语言模块，可随时翻译转换为其它语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LCTq6fG7a&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rocksdanister/lively&#34;&gt;Lively Wallpaper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的动态壁纸软件，可快速更换、管理桌面动态壁纸，资源占用率极小。应用定制性强，可使用动态和交互式网页、3D 应用、音频可视化工具作为壁纸。支持多种不同分辨率屏幕，内容丰富，使用简单。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LCf9Pzg0N&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jqnatividad/qsv&#34;&gt;qsv&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 CSV 数据文件处理工具，提供了数十种可用的命令行，可以帮助你更加高效的索引、分析、拆分以及验证 CSV 数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LCdYLCk3j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fontforge/fontforge&#34;&gt;FontForge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的跨平台字体编辑器：FontForge，可用于创建、编辑、转换其它多种格式的字体。编辑器提供了中文使用指南，方便新手更好入门。客户端支持 Windows、macOS、Linux 等主流桌面系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LCcpls5Yj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pocketbase/pocketbase&#34;&gt;PocketBase&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Go 编写的后端管理系统：PocketBase，集成简单，开箱即用，拥有清新简洁的后台管理面板。该系统内置实时数据库与 REST API，Google、GitHub 等多平台 OAuth 验证功能，文件可存储在本地或第三方平台，灵活性、扩展性强。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LC4yhkJbz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/massCodeIO/massCode&#34;&gt;massCode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个免费开源的跨平台代码片段管理工具，支持组织管理、Markdown 编辑、搜索同步、自动保存、JSON 存储等功能，并提供了 VS Code、Raycast、Alfred 等多个平台插件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBsQik4mH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/still-scene/t3&#34;&gt;Tooll 3&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的实时动画工具包：Tooll 3，搭配了简单直观的可视化界面，以及丰富的图形组件，让你可以快速创建实时动态图形。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBbalBhZn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WhaleFell/SMSBoom&#34;&gt;SMSBoom&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Python 压力测试工具：SMSBoom，可用于测压短信轰炸，全自动添加有效接口，支持异步协程等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LAHHNsyvQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/greycodee/wechat-backup&#34;&gt;wechat-backup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在 GitHub 开源的微信聊天记录备份工具：wechat-backup，可将聊天记录持久化备份本地硬盘，释放手机存储空间。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LzQFZFcbs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dstotijn/hetty&#34;&gt;Hetty&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于安全研究方向的 HTTP 客户端，针对各类信息安全、漏洞悬赏需求进行量身定制，功能颇为丰富，亦可满足日常接口调试需求。该工具支持 HTTP 高级搜索、日志记录，可手动创建、更改、拦截请求、自带基于项目的数据库存储功能，以及简单易用的 UI 界面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyUVX1ZPb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zuruoke/watermark-removal&#34;&gt;Watermark-Removal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的图片去水印解决方案：Watermark-Removal，可基于机器学习的图像修复方法，自动去除图片水印。经处理后的图片，与原图几乎一致。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyTKUki45&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kiddin9/OpenWrt_x86-r2s-r4s-r5s-N1&#34;&gt;supes.top&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给喜欢折腾智能家居和路由的同学，推荐一个 OpenWrt 配置工具：supes.top。可用于快速下载、定制各种设备的 OpenWrt 固件。Web 界面上提供了多种可选配置，包括设备名称和型号、常用软件包、插件、主题风格、宽带信息等，部分功能需付费才能使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LySzR06g0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/redpanda-data/console&#34;&gt;Redpanda Console&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的数据流处理工具：Redpanda Console（前身是 Kowl），搭配可视化 UI，可用于快速管理和调试 Kafka/Redpanda 工作负载。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyMGxy6BC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kevwan/tproxy&#34;&gt;tproxy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 TCP 连接分析工具：tproxy，可用于监控网络连接，分析请求内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyDscu413&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tw93/MiaoYan&#34;&gt;MiaoYan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颜值颇高的 Markdown 编辑器：MiaoYan（妙言），拥有极简的设计风格，纯本地使用、支持语法高亮、黑暗模式、源文件保存、国际化等功能。项目基于 Swift5 原生开发，用起来比较丝滑，可自定义快捷和编辑器字体。目前仅支持 macOS 操作系统。 ​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyfGMwxtX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/batnoter/batnoter&#34;&gt;BatNoter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 GitHub 的 Web 笔记应用：BatNoter，可将 GitHub 仓库作为个人笔记存储库，并支持笔记分类、搜索、Markdown 快捷编辑与预览、书签管理等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ly6dG4Pxs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/beekeeper-studio/beekeeper-studio&#34;&gt;Beekeeper Studio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的跨平台 SQL 编辑器，提供 SQL 语法高亮、自动补全、数据表内容筛选与过滤、连接 Web 数据库、存储历史查询记录等功能。该编辑器支持 SQLite、MySQL、MariaDB、Postgres 等主流数据库，并兼容 Windows、macOS、Linux 等桌面操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxWrr9vO2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fantasticit/think&#34;&gt;Think（云策文档）&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源知识管理工具：Think（云策文档），内置知识库、思维导图、文档模板、在线编辑器等多种工具。可通过独立的知识库空间，结构化地组织在线协作文档，实现知识的积累与沉淀，促进知识的复用与流通。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxQWueRTz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chaos-zhu/easynode&#34;&gt;EasyNode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简易的个人 Linux 服务器管理面板 ：EasyNode，支持多服务器管，可通过 WebSocket 实时更新服务器基本信息，如系统、公网 IP、CPU、内存、硬盘、网卡等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxPLrhKGK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sheepla/pingu&#34;&gt;Pingu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;日本一位开发者开源的命令行网络诊断工具，可用于替代 ping。在使用时，会逐渐出现一只可爱的 ASCII 企鹅图形，并高亮关键字。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxOAohmAw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coollabsio/coolify&#34;&gt;coolify&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的项目自托管方案，可用于替代 Heroku 和 Netlify。支持反向代理、免费 SSL 证书配置、多种常用数据库配置、项目一键安装与升级等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwCls8WV9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/codewithsadee/vcard-personal-portfolio&#34;&gt;vCard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的个人简历网站：vCard，支持响应式设计，能让你的个人信息、项目经验、工作经验在 Web 页面上，得到最佳的浏览体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwzAZjeYR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gitploy-io/gitploy&#34;&gt;Gitploy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可在几分钟内，快速搭建一个基于 GitHub 的项目部署系统。项目提供了更为直观的可视化界面，让你可以快速针对项目分支、SHA、标签进行部署，并拥有持续交付和持续部署能力。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwsUX0jwN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/slashy&#34;&gt;Slashy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Notion 辅助工具：Slashy，可为 Notion 自定义各种快捷命令，如开启摄像头、录音、绘图、创建注释、可复用的内容模块等，进一步提高编辑效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwrJT9XVO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lissy93/dashy&#34;&gt;dashy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个高度可定制化、自托管的服务器启动页构建工具，自带可视化编辑器、状态检测系统，并拥有各类丰富的组件及主题。借助该工具，便可为不同应用快速搭建一个服务器管理面板，并基于各种组件、图标、主题，完成自定义配置，项目内置身份验证、状态监测、搜索、备份、可视化配置、多语言支持等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lwqaur6db&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wazuh/wazuh&#34;&gt;Wazuh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款免费开源的安全平台：Wazuh，集威胁预防、漏洞检测、风险响应、安全监控于一身。不仅如此，该开源平台还提供了搜索引擎和数据可视化工具，让用户可以更为直观的浏览、配置项目的安全监控信息。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwkRJ5U8o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/THUDM/CogVideo&#34;&gt;CogVideo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可基于文本生成视频的开源项目：CogVideo，由清华大学数据挖掘研究小组开源，项目 Repo 中附有论文。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LvF1Z1to8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sekunho/emojied&#34;&gt;emojied&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以把任意网址转换为 Emoji 表情符号的开源项目，还挺有意思的。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LuvxzlSBe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Cveinnt/LetsMarkdown.com&#34;&gt;LetsMarkdown&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级的网页版 Markdown 编辑器，支持实时协作编辑、语法高亮、自动补全、主题设置等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtI2XBqyG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/infrahq/infra&#34;&gt;infra&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个让你能够快速访问项目基础设施（如 Kubernetes、数据库）的管理工具。集成了简单易用的命令行工具，支持配置同步、权限管理、日志记录、API 扩展等功能。目前项目功能仍在持续更新与迭代。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtC9FmJvV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hellodigua/code996&#34;&gt;code996&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的命令行脚本。它可以统计 Git 项目的 commit 时间分布，进而推导出你当前的工作强度&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtyCtBqRJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lapce/lapce&#34;&gt;Lapce&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的轻量级代码编辑器：Lapce，功能强大，运行丝滑，支持 Windows、Linux、macOS 等主流桌面系统。拥有类似 Vim 的模态编辑功能，支持代码自动补全、诊断，并内置了远程开发模式、命令行终端，为你提供顺畅的 &amp;ldquo;本地编码&amp;rdquo; 体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lti7AuFBl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Cveinnt/LiveTerm&#34;&gt;LiveTerm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可以让你在几分钟内，快速搭建一个拥有命令行风格的网站。项目高度可定制、简单易用。在将项目 clone 到本地之后，只需要编辑项目仓库的 config.json，即可快速完成定制。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtgWxiaTS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/theajack/cnchar&#34;&gt;cnchar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的汉字拼音笔画库：cnchar。功能非常齐全，支持汉字拼音、笔画数解析，多种模式绘制汉字，并能完成语音识别、语音合成等操作。项目支持离线使用，在多端通用，开发者还可进行自定义部署，自定义数据等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsCu3tf3D&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RudraSwat/modren&#34;&gt;Modren&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Linux 应用商店。安装成功后，便可通过该商店下载、安装各类 Linux 应用。支持 APT、Snap、Flatpaks、DEB 等多种格式的安装包，可用于 Ubuntu、Debian 衍生发行版等系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsvO25LdJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kkoomen/pointless&#34;&gt;PointLess&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的绘图画布应用：PointLess，开发者可以基于该项目，制作出一些绘画、白板、笔记等应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsoJGbInk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/onblog/BlogHelper&#34;&gt;BlogHelper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可帮助国内用户写作的托盘助手，支持将本地文章一键发布到主流博客平台，剪贴板图片一键上传至图床（新浪、GitHub、图壳、腾讯云、阿里云、又拍云、七牛云）。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrSV0ACzm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/obsei/obsei&#34;&gt;Obsei&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的低代码工具：Obsei，基于 AI 驱动，可应用于各种开发及业务场景。通过这个工具，可实现社交平台舆论监控、客户投诉预警、自动生成工单、市场调查分析、为 AI 任务生成数据集等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrRlB38IO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dromara/hertzbeat%E2%80%8B%E2%80%8B%E2%80%8B&#34;&gt;HertzBeat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐 GitHub 上一个易用友好的云监控系统：HertzBeat。无需 Agent，拥有强大自定义的监控能力。支持网站监测，PING 连通性，端口可用性，数据库，操作系统，API 监控，阈值告警，告警通知等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrN1GclDo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ballcat-projects/ballcat&#34;&gt;BallCat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个支持快速开发的后端脚手架，可快速搭建企业级后台管理系统，并提供多种便捷 starter 进行功能扩展。主要包括前后台用户分离、菜单权限、数据权限、定时任务、访问日志、操作日志、异常日志、统一异常处理、XSS 过滤、SQL 防注入、国际化等多种功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrLQCkU7F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://appmaster.io/zh&#34;&gt;AppMaster.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个无代码应用搭建平台：AppMaster.io，无需编写一行代码，即可快速创造出一个 App，大幅解放生产力。该工具可用于构建本地 Web 和移动端应用程序、自动化业务流程等场景。通过界面拖放，即可构建出可用于生产环境的 App，并支持部署到云端或导出源代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrDNmnxNg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.db-fiddle.com/&#34;&gt;DB Fiddle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在线运行、调试 SQL 数据库的开发者工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrCq8n6VD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/actualbudget/actual&#34;&gt;Actual&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的金融系统，强调「本地优先」原则，可用于管理个人财务，注重安全性和私密性。拥有交易管理、预算跟踪、财务报告生成、交易拆分、跨设备同步、数据导入与迁移、端到端加密等功能。该工具适用于 macOS、Windows、Linux、iOS、Android 等主流操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqSEUaD8y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jsonhero-io/jsonhero-web&#34;&gt;JSON Hero&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个实用的 JSON 工具：JSON Hero，提供了简洁直观的 UI 界面，让查阅和理解 JSON 数据变得更为轻松便捷。开发者借助这一工具，能以列表视图、树状视图、编辑器视图等多种方式来查看 JSON 文件，并自动识别数据内容，展示数据预览。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lquv8226L&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YoussefRaafatNasry/portfolYOU&#34;&gt;portfolYOU&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简洁、直观的个人简历主题，可使用 GitHub Pages 快速搭建简历站点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/spacedriveapp/spacedrive&#34;&gt;Spacedrive&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的跨平台文件管理器，内置了虚拟分布式文件系统（VDFS）。支持从云服务到离线硬盘，将设备的存储容量和处理能力整合到个人分布式云中，用起来既安全又直观。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lql4BmjC3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phachon/mm-wiki&#34;&gt;MM-Wiki&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的轻量级知识分享、团队协同软件，可用于快速构建企业 Wiki 和团队知识分享平台。提供方便的安装界面程序，无需任何手动操作。部署方便，使用简单。具备完善的系统权限管理，系统可以自定义角色，可为不同角色授予不同的权限。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqfzErEAu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/finos/perspective&#34;&gt;Perspective&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐 GitHub 上一个交互式、可视化数据分析工具：Perspective，可用于创建数据报告、数据面板、科研笔记及应用。为了便于开发者与数据科学家上手使用，开发团队还提供了十几个案例供参考学习，其中包含电影、超市、地铁、流媒体等多个分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqbE7EZFp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.apifox.cn/a1ghdaily&#34;&gt;Apifox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款国产 API 管理工具，该工具基于可视化界面来管理 API 文档，支持 API 自动化测试、CI 持续集成、团队协作，并且它还能根据模型，自动为项目生成 API 代码。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lq3N29znI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YaoFANGUK/video-subtitle-extractor&#34;&gt;Video-subtitle-extractor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的视频硬字幕提取工具，可自动生成 srt 文件，无需申请第三方 API，本地实现文本识别。基于深度学习的视频字幕提取框架，包含字幕区域检测、字幕内容提取。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lq2dCdEMY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rwv/lookscanned.io&#34;&gt;LookScanned&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以将 PDF 转换成扫描文件的开源工具，支持设置文件角度、噪点、模糊度等属性，整个过程无需用到打印机和扫描仪。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lpl0GySm3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OpenBB-finance/OpenBBTerminal&#34;&gt;OpenBBTerminal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在 GitHub 开源的股票和加密市场命令行工具。该项目提供了一个基于 Python 的集成环境，允许普通的交易员利用数据科学、机器学习技术来进行交易。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lph59bV0o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inventree/InvenTree&#34;&gt;InvenTree&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的库存管理系统：InvenTree，简单易用，可用于跟踪及管理各类库存零件，并支持生成各种报告，可扩展性强。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LpbAcf4Jp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/merico-dev/stream&#34;&gt;DevStream&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源 DevOps 工具链管理工具，将主流 DevOps 全生命周期的开源工具管理起来，提供了包括安装部署、最佳实践配置等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LoZNznxuU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Hopding/js-visualizer-9000-client&#34;&gt;JavaScript Visualizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 JavaScript 可视化调试工具，运行后，可动态展示任务队列、调用栈、Event Loop 等过程与结果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LogxyjrsY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chekoduadarsh/BlocklyML&#34;&gt;Blockly ML&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的编程可视化工具，可用于辅助学习 Python 和机器学习，让学习过程变得不再枯燥。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lo7AIkoE7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dromara/hertzbeat&#34;&gt;HertzBeat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的、友好易用的监控告警系统：HertzBeat，支持网站，API，PING，端口，数据库，操作系统等监控类型，并自带可视化操作界面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lo5eBEErQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/H-M-H/Weylus&#34;&gt;Weylus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个颇有意思的开源项目，可将手机、平板电脑屏幕变成电脑的图形输入板与触摸屏。让你在手机、平板电脑上进行绘图，并呈现到电脑屏幕上，相当于给电脑外接了一块触控画板。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LnYae1GmH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amplication/amplication&#34;&gt;Amplication&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的开发者工具，可用于快速构建高质量的前后端项目，提升开发效率。功能包括可视化数据模型管理，自动化批量代码生成，管理面板搭建，生成满足 CRUD 需求的 REST 和 GraphQL API 等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LnVO5mgP8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AykutSarac/jsonvisio.com&#34;&gt;JSON Visio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 JSON 数据可视化工具，可通过图表节点，完美呈现 JSON 数据间的结构关系与详情，并支持离线使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LnPUN7zmG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tldr-devops/startpack&#34;&gt;StartPack&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一些可用于早期项目启动和自托管的 devops 工具包，在项目初期时，可通过这些工具降低项目的开发与运维成本。里面包括了数据库存储、项目管理、实时通讯、内容管理、低代码搭建等技术解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmCuOCmgx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/x-hw/amazing-qr&#34;&gt;Amazing-QR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的 Python 二维码生成器，可生成普通二维码、带图片的艺术二维码（黑白与彩色）、动态二维码（黑白与彩色）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmBjLjhdn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://magma.com/index&#34;&gt;Magma Studio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于游戏、动画等艺术创作的平台。支持多人协作绘图，可通过共享画布进行实时绘画，进行头脑风暴和构思。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmA8Gt6jk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orchest/orchest&#34;&gt;Orchest&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的可视化数据管道构建工具，以更简便的方式，快速构建数据管道，无需框架和 YAML 配置，可直接通过 Python、R、Julia 来编写代码，处理数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lmxoc9Qlj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Xhofe/alist&#34;&gt;alist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个支持多存储的文件列表程序：alist，可配置与对接多个不同存储平台，部署方便，开箱即用，并能在线预览、管理多种不同格式的文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lmt4iyi5U&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mtlynch/picoshare&#34;&gt;PicoShare&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的文件共享系统，简单易用、不限制文件大小、可直接生成下载链接，支持自托管部署，数据安全性可控。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmjDOmblS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ciderapp/Cider&#34;&gt;Cider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的跨平台 Apple Music 音乐播放器，基于 Vue.js 和 Electron 构建，内置音频增强、社交分享、远程操控等功能。适用于 Windows、Linux、macOS 等主流桌面操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmisKsxbb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Quorafind/Obsidian-Memos&#34;&gt;Obsidian Memos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让你可以用一种全新的方式在 Obsidian 记录日程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LldicAWdh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lakr233/mobilePillowTalkLite&#34;&gt;bbtop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可在 iOS 端运行的 Linux 服务器监控和管理工具，可通过密码、密钥来验证服务器身份，FaceID/TouchID 保护、可配置文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ll3RIEf5B&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Bowen7/regex-vis&#34;&gt;regex-vis&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个蛮不错的正则表达式可视化工具，作者提供了一系列组件，让你可在 Web 页面上通过配置，快速生成正则表达式，以及对应的可视化图形，并且还支持运行测试，检验结果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ll2GE6ZHw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BeyondDimension/SteamTools&#34;&gt;SteamTools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源跨平台的多功能 Steam 工具箱，能让你的 Steam 用起来更加丝滑。支持 Windows、Linux、macOS 等主流桌面系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkUre2PTo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/EngineersNeedArt/SystemSix&#34;&gt;SystemSix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在树莓派上运行的电子水墨屏，可用于显示日历、天气、操作系统界面等内容，拿来折腾一些小工具应该挺好玩的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkTgabpYR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ToolJet/ToolJet&#34;&gt;ToolJet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的低代码开发框架。提供了丰富的可视化工具箱，仅需几步，即可快速构建企业级部署工具。该框架提供了 API，可对接 PostgreSQL、MongoDB、Elasticsearch  等多种外部数据源，以及常用的第三方服务，如 Stripe、Slack、Airtable。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkNmQpCTi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AmruthPillai/Reactive-Resume&#34;&gt;Reactive Resume&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为独特的简历生成器，可通过各种配置，让创建、更新、共享简历的过程变得更加简单便捷。免费开源、支持中文，可同时创建多份简历，并快速打印成 PDF。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkMbLEXmC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CodeEditApp/CodeEdit&#34;&gt;CodeEdit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 IDE 代码编辑器，主要面向 macOS 用户，致力于提供更为丝滑的编程体验，目前功能仍在持续迭代中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lkhyaeecg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qishibo/AnotherRedisDesktopManager&#34;&gt;Another Redis Desktop Manager&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款更快、更好、更稳定的 Redis 桌面（GUI）管理客户端，兼容 Windows、Mac、Linux 等主流系统。性能出众，轻松加载海量键值。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkfYKDcxA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nusu/avvvatars&#34;&gt;avvvatars&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较火的头像生成器，可快速生成一款独特头像，拥有 40 种颜色、60 种形状搭配，支持自定制，可集成到 Web 项目中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkatN62SU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ehids/ecapture&#34;&gt;ecapture&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款无需 CA 证书，就可以进行 HTTPS 通讯明文抓包的工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lk9iIE4Hu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jokergoo/spiralize&#34;&gt;Visualize Data on Spirals&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的一款开源工具包：Visualize Data on Spirals，可快速搭建呈螺旋结构的可视化数据图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lk2qwzeCE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TomWright/dasel&#34;&gt;Dasel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的命令行工具：Dasel，可通过类似链式语法的方式，对 JSON、YAML、CSV 等文件进行增删改查、转换等操作。该工具支持多种结构化数据文件，如 JSON、YAML、TOML、XML、CSV 等。 ​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiT8hhbDJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lakr233/Rayon&#34;&gt;Rayon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的服务器监控工具，支持 libssh2 主机连接、密钥认证、远程代码执行、GPU &amp;amp; RAM &amp;amp; 硬盘使用情况监控等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiNDjtisH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;Yao&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款蛮不错的开源低代码应用引擎，无需编写一行代码，即可快速创建 Web 服务和管理后台，大幅解放生产力。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiFA46ss1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nkallen/plasticity&#34;&gt;Plasticity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 3D 建模工具，主打小而美的功能，为概念艺术创作而生，可通过各类快捷操作，快速完成 3D 建模工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiD1LkfgL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gristlabs/grist-core&#34;&gt;Grist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的现代化数据表格，不同于其它普通的数据表格，该项目融合了电子表格的灵活性与数据库的稳定性，从用户体验与性能两方面，着重提高互联网用户的办公效率。该表格支持各类 Python 公式与 Excel 函数，拥有可扩展移植的数据格式、轻便的数据编辑功能，并自带可视化数据面板，开发者还可通过 API 与其它数据源对接。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgQs72lOT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Jaysmito101/TerraForge3D&#34;&gt;TerraForge3D&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专业的地形生成和建模工具，免费开源，开箱即用，附有多个视频教程供新手入门学习。这款功能包括的功能也颇为齐全，其中有基于 GPU 和 CPU 驱动的地形生成功能、无限制分辨率、可视化节点编辑器、天空和海平面生成器、风雨尘各类物理效果模拟器等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgEtjp5Y5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/laike9m/Cyberbrain&#34;&gt;Cyberbrain&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 工程师在 GitHub 开源的一款 Python 可视化调试工具：Cyberbrain（赛博大脑）。支持回溯代码变量的更改历史，查看程序执行状态（包括变量值），带代码进行循环调试等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgBIPrQji&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/metowolf/vCards&#34;&gt;vCards CN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者在 GitHub 开源的一个项目：vCards CN（中国黄页 ），可为常用联系人导入头像，优化 iOS/macOS 来电、信息界面体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgxoWqPUI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/harmonoid/harmonoid%E2%80%8B%E2%80%8B%E2%80%8B&#34;&gt;Harmonoid&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款优雅、简洁的开源音乐播放器，基于 Material Design 理念设计，拥有强大的音乐分类管理功能，支持 Windows 和 Linux 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgwdT7Jir&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lanceliao/china-holiday-calender&#34;&gt;china-holiday-calender&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一名开发者在 GitHub 上维护的假期日历：china-holiday-calender，在客户端订阅后，可以很方便的用于查看国内各种节假日、调休、补班日历。文件为 ICS 格式，可供 iOS、Google Calendar、Outlook 等客户端订阅。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lg2LkBEYD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saikou-app/saikou&#34;&gt;Saikou&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的动漫、漫画客户端：Saikou，名字取自日语 さいこう，有最高、最好之意。该客户端的主要作用，是可用于上传、下载 Anilist 的各类动漫与漫画资源，免费纯净、无广告。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LfVT97mhu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mermaid-js/mermaid&#34;&gt;Mermaid&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款受到 Markdown 语法启发而诞生的 JavaScript 图表工具，由开发者 Knut Sveidqvist 所负责维护，目前在 GitHub 已积累 42000 Star，在技术圈内受众颇广。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LfTKQ2ym2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zadam/trilium&#34;&gt;Trilium Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个免费、开源的笔记应用程序，专注于建立大型个人知识库。支持树状笔记、笔记加密、全文搜索、自托管服务器，还可生成可视化笔记的关系图和链接图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeQwqhWcs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gyroflow/gyroflow&#34;&gt;Gyroflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源应用：Gyroflow，可通过调整陀螺仪、加速度计等数据，让运动视频效果更加稳定。此外，它还支持实时预览、参数调整和各类复杂计算、GPU 处理和渲染等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeDancTlq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/midarrlabs/midarr-server&#34;&gt;Midarr&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级视频播放器：Midarr，作者称之为「下一代媒体服务器」，提供了清新简洁的界面，支持查看在线用户状态、可自托管。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeoeWpVV0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/napthedev/fireverse&#34;&gt;FireVerse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的聊天应用：FireVerse，功能齐全，允许一对一聊天、多人群聊。支持发送文字、GIF 图片、贴纸、表情符号等多种不同格式的消息内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Len3RyFBZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ObuchiYuki/DevToysMac&#34;&gt;DevToys Mac版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面提供了诸多实用的开发者工具，比如 JSON 格式化、正则表达式测试、Base64 编码与解码、PNG/JPEG 图片压缩、色盲模拟器等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lekjp1SQt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nuno-faria/tiler&#34;&gt;tiler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可以用来生成各种由图片拼接而成的马赛克图像&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcIxsqoB1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lxflxfcl/monitor&#34;&gt;Monitor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位网络安全人员在 GitHub 开源了一款漏洞监控平台，主要用于监测 GitHub、微软、CNNVD 等各大平台发布的最新技术漏洞信息，并将漏洞按不同危险等级进行划分，最后再通过企业微信和邮箱进行消息推送。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcEBV4y4R&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ansible/ansible&#34;&gt;Ansible&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的自动化运维工具，可让项目和系统变得更加容易部署和维护。通过简单的语法，快速实现从代码部署到网络配置，再到云管理。并使用 SSH 实现一切自动化流程，无需在远程系统上安装代理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcxVU1XlF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DustinBrett/daedalOS&#34;&gt;daedalOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一位工程师在 GitHub 上开源的桌面环境系统：daedalOS，可直接在浏览器运行。主要拥有开始菜单、任务栏、动态壁纸、文件系统等功能。此外，系统还内置了各类开发工具、浏览器、命令行终端、视频播放器等应用，功能颇为齐全。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LclKVF9px&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/flxzt/rnote&#34;&gt;rnote&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简洁优雅的笔记软件，带有可调整参数的纹理笔触，可用于快速创建手写笔记和绘画。支持插入各类图表、手写注释和文档。你还能将笔记导出成 SVG 或 PDF 格式的文件，与他人分享&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lcf4UiKGA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/roapi/roapi&#34;&gt;ROAPI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的开发者工具：ROAPI，无需编写一行代码，即可自动为静态数据集生成只读 API，快速完成静态数据的加载调用。静态数据集所支持的格式，包括 CSV、JSON、Excel、MySQL、Airtable、GraphQL 等格式。 ​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbP9xxZKg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/netless-io/flat&#34;&gt;Agora Flat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;声网在 GitHub 开源的一款白板工具，支持实时交互、多人音视频通讯和消息聊天、房间创建管理、课堂录制回放、课件存储、屏幕共享等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbNYtB3L3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zetane/viewer&#34;&gt;Zetane Viewe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在 GitHub 开源的机器学习模型和内部张量 3D 可视化工具。它的主要作用，是能通过理解模型架构、可视化内部数据（特征图、权重、偏差、图层输出张量），为你打开 AI 黑盒。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbMNq4Lm3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/veler/DevToys&#34;&gt;DevToys&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将其称之为「开发人员的瑞士军刀」，里面提供了诸多实用的开发者工具，比如 JSON 格式化、正则表达式测试、Base64 编码与解码、PNG/JPEG 图片压缩、色盲模拟器等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbLCnjM65&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/staltz/matrixmultiplication.xyz&#34;&gt;矩阵乘法计算器&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个「矩阵乘法计算器」，通过交互式动画，帮助你更好的了解与掌握线性代数中的矩阵乘法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lbv7ud0NF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saurabhdaware/text-to-handwriting&#34;&gt;Text to Handwriting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将普通文本转换为手写文本，包括中文字体。支持自定义字体大小、墨水颜色、页面大小、字体间距、纸张背景等属性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbtWqzTeR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/multiprocessio/dsq&#34;&gt;DSQ&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;命令行工具：DSQ，除了数据查询外，还支持多个文件合并查询，不同格式的数据源文件转化（比如将 CSV 转为 JSON）等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbsLn1orh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/multiprocessio/datastation&#34;&gt;DataStation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的开发者工具，可通过 SQL 语句，快速查询 JSON、CSV、Excel、日志记录库等文件中的数据，并创建可视化图表。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbsLn1orh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imcuttle/mometa&#34;&gt;mometa&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款面向研发的、代码可视设计编辑平台，对低代码平台不形成依赖，二次开发可以无缝进入代码开发模式；支持所见即所得的可视编辑，用于优化开发体验；可自定义物料，提升功能复用率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbrbXtF7s&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KurtBestor/Hitomi-Downloader&#34;&gt;Hitomi-Downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的下载工具，可用于快速下载各大网站的视频、漫画、电影、音乐等内容。拥有简洁易用的 UI 界面，多线程及脚本支持。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbmS3hNG2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sairson/Yasso&#34;&gt;Yasso&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的内网渗透辅助工具集，集合了大量的常用功能，拥有丰富的 SQL 渗透辅助功能，支持 RDP， SSH，Redis，MongoDB，MySQL，WinRM 等服务爆破，端口扫描，Web 指纹识别功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lb414qKNf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mattermost/focalboard&#34;&gt;Focalboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的看板工具，可用于日常工作任务和学习计划的分配、管理，并支持自托管服务器。该项目可作为 Trello、Notion 和 Asana 的开源替代品，支持 Windows、macOS、Linux 等主流操作系统。 ​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lb2PZEYuN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/papercups-io/papercups&#34;&gt;Papercups&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过该工具直接对接 Slack，简单几步操作，即可为 Web 应用打造一个在线聊天功能。此外，它还支持电子邮件回复、自定义聊天组件、Markdown 和 Emoji 文本等功能，并适配了 Flutter、React 等前端开发框架。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lb0tT3TjX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pofey/movie_robot&#34;&gt;Movie Robot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给影迷们推荐一款比较实用的工具：电影机器人，可自动从豆瓣电影的想看、在看、看过中获取影音信息，然后去 PT 站智能选种，找到最匹配的资源加入自己的影音库。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaUAz0vDt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lana-k/sqliteviz&#34;&gt;sqliteviz&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款比较实用的开源工具，可为 SQLite 数据库快速生成可视化图表，支持导入 CSV 和 JSON 文件，可离线使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaR3nEvxg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/canonical/multipass&#34;&gt;Multipass&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级的虚拟机管理工具，提供了简单易用的命令行工具，可帮助开发者快速搭建 Ubuntu 虚拟机集群，用于开发测试。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;weibo://L9jcZg8z6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apache/incubator-seatunnel&#34;&gt;SeaTunnel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单易用、超高性能的分布式数据集成平台：SeaTunnel，支持海量数据实时同步，每日可稳定高效同步数百亿数据，已在近百家公司生产上使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L9eT7r3lz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/patriksvensson/ghostly&#34;&gt;Ghostly&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 GitHub 客户端，可用于接收、组织管理 GitHub 通知，包括 issue 追踪、PR 提交、漏洞修复等，支持 Windows 10/11 系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L9cwZESyq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/myth984/wechat-report&#34;&gt;wechat-report&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内有位开发者在 GitHub 上开源了一个《微信聊天记录年度报告》网页，可用于查看 2021 年与好友的聊天数据报告，项目中附有相关工具与教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L9blUhI7P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Nitrux/maui-shell&#34;&gt;Maui Shell&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款重量级 Linux 桌面系统，被国外不少开发者称之为「开启 Linux 桌面新时代」的新系统，项目的最大亮点，在于能同时兼容 Android 与 Linux 系统，跨终端工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L99MutuhT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;插件&#34;&gt;插件&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gragland/chatgpt-chrome-extension&#34;&gt;ChatGPT Chrome Extension&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为 Chrome 用户开发的 ChatGPT 插件。安装后，在任意页面的文本框中点击右键，就会出现「Ask ChatGPT」选项。选中它，ChatGPT 就会根据当前文本框中的内容，帮你完成各种具体任务，比如写推文、修改邮件、修复 Bug 等等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MiO83rqmq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wong2/chat-gpt-google-extension&#34;&gt;「GPT for Google」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 ChatGPT 构建的 Chrome 插件：「GPT for Google」，还挺好用的。安装之后，除了会在浏览器正常展示 Google 搜索内容，还会在右侧展示 ChatGPT 反馈结果，进一步提升搜索效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MiuSHqAla&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhaohongxuan/obsidian-weread-plugin&#34;&gt;Obsidian Weread Plugin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款开源的 Obsidian 微信读书插件：Obsidian Weread Plugin。可用于同步微信读书中书籍元信息、高亮标注，划线感想、书评等，并将这些信息转换为 markdown 格式保存到 Obsidian 的文件夹中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mbap6DBB3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sukumo28/vscode-audio-preview&#34;&gt;audio-preview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你想在 VSCode 中直接播放或预览音频文件，可以安装下 audio-preview 这个扩展。该扩展支持在 VSCode 中查看各类音频文件，如 wav, aac, mp3, ogg, flac 等音频格式的声波图和音谱图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ly7rn41bM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://motion.dev/tools&#34;&gt;Motion DevTools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Chrome 开发者插件：Motion DevTools，可用于快速构建 Web 动画。支持对 CSS 编写的 Web 动画进行审视、编辑、导出等操作，非常方便。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lst3A5YHS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mintlify/vscode-docs&#34;&gt;AI Doc Writer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一名小姐姐开源了一款 VSCode 插件，可通过选中代码块，自动为代码生成注释文档。目前支持 JavaScript、TypeScript、Python 等多种语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbCbSuUYJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/omni&#34;&gt;omni&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能极其强大的 Chrome 插件，拥有 50 多项特性，为提高生产力而生，让你可以像极客一样来使用 Chrome。功能包括快速切换和搜索页面标签，搜索网页浏览记录，多个快捷键配置，并集成了 Notion、Figma、Docs 等多款工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaSerfrF4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;资料集合&#34;&gt;资料集合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eliaszon/Programmers-Overseas-Job-Interview-Handbook&#34;&gt;《程序员海外工作 / 英文面试手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;上面收录了作者长期以来收集的直投海外找工作的技巧，包括简历润色、主流招聘网站、公司风评查询、面试准备、英文表达等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mm1hyir2i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SamirPaul1/DSAlgo&#34;&gt;《可用于代码面试的数据结构与算法》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面包含了多种基于 Python3 实现的数据结构与算法，覆盖动态规划、排序算法、二叉树、矩阵、哈希表等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MlRR2uU6z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/f/awesome-chatgpt-prompts&#34;&gt;Awesome ChatGPT Prompts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面整理了一系列与 ChatGPT 互动的玩法与技巧。你可以通过这些玩法，让 ChatGPT 变成 Linux 终端、文本翻译与修正、技术面试官、故事家、脱口秀演员、写作指导顾问、心理咨询家等等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mj8a6ofH2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/milanm/DevOps-Roadmap&#34;&gt;《DevOps 2022 技术路线图》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源学习资源：《DevOps 2022 技术路线图》，带你快速了解最新的 DevOps 技术栈。里面包含了 Git、常用编程语言、Linux、网络安全、容器、IaC、CI/CD 等各种 DevOps 相关的学习资料。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MdcuKtXjC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hua1995116/awesome-ai-painting&#34;&gt;《AI 绘画资料合集》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的技术资源：《AI 绘画资料合集》，作者汇总了国内外可使用的 AI 绘画平台、技术教程、参数教程、部署教程、业界新闻等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Md8XyyKiG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/answerdev/answer&#34;&gt;Answer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个功能齐全的开源问答系统，可应用于产品技术支持、用户交流、工单管理等各种场景。完整适配了移动端，可通过 Docker 快速部署。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Md7o8993M&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CompassSecurity/Hacking_Tools_Cheat_Sheet&#34;&gt;《网络安全工具速查表》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资源：《网络安全工具速查表》，主要整理了信息搜集、网络扫描、嗅探、破解、证书配置等功能的命令行操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Md34gxgLY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gonglei007/GameDevMind&#34;&gt;《网络游戏开发技术图谱》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的学习资源：《网络游戏开发技术图谱》，网络游戏开发知识、技术与信息库，可作为游戏研发技术从业者的导航地图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M6qAigASE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TideSec/GoBypassAV&#34;&gt;GoBypassAV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理了基于 Go 的 16 种 API 免杀测试、8 种加密测试、反沙盒测试、编译混淆、加壳、资源修改等免杀技术，并搜集汇总了一些资料和工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M0oiYuS7J&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TurboWay/bigdata_analyse&#34;&gt;bigdata_analyse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 开源的数据分析项目库：bigdata_analyse，收集了多个数据分析项目集合。每个项目都会包含一个友好的说明文档，用来阐述和展示整个开发流程。同时也会提供相关的数据集，以供下载练习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LD9IOF5uD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/upupming/new-grad-positions&#34;&gt;new-grad-positions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2023 届互联网公司校招、实习的最新官方招聘信息整理，帮助在校生消除信息不对称带来的劣势。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LChvXi8F7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facundoolano/software-papers&#34;&gt;《Papers for Software Engineers》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资源，里面收录了一系列计算机大佬撰写的软件工程论文。内容覆盖计算机与智能、集成电路、共享数据库、密码学、软件工程本质、Web 搜索引擎解析、分布式存储系统、智能合约与去中心化平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LC6Unlwtz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/madebygps/self-taught-guide-to-cloud-computing&#34;&gt;「云计算自学指南」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该指南主要拆分为六大模块，分别对应 Linux 及计算机网络基础、脚本及代码工具、云计算、DevOps 实践、学习资源、附加资源（技术相关话题）等内容。在每个不同时间段，帮你规划不同的学习路线，让你可以更为清晰的掌握云计算基础知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBXtUCWm8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rachitiitr/modern-cpp-tricks&#34;&gt;Modern CPP Tricks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软前工程师 Rachit Jain 在 GitHub 上开源的一份 C++ 知识库：Modern CPP Tricks，里面整理了一些 C++ 相关的开发技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBWiPgSgy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/robmarkcole/satellite-image-deep-learning&#34;&gt;Satellite image deep learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要整理了深度学习技术在卫星图像领域中的应用知识。仓库中包含了图像分类与分割、在线分析工具、图像标注、图形可视化、地理信息系统等开源软件，相关技术教程、博客文章等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBvcq7liC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/girliemac/a-picture-is-worth-a-1000-words&#34;&gt;《一图胜千言》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由微软工程师 Tomomi 手绘并整理发布。该仓库包含了数据结构与算法、Web 开发、机器学习、Git 开发等编程领域的涂鸦作品，其中有部分被应用到了微软的开源教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyB64suZx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Threekiii/Awesome-Redteam&#34;&gt;《红队知识仓库》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收录了一系列网络安全相关的技术文档、开发工具、公开知识库等内容，覆盖漏洞研究、信息收集、内网渗透等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ly8CqBp48&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/n3r4zzurr0/svg-spinners&#34;&gt;SVG Spinners&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个 GitHub 项目收集了 40 多种不同风格的 SVG 加载动画，可用于网站或 App 项目开发。相对于常规的 GIF 格式图像来说，SVG 的可编辑性、可压缩性更强。因此在最近几年，不少网站都开始广泛采用 SVG 来做页面动画。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxITe3aSn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ahmedtariq01/Cloud-DevOps-Learning-Resources&#34;&gt;Cloud-DevOps-Learning-Resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该仓库里面收录了一系列云原生开发学习资料（如 Docker、K8s、Azure），包括技术书籍、速查表、测验题、面试笔记等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwKATsm3B&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/khangich/machine-learning-interview&#34;&gt;Machine Learning Interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的机器学习面试题库：Machine Learning Interview，收录了世界各大互联网公司的机器学习面试题。仓库中包括概率与统计、大数据、AB 测试、机器学习与深度学习领域的速查表、面试准备、学习指南、项目用例、面试经验等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lwm2Km2tp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://apitracker.io/&#34;&gt;API Tracker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个网站整理了非常多的 API 开放接口，包括一些常见的 API 工具、文章、视频等学习教程。覆盖社交媒体、金融、新闻、游戏、人工智能、音视频等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Luumv8rvc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rzashakeri/beautify-github-profile&#34;&gt;Beautify GitHub Profile&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个 GitHub 仓库收录了多种工具及指南，让你的 GitHub 个人页面看起来更为丰富与美观。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ltx33sjk4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vandadnp/flutter-tips-and-trick&#34;&gt;flutter-tips-and-tricks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集整理了 Flutter 和 Dart 开发的小技巧资料集合，每个小技巧除了提供代码还贴心的制作图片讲解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsHMQ0Buq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;cs-self-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源 CS 自学指南，项目包含了诸多国外高质量 CS 课程，覆盖数据结构与算法、计算机系统安全、数据科学、人工智能、机器学习等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsGBLwrnR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kallaway/100-days-of-code&#34;&gt;「100 天编码挑战计划&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一名程序员在 GitHub 上发起了「100 天编码挑战计划」，规定所有参与的开发者，每天至少写 1 小时的代码，并提交到仓库中。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsFqHABiq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ml-tooling/best-of-ml-python&#34;&gt;Best-of Machine Learning with Python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收录了一些比较实用的机器学习与 Python 开源项目与工具。收录项目共计 900 多个，包括数据可视化、自然语言处理、文本与图像数据、Web 爬虫等分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqRhEtejl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/downdemo/Cpp-Concurrency-in-Action-2ed&#34;&gt;《C++ Concurrency in Action 2ed 笔记》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;C++11/14/17/20 多线程，掌握操作系统原理，解锁并发编程技术。原书籍前五章介绍了线程支持库的基本用法，后六章从实践角度介绍了并发编程的设计思想。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqmE2CXDT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/slowmist/Blockchain-dark-forest-selfguard-handbook&#34;&gt;《区块链黑暗森林自救手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《区块链黑暗森林自救手册》，主要介绍了关于区块链安全相关的攻击手段、技术防控知识等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lq4Y5m4Pi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dair-ai/ML-Notebooks&#34;&gt;《机器学习笔记》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理了一系列机器学习任务、应用等代码示例。包括计算机图形、构建一个简单的神经网络、PyTorch 介绍、逻辑回归、文本分类、GNN 介绍等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LpXTJxxSl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jondot/rust-how-do-i-start&#34;&gt;《Rust 新手入门指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资源：《Rust 新手入门指南》（Rust ������. How do I start?），收录了可供 Rust 新手入门学习的教程、实战项目、开源库、开发者工具等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LpiEzBwJK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geekan/HowToLiveLonger&#34;&gt;《程序员延寿指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内有个开发者撰写了一份《程序员延寿指南》，并开源到了 GitHub，希望通过各种数据与研究分析，进一步探索合理且健康的养生之道。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lpap8kkwd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GorvGoyl/Clone-Wars&#34;&gt;Clone Wars&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个 GitHub 项目收录了 100 多个知名网站的克隆项目，包含教程、源码、Demo 演示、技术栈等内容，非常适合开发者研究学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lo3FbheLO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhongqiangwu960812/AI-RecommenderSystem&#34;&gt;AI-RecommenderSystem&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源资料库沉淀了作者自学推荐系统的学习经验。其中包括经典算法模型和技术，各类工具、数据集的参考学习，并尝试用浅显易懂的语言，把每个模型或者算法解释清楚。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LnOJJxJzj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LandGrey/SpringBootVulExploit&#34;&gt;SpringBootVulExploit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Spring Boot 相关漏洞学习资料，利用方法和技巧合集，黑盒安全评估 check list。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmrTf0SNM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MHProDev/MHDDoS&#34;&gt;MHDDoS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个具有 51 种攻击方法的 Python3 DDoS 开源脚本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmqIb3WK5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://hackingcpp.com/cpp/cheat_sheets.html&#34;&gt;Hacking C++&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份颇为全面的 C++ 速查表与信息图表。覆盖了算法、随机分布、序列、Lambda 表达式、设计指南等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lmpx7t0FO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Z4nzu/hackingtool&#34;&gt;Hacking Tool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者收录了多款与计算机安全相关的开发者工具，包括网络攻击、DDOS 与 XSS 攻击工具、信息收集、SQL 注入、网络爬虫、哈希破解等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmhjHxoOu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hugo2046/Quantitative-analysis&#34;&gt;Quantitative-analysis&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上关于量化分析的资料参考：Quantitative-analysis，利用 Python 对国内各大券商的金工研报进行复现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LlfEkpk3b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PeiQi0/PeiQi-WIKI-Book&#34;&gt;PeiQi-WIKI-Book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个面向网络安全从业者的知识文库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkiJejY3Z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fighting41love/zhvoice&#34;&gt;Chinese voice corpus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源中文语音语料：Chinese voice corpus，让中文语音更加清晰自然。里面包含了 8 个开源数据集，3200 个说话人，900 小时语音，1300 万字。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkbR1ro7B&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/smaranjitghose/awesome-portfolio-websites&#34;&gt;Awesome Portfolio Websites&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的一个开源网站：Awesome Portfolio Websites，致力于帮助研究人员、开发者、分析师建立一个可用于展示多维度工作信息的网站。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LjeJLxVQn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zkqiang/hangzhou-house-guide&#34;&gt;《2022 年杭州购房指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位在杭州工作的程序员，该指南是根据他个人多年购房选房经历，总结而成的一篇买房攻略，涉及新房摇号和二手房选购，包含大量杭州城市规划资料。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiVSLCDYb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vvmdx/Sec-Interview-4-2023&#34;&gt;Sec-Interview-4-2023&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资料库：Sec-Interview-4-2023，来自一位 2023 届毕业生收集的各大互联网安全面试题、面试经验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgnYs5V0I&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Anduin2017/HowToCook&#34;&gt;《程序员做饭指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;详细介绍了地三鲜、回锅肉、鱼香肉丝等十几道菜品的具体料理方法。作者也希望通过开源的方式，让更多人参与到一本菜谱的改进与维护中来。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgkrguvFT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Elfocrash/.NET-Backend-Developer-Roadmap&#34;&gt;.NET-Backend-Developer-Roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2022 年 .NET 后端开发者路线图，主要面向微服务架构的后端技术人员，完整高清大图可见 GitHub Repo。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lg1Agc8l6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AMAI-GmbH/AI-Expert-Roadmap&#34;&gt;AI-Expert-Roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;人工智能技术 2022 年学习路线，完整高清大图在 GitHub Repo 可见。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeZWU1rDV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lmmentel/awesome-time-series&#34;&gt;Time series resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;时间序列相关的学习资源整理。覆盖多个常用开发者工具、可视化开源库、技术论文、开源教程等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeXAOC2td&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://t.cn/A6L1qEWP&#34;&gt;AtHomeWithAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Deepmind 发布的人工智能学习资源，包含线性代数、算法、机器学习、深度学习、自然语言处理等各类视频、PPT、指南、教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeRHt42rE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/resumejob/Leetcode-retag&#34;&gt;Leetcode-retag&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;重新分类 Leetcode 高频题，按照面试频率降序排列题目，增加难度分类，适合开发者从简单开始学习算法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LeMAS52th&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vastutsav/command-line-quick-reference&#34;&gt;《命令行速览》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面总结了 30 多条命令行的基础知识，可帮你快速了解一些常用的命令行用法与开发技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcHmpq0qt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doocs/leetcode&#34;&gt;LeetCode 题解仓库&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的 LeetCode 题解仓库，里面涵盖了多种编程语言的 LeetCode 代码实现，其中包括排序算法、链表、二叉树、栈和队列、动态规划等算法知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lcvbrol44&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NakanoMikuOrg/arch-guide&#34;&gt;《Arch Linux 简明指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;提供了从 Arch Linux 安装、显卡驱动、日常软件配置、多媒体制作、编程等所有内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaTpuzDZg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NiuTrans/Classical-Modern&#34;&gt;《文言文（古文）- 现代文平行语料》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基本涵盖了大部分经典古籍著作，原始爬取的数据是篇章级对齐，经过脚本分句以及人工校对，形成共计约 96 万句对，source 下为文言文，target 下为现代文，文件内容按行对齐。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaG3tvogM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shliang0603/Awesome-DeepLearning-500FAQ&#34;&gt;《深度学习 500 问》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者整理的一份 AI 学习资源，内容以问答形式，对常用的概率知识、线性代数、机器学习、深度学习、计算机视觉等热点问题进行阐述，以帮助有需要的读者。全书分为 18 个章节，50 余万字。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/La5UToCva&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;书籍教程&#34;&gt;书籍/教程&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/google/comprehensive-rust&#34;&gt;《Comprehensive Rust》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 开放的一个 Rust 技术教程，教程为期四天，涵盖了 Rust 基本语法到高级主题，如泛型和错误处理、Android 开发等相关内容。通过这一教程，你将全面学习 Rust 基础语法、编写 Rust 应用、掌握 Rust 常用开发技巧等技术。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MlIqyelZv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HappyCerberus/book-cpp-algorithms&#34;&gt;《标准 C++ 算法指南完整版》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资源：《标准 C++ 算法指南完整版》，覆盖了该书所有相关的 LaTeX 与代码示例讲解，帮助大家更好的学习与总结。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mlg94gQoL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/krahets/hello-algo&#34;&gt;《Hello，算法 》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本自带动画图解、能运行、可提问的数据结构与算法入门书。带你了解刷题所需的数据结构，介绍算法的设计思想、优势劣势、实现方法，并拥有可一键运行的配套代码，让你更好的深入学习算法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MjTiAlqr0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Visualize-ML/Book4_Power-of-Matrix&#34;&gt;《矩阵力量》鸢尾花书：从加减乘除到机器学习&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要面向开发者，讲解数学的基础知识。按内容划分为基础、坐标系、函数、解析几何、微积分、概率统计、线性代数等 7 大板块。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MhUK8xWzx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xuxiaodong/usingcli-book&#34;&gt;《像黑客一样使用命令行》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书将从实际的例子出发，教你从无到有，一步一步学习命令行的使用。除了文字版本之外，亦有配套视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MgotbfdaD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sudoskys/StableDiffusionBook&#34;&gt;《Stable Diffusion Book》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《Stable Diffusion Book》，关于 AI 绘画的全面中文 Wiki、入门教程、开源文档。覆盖 AI 绘画相关的术语解释、安装配置、配置与调试、模型训练等相关内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/McZx4g2Ji&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/openmlsys/openmlsys-zh&#34;&gt;《机器学习系统：设计和实现》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术书籍：《机器学习系统：设计和实现》，主要讲解现代机器学习系统的设计原理和实现经验。该书覆盖编程接口、计算图基本构成、编译器前后端、模型部署、深度学习推荐系统、机器人系统等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mb8PGvAyK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kanition/pbrtbook&#34;&gt;《基于物理的渲染：从理论到实现》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源教程：《基于物理的渲染：从理论到实现》中文翻译版。主要讲解几何与变换、成像过程、光的散射、光传输算法等计算机图形学内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mb2Wovblc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Moataz-Elmesmary/Data-Science-Roadmap&#34;&gt;《数据科学路线图》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源学习资料：《数据科学路线图》，作者整理了一些开放性学习教程，并按照初中高级制定了不同学习路线。里面主要包含统计与概率、Python 基础及工具应用、数据清理与可视化、机器学习与爬虫、深度学习与模型等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Mb0YC6Ahe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yzy1996/English-Writing&#34;&gt;《Enhance Your English Writing》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的学习资料：《Enhance Your English Writing》，作者是香港城市大学的一名博士生。主要收录他在阅读论文的过程中，发现的一些好的英语用法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ma8noyjnF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AmazingAng/WTF-Solidity&#34;&gt;《Solidity 极简入门》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;每周更新 1-3 讲，主要讲解 Web3 基础开发技巧、合约安全、数字签名、时间锁，常见开发工具使用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ma4QdwllJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GuoYaxiang/craftinginterpreters_zh&#34;&gt;《手撸解释器》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在本书中，作者将悉心拆解解释器相关的概念，在每一章节中逐步进行讲解和实现，并且保证每个章节结束之后都有一个可以运行的解释器版本。该书由一门小型的自创语言 Lox 开始，分别使用 Java 和 C 实现了两种类型的解释器，jlox 和 clox。内容上不会有太过深入的理论，对于普通编程爱好者也可以很容易地上手学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M9uHEx8Tl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://srdas.github.io/Papers/DSA_Book.pdf&#34;&gt;《Data Science: Theories, Models, Algorithms, and Analytics》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解数据科学的基本知识，并覆盖相关常用算法、模型、R 语言、数据分析、金融应用、神经网络等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M7Fnv1EVp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PKU-TANGENT/nlp-tutorial&#34;&gt;《NLP 新手入门指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的学习资源：《NLP 新手入门指南》，项目作者为北京大学 TANGENT 实验室成员。该指南主要提供了 NLP 学习入门引导、常见任务的开发实现、各大技术教程与文献的相关推荐等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M6tkMkriP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guangzhengli/k8s-tutorials&#34;&gt;《Kubernetes 中文教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《Kubernetes 中文教程》，内容偏向于实战进阶。通过带你渐进式修改代码，从最基础的 container 容器的定义开始，经过 pod, deployment, servcie 等资源来打包部署一套完整服务。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M4Msfkw2E&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/openintrostat/ims&#34;&gt;现代统计学概论》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开放性技术书籍：《现代统计学概论》（Introduction to Modern Statistics），主要讲解数据分析理念与应用、回归建模、统计推断、推理建模等相关知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M2nYrA2He&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Boshen/javascript-compiler-in-rust&#34;&gt;《用 Rust 编写一个 JavaScript 编译器》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;JavaScript、Rust 和编译器都很难学，因此作者想将这三者结合起来，挑战自己，用 Rust 编写一个 JavaScript 编译器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M1uAwaDtr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nnethercote/perf-book&#34;&gt;《Rust 性能优化手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书面向于 Rust 中级和高级开发者用户，结合理论与实践，讲解多种可以提高 Rust 程序性能的技术和技巧（速度和内存使用）。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M1la120wV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kenjihiranabe/The-Art-of-Linear-Algebra&#34;&gt;《线性代数的艺术》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《线性代数的艺术》，主要针对 MIT 教授 Gilbert Strang 的《Linear Algebra for Everyone》教程提供了图形注释，让知识更易于吸收理解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M16CUBr8Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/codersguild/System-Design&#34;&gt;《系统设计》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的技术学习资源：《系统设计》，里面主要整理了系统设计相关的基础知识、面试技巧、开发指南、最佳实践，以及各个互联网大厂的踩坑经验总结等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M05nUrVPg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/woai3c/introduction-to-front-end-engineering&#34;&gt;《带你入门前端工程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;分享一本开源的前端技术书籍：《带你入门前端工程》，主要记录作者在近两年来，在前端工程师实践经验和学习心得方面的总结。 书中大部分内容以理论知识 + 代码示例 + 图片进行讲解，部分章节会提供实践教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LFgyIa9dz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shervinea/mit-15-003-data-science-tools&#34;&gt;《数据科学工具学习指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;麻省理工大学教授在 GitHub 开源的：《数据科学工具学习指南》。主要讲解如何使用 SQL 检索数据，R 语言操作数据，Python 数据可视化，Git 代码版本控制，以及常见的 Bash 脚本使用技巧等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LEcxdvgtN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WenzheLiu-Speech/The-guidebook-of-speech-enhancement%E2%80%8B&#34;&gt;《语音增强初探》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《语音增强初探》，主要讲解语音增强技术相关的技术解析，以及模型应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LE5sQFN7t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/remzi-arpacidusseau/ostep-translations&#34;&gt;《操作系统导论》中文版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书共有 50 个章节，内容深入浅出，围绕操作系统的虚拟化、并发、持久性展开讲解，涉及进程与进程、锁、CPU 调度、文件系统实现、分布式系统等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LE1xicqHI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hackclub/some-assembly-required&#34;&gt;《Some Assembly Required》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一本开源的汇编入门指南：《Some Assembly Required》，主要包括 CPU 工作原理、指令映射、汇编语言与寄存器入门知识介绍等内容。每个章节都比较简短，且配有作者绘制的原理图与代码示例。让技术更易于理解，加深学习印象。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LDlvqFy2g&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Celthi/effective-debugging-zh&#34;&gt;《Effective Debugging》中文翻译版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《Effective Debugging》中文翻译版，主要讲述如何更有效率地调试大型程序（以 C/C++ 为例）的方法和技能。书中例子不仅丰富，而且都是从实际的工作经验提取，观点和方法有效且具有可行性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LDhYfguVU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/XPixelGroup/BasicSR-docs&#34;&gt;《BasicSR 中文解读文档》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;BasicSR 是一个基于 PyTorch 的开源图像视频复原工具箱，提供了诸如超分辨率、去噪、去模糊、去 JPEG 压缩噪声等功能。该文档提供了关于图像、视频超分复原增强等相关技术知识的解读，以及开源库的使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LCPGL2v8u&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cstack/db_tutorial&#34;&gt;《动手构建一个简单数据库》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将基于 C 语言，手把手构建一个类 SQLite 数据库，让你进一步了解数据库的工作原&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBu1lhaYT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sunface/rust-by-practice&#34;&gt;《Rust 语言实战》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书将通过有挑战性的示例、练习题、实践项目来提升 Rust 水平，建立从入门学习到上手实战的直通桥梁。书中通过大量的实战练习，帮助大家更好的学习和上手使用 Rust 语言。书中的练习题非常易于使用：你所需的就是在线完成练习，并让它通过编译。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LBrFem2gX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.probabilistic-numerics.org/assets/ProbabilisticNumerics.pdf?continueFlag=1bafdcd5c034def869fecb4f3bdaed70&#34;&gt;《概率数值》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费开放的技术书籍：《概率数值》（Probabilistic Numerics），共 400 多页，由 3 位来自各大高校与行业专家作者，历经 7 年写成。该书主要讲解数学基础、线性代数、积分、概率数值、机器学习模型优化、常微方程解法等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LB9Zj88Qd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/handsondataviz/book&#34;&gt;《动手学习数据可视化》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《动手学习数据可视化》，主要讲解 Excel 数据处理的常用技巧。数据清理、搜索、可视化，数据图表绘制，第三方开源库的开发指南等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LB45Yt7Mj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/learnbyexample/practice_python_projects&#34;&gt;《Python 项目实战》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将通过 5 个 Python 实战项目，带你一步步了解 Python 的实际应用。其中包含用 Python 计算器优化命令行工具体验、抓取并分析 Reddit 评论数据、扫描 Markdown 和纯文本拼写错误、构建多选择题 GUI 界面、借助 AI 打造一款小游戏。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LATupt21d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LearningOS/rust-based-os-comp2022&#34;&gt;《2022 年开源操作系统训练营》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;教程共分为八章，主要展示如何从零开始，用 Rust 语言写一个基于 RISC-V 架构的 类 Unix 内核 。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LAK3UD6yJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qiangmzsx/Software-Engineering-at-Google&#34;&gt;《谷歌的软件工程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资源：《谷歌的软件工程》中文版（Software Engineering at Google），共 25 章，主要讲解 Google 技术团队在「软件工程」领域的实践。该指南覆盖了团队管理、效率测量、代码风格规范、项目测试、版本控制、静态分析、依赖管理、持续交付与集成等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LzPuW8TUC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/7kms/react-illustration-series&#34;&gt;《图解 React 源码系列》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将尝试通过大量配图，把 react 原理表述清楚。教程主要包含 React 基础概念、运行核心、数据管理、交互、高频算法等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lyif5kWmX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OpenMindClub/awesome-scholarly-productivity&#34;&gt;《英语论文写作指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由阳志平团队整理发布。里面包含科技论文制图、数学公式排版、文献分析工具介绍、论文发表技巧、写作工具等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxY0T5643&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gm365/Web3_Tutorial&#34;&gt;《Web3 科学家极简入门指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过学习并使用 Web3.py 模块，实现链上数据查询、转账、合约交互等简单功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxN0XdUfZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tmplink/ipv6&#34;&gt;《IPv6 简明指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源学习资源：《IPv6 简明指南》，主要讲解 IPv6 的基础知识，让你进一步理解 IPv6 地址的常见概念，如前缀、子网、接口等。作者还会通过图文说明，带你了解家用场景下的 IPv6 实战。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lwvtf9MlN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/applenob/Cpp_Primer_Practice&#34;&gt;《C++ Primer 中文版（第 5 版）》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源学习资料：《C++ Primer 中文版（第 5 版）》学习仓库，整理了关于此书的笔记和课后练习答案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lwu62CRVR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/smartcontractkit/full-blockchain-solidity-course-js&#34;&gt;《基于 JavaScript 的区块链、Solidity、Web3 全栈开发教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过这个教程，你将学到关于区块链、Web 开发、智能合约、密码学、NFT 等各类技术栈原理与应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LvAI6fRsp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/neargle/my-re0-k8s-security&#34;&gt;《从零开始的 Kubernetes 攻防》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术资源：《从零开始的 Kubernetes 攻防》，主要讲解云原生技术的一些攻防技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LuwICnn70&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yanull/os-guide-cn&#34;&gt;《从零开始制作一个操作系统》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《从零开始制作一个操作系统》，教程比较简短，内容讲解不太详细，适合有一定技术基础的人学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtKp6fK6B&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DataTalksClub/mlops-zoomcamp&#34;&gt;MLOps Zoomcamp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 MLOps  教程，主要讲解 MLOps 基础知识、MLflow 入门、模型部署、模型监控、开发运维、CI/CD、机器学习画布等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtzNy6HgN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://zh.javascript.info/&#34;&gt;《现代 JavaScript 教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一本开源的 JavaScript 教程，作者将以最新的 JavaScript 标准为基准。通过简单但足够详细的内容，为你讲解从基础到高阶的 JavaScript 相关知识。教程划分为 3 部分，涵盖了 JavaScript 编程语言相关知识和浏览器行为。此外还有正则表达式、动画效果等一系列专题文章。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;javascript-tutorial/en.javascript.info&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://sqlbolt.com/&#34;&gt;SQLBolt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 SQL 技术教程：SQLBolt，作者提供了一系列交互式 SQL 教程，共 20 个章节，以及课后作业，帮你快速掌握与运用 SQL 开发。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsyaacOUC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PacktPublishing/The-Kaggle-Book&#34;&gt;《The Kaggle Book》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术书籍：《The Kaggle Book》，Kaggle 是一个知名的科学竞赛平台，不少开发者会通过参加 Kaggle 上的竞赛，快速提升自己的编码经验。通过这本书，你将熟悉 Kaggle 平台的使用、了解不同建模任务（包括对象检测、NLP、时间序列），进一步学习充分利用 Kaggle Notebook、数据集和论坛来提升个人能力。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HIT-UG-Group/DeepLearning-MuLi-Notes&#34;&gt;《动手学习深度学习 - 视频笔记》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;课程视频共 73 节，单个视频平均时长不超过 30 分钟。课程既包含少量的机器学习的基础知识；又有如今前沿应用的 各种深度学习模型，同时每一章节的讲解还配备由 pytorch 实现的代码、教科书等等。该课程可帮助同学在短期内，掌握深度学习的基础模型与前沿知识和并提高实践能力。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LrkKblDb4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DataWithDanny/sql-masterclass&#34;&gt;《给数据科学家看的 SQL 教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《给数据科学家看的 SQL 教程》，作者将基于一个加密货币交易数据库，带你了解 SQL 的常见用法。该教程共分为 13 个章节，每个章节作者都会提供不少习题与答案，以便大家训练学习。 ​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqFv23rZN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wxlscm/raspberry_tutorial&#34;&gt;《树莓派编程实用教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;全书共 31000 字，提供 20 多个树莓派应用实例，适合想在树莓派开发项目的工程师、学生参考学习。此外，该书还涵盖 Python，Linux 命令，C/C++，OpenCV，Darknet 等相关知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqyqFDhTZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huggingface/deep-rl-class&#34;&gt;《深度强化学习教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Hugging Face 在 GitHub 开源了一个《深度强化学习教程》，在该教程中，你将通过理论+实践的方式，了解深度强化学习相关的开源库、开发工具、项目发布等基础知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lqw4xfHVq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cnlinxi/book-text-to-speech/releases&#34;&gt;《语音合成：从入门到放弃》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书主要介绍当前语音合成技术的发展历史、开源资料、详解语音特征提取、声学模型、语音合成知识结构等技术，感兴趣的同学可以看一下。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LmnXId8oh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phil-opp/blog_os&#34;&gt;《用 Rust 开发一个操作系统》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过这个教程，你将学习如何使用 Rust 来编写一个操作系统，每篇文章都是一个小教程，并且包含了所有代码，你可以跟着一起学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LlaxJaW4P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datawhalechina/easy-rl&#34;&gt;《蘑菇书 EasyRL》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的深度学习技术书籍，覆盖了强化学习、马尔可夫决策过程、策略梯度、模仿学习等多个知识点。该教程也称为 “蘑菇书”，寓意是希望此书能够为读者注入活力，让读者 “吃” 下这本蘑菇之后，能够饶有兴致地探索强化学习，像马里奥那样愈加强大，继而在人工智能领域觅得意外的收获。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkRGJpxjI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LukeMathWalker/zero-to-production&#34;&gt;《Rust 从零开发到上线》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;，该项目主要教你如何通过 Rust 来开发一个后端 API 项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LkjUiwhs3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sunface/async-book&#34;&gt;《Rust 异步编程指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《Rust 异步编程指南》，高质量手翻官方的 Async Book， 是一本非常好的异步编程学习使用教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lk6yfrfK8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JuanCrg90/Clean-Code-Notes&#34;&gt;《代码整洁之道》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解如何编写干净、整洁的代码，合理定义代码名称、单元测试、项目数据结构等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lk16iblci&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/openmlsys/openmlsys-zh&#34;&gt;《机器学习系统：设计和实现》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解现代机器学习系统的设计原理以及实现经验。覆盖了编程接口、计算图、编译器前后端、数据处理、模型部署、分布式训练等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LjbZgE85C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dcbuild3r/blockchain-development-guide&#34;&gt;《区块链开发指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个挺有意思的公益性技术教程，该教程主要讲解 Web 前后端开发、以太坊基础、智能合约、密码学、数据分析等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lj6ujqM5Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QMHTMY/RustBook&#34;&gt;《Rust 数据结构与算法》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;共分九章，主要介绍计算机科学、基本数据结构与算法分析、递归、查找、排序等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiMsg7ZgN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/faif/python-patterns&#34;&gt;《Python 设计模式》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者通过编码实现，为多种 Python 设计模式提供了代码参考示例。除了代码之外，项目中还收录了有关 Python 设计模式的视频讲解，适合配套学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiEcOErVK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sunface/rust-by-practice&#34;&gt;《Rust 练习实践》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该教程将通过简单到困难的代码示例，让你学习如何基于小型项目来练习和实践 Rust。目前有提供中、英文两个版本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiBQHpvtu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/abarrak/linux-sysops-handbook&#34;&gt;《Linux 系统操作手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要介绍了 Linux 系统常用的管理技术与运维工具。书中包括系统用户权限管理、Shell 使用技巧、文件权限设置、后台管理任务设置、日志记录的监控与分析等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiuMkmPQm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dunwu/db-tutorial&#34;&gt;db-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据库相关学习教程，里面含有 MySQL、NoSQL、MongoDB、Elasticsearch、Redis 等学习教程，其中 MySQL 与 Redis 提供了思维导图对学习重点内容进行梳理，以便大家更好学习理解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LhUrzumpt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DengBoCong/nlp-paper&#34;&gt;《NLP 中文学习笔记》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者是来自华中科技大学的硕士生，里面主要记录了一些作者在学习过程中阅读过且感觉不错的论文。对于一些经典或思路很新奇的论文，作者会进行精读，并写一些阅读笔记同步上传更新。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgP4SebE6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://deepreinforcementlearningbook.org/&#34;&gt;《深度强化学习：基础、研究与应用 》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开放的 AI 技术教程，作者为北大助理教授董豪博士。书中主要讲解深度学习入门知识、常用算法、科技前沿研究方向、实际生活应用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgiRPEfVn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/modernizing/modernization&#34;&gt;《代码分析与自动化重构》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的开源技术教程：《代码分析与自动化重构》，主要讲解如何自己动手设计源码解析、构建代码的代码模型、可视化代码、以及进行自动化的重构和守护。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lg57riuYq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/probml/pml-book&#34;&gt;《概率机器学习》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者是 Google 的研究科学家 Kevin P Murphy。来自微软、斯坦福、哈佛等各路大佬对本书的评价如下：&amp;ldquo;这是一本了不起的书，涵盖了概率机器学习的概念、理论和计算基础，从基础开始，无缝过渡到该领域的前沿&amp;rdquo;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lg00QipDU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/michiganrobotics/rob501&#34;&gt;《机器人 501：机器人数学》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该教程主要是为机器人工程师讲解应用数学相关知识，同时也被用于密歇根大学的研究生教学。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcRXXkIXb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bagder/everything-curl/&#34;&gt;《Everything curl》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一本开源技术教程，里面讲述了 curl 项目、命令行工具、开发库的发展历史及技术原理。除此之外，你还可以从中学习到网络协议、命令行工具开发、开源项目维护、软件架构等扩展知识，非常值得一读。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcO2qdbkh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/akutz/go-generics-the-hard-way&#34;&gt;《笨方法学 Go 泛型》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的 Go 语言开源技术教程，主要包括开发环境安装、Hello World 示例、Go 泛型介绍及代码实现等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lcnkm9qo2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RangerNJU/Static-Program-Analysis-Book&#34;&gt;《静态程序分析入门》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将手把手教你编写一个静态程序分析器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lc3ij614A&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MichaelCade/90DaysOfDevOps&#34;&gt;《用 90 天学 DevOps》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面记录了国外一名开发者学习 DevOps 的 90 天历程。内容包括 DevOps 定义、Linux 基础知识、计算机网络、k8s 及容器的使用、自动化配置管理、日志监控管理与数据可视化等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbK2WhptF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/duchesnay/pystatsml&#34;&gt;《Python 中的统计学与机器学习》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源人工智能技术教程，主要讲解 Python 基础语法、数据处理以及数据可视化、多元统计、线性代数、特征提取、卷积神经网络等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbwiziB52&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sunface/rust-course&#34;&gt;《Rust语言圣经》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的 Rust 中文技术教程，主要包含 Rust 开发环境安装、语法基础入门与高级进阶、异步编程、代码最佳实践、错误处理等内容，对 Rust 进行了全面且深入的讲解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LblGZkRNB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datawhalechina/easy-rl&#34;&gt;EasyRL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的 AI 强化学习中文教程，主要包含了强化学习概述、马尔可夫决策过程 、表格型方法、策略梯度、模仿学习等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lb1EWpbwm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/itcharge/LeetCode-Py&#34;&gt;《算法通关手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;提供了超详细的「算法与数据结构」基础讲解教程，「LeetCode」650+ 道题目 Python 版的详细解析。该教程将通过「算法理论学习」和「编程实战练习」相结合的方式，带你从零基础到彻底掌握算法知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaYUtwaCE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BoltzmannEntropy/interviews.ai&#34;&gt;《深度学习面试》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;全书近 400 页，收录了数百道深度学习面试题与答案，附带有精美的插图和图表。该书主要讲解微积分、贝叶斯深度学习、特征提取、逻辑回归等内容，附有 PyTorch、Python 和 C++ 代码示例。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Larea65be&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Asabeneh/30-Days-Of-JavaScript&#34;&gt;《JavaScript 30 天编程挑战》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个前端开源技术教程，作者提供了一个可循序渐进的前端开发指南，带你一步一步入门 JavaScript 开发。内容主要包括前端开发环境配置、VSCode 代码编辑器使用介绍、JavaScript 语法基础、JSON 处理、DOM 对象操作、数据可视化项目编写等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/La4lu6yhC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/github/opensource.guide&#34;&gt;《开源软件指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 官方发布的一套技术文档：《开源软件指南》，有多个语言版本。主要讲解如何启动一个开源项目、项目维护的最佳实践，怎么通过开源工作获得经济报酬等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L9dI2pSpQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;机器学习人工智能&#34;&gt;机器学习/人工智能&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MLNLP-World/Paper-Picture-Writing-Code&#34;&gt;Paper Picture Writing Code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的 LaTeX 画图代码库。里面包含了几种 AI 论文中常用的画图代码，如折线图、柱状图、散点图、注意力可视化以及结构图等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MbcmRFfDL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PaddlePaddle/PaddleHub&#34;&gt;PaddleHub&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;百度在 GitHub 上开源的一款预训练模型工具包：PaddleHub，涵盖了大模型、CV、NLP、Audio、Video、工业应用等 400+ 预训练模型，代码全部开源，离线可运行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M5Ici3sxr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ben1234560/AiLearning-Theory-Applying&#34;&gt;AiLearning-Theory-Applying&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的 AI 知识库，主要帮助开发者快速上手 AI 理论及应用实战，基础知识、机器学习、深度学习、自然语言处理 BERT，含大量注释及数据集，力求每一位能看懂并复现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LFfMNz3bo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sensity-ai/dot&#34;&gt;Dot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;是 GitHub 上一个开源的 Deepfake AI 换脸攻击工具包。针对身份验证、视频会议系统等渗透测试工作而生，可供安全分析师、红队成员和生物识别研究人员使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LB8pSEYV1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/allegroai/clearml&#34;&gt;ClearML&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的机器学习工具包：ClearML，自带简洁美观的可视化界面。该工具可用于简化机器学习开发、运维流程，自动完成实验跟踪与结果记录，并提供了灵活多变的数据管理方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LyLvv9lJn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kazuhito00/Image-Processing-Node-Editor&#34;&gt;Image-Processing-Node-Editor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;日本开发者在 GitHub 开源的一款图像处理节点编辑器，通过该工具，可以辅助并完成深度学习的各项图像处理工作，快速验证、对比各个图像在不同条件下的执行结果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ly9NtmoMG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhiqi-li/BEVFormer&#34;&gt;BEVFormer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一套开源的环视物体检测方案：BEVFormer，实现了在鸟瞰图视角下的特征优化，可应用于汽车自动驾驶场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LxZbW6AGc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Baiyuetribe/paper2gui%E2%80%8B%E2%80%8B%E2%80%8B&#34;&gt;Paper2GUI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款面向普通人的 AI 桌面 APP 工具箱，开箱即用，非常方便，已支持 15+ AI 模型，内容涵盖语音合成、视频补帧、视频超分、目标检测、图片风格化、图片 OCR 识别等领域，兼容 Windows、Mac、Linux 等主流操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwMX2DEr6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AI4Finance-Foundation/FinRL&#34;&gt;FinRL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的量化金融自动交易框架：FinRL，附带有完整的深度学习、量化交易技术教程。项目覆盖了各类常用市场，并提供先进的算法核心，支持各种金融任务（投资组合分配、加密货币交易、高频交易）、实时交易等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LwDwv9lEw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RimoChan/internet-dataset&#34;&gt;internet-dataset&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个 GitHub 仓库收录了各种通过搜索引擎获取的数据集，整体数据量将近 50G，其中包括域名、网页、反向索引等数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lvzx3kXBi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/ColossalAI&#34;&gt;Energon-AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的大模型推理系统：Energon-AI。仅需对现有项目进行极少量修改，即可完成自定义大模型的推理部署，获得并行扩展的超线性加速。对于 AI 大模型分布式推理加速，相比英伟达 FasterTransformer 可提升 50% 以上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LvvNF8glt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/ColossalAI&#34;&gt;Colossal-AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国人在 GitHub 开源的一个项目：Colossal-AI，仅需极少量修改，即可让现有深度学习项目，在单张消费级显卡上，完成大模型训练，极大降低了项目研发成本！简而言之，有了这个开源项目后，每个人都可以在家训练 AI 大模型！尤其是大幅度降低了 AI 大模型微调、推理等下游任务和应用部署的门槛。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LtnCy6sQH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gradio-app/gradio&#34;&gt;Gradio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上这个名为 Gradio 的开源项目，可在短短几分钟内，为机器学习模型生成一个简洁、优雅的 UI 界面，让你能在浏览器中进行项目演示。通过该界面，你可以完成拖拽上传图像、粘贴文本、声音录制等操作，并查看模型输出内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lr25mDzFw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DengBoCong/nlp-paper&#34;&gt;nlp-paper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;字节跳动工程师在 GitHub 上整理的 NLP 论文列表（附阅读笔记），收录了一些比较经典或思路新奇的论文。其中包含 NLP 领域下的对话语音领域，复现模型以及数据处理等（代码含 TensorFlow 和 PyTorch 两版本）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqHRacIRL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jokenox/Goopt&#34;&gt;Goopt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外有位开发者基于 GPT-3 做了一款 AI 搜索引擎：Goopt，通过该搜索引擎检索到的所有内容，全部都是由 AI 和算法合成的。你可以在上面搜索任意术语，以获取相关结果与内容。通过这种方式，进一步模拟网页浏览体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LqDVBBooN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MLNLP-World/AI-Paper-collector&#34;&gt;AI-Paper-Collector&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的 Python 脚本：AI-Paper-Collector，可用于查找包含指定关键词的顶会论文列表，涵盖了 2019-2021 自然语言处理，计算机视觉，信息检索等领域的顶会论文。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lq7keozHW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dengxiuqi/ChineseLyrics&#34;&gt;ChineseLyrics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的中文歌词数据库，作者收录了 10W+ 首歌词数据，给做 NLP 和数据分析领域的朋友们提供参考。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LpWIF3AXx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/maHidaka/ros_face&#34;&gt;ROS-Face&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个挺有意思的开源项目。作者希望通过 ROS（机器人操作系统）来控制人脸面部表情，让面部动作听从机械指令&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lp7EEn4EN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jasoncao11/nlp-notebook&#34;&gt;nlp-notebook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的 NLP 领域常见任务的实现：nlp-notebook，包括新词发现、以及基于 PyTorch 的词向量、中文文本分类、实体识别、摘要文本生成、句子相似度判断、三元组抽取、预训练模型等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LoicfBjgt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fighting41love/funNLP&#34;&gt;funNLP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;几乎最全的中文 NLP 资源库。包括中英文敏感词、语言检测、中外手机 / 电话归属地 / 运营商查询、名字推断性别、手机号抽取、身份证抽取等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lo6pE6Y8x&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/ColossalAI&#34;&gt;Colossal-AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个增长迅猛的国产 AI 开源项目：Colossal-AI，可用于 AI 大规模并行训练，仅需一半数量的 GPU，便能完成相同效果的 GPT-3 训练工作，极大降低了项目研发成本！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LnUeFy3vP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/NeuralSpeech&#34;&gt;NeuralSpeech&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软亚洲研究院在 GitHub 开源的一个项目：NeuralSpeech ，提供了基于神经网络的语音处理，包括自动语音识别（ASR）、文本转语音（TTS）等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ll1zDmhT5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpc203/virtual_try_on_use_deep_learning&#34;&gt;virtual_try_on_use_deep_learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;使用深度学习算法实现虚拟试衣，结合了人体姿态估计、人体分割、几何匹配和 GAN，四种模型，只依赖 opencv 库就能运行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LklhwuxuG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ml4a/ml4a&#34;&gt;ml4a&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你正在尝试用 AI 来进行艺术创作，那么可以看下 ml4a 这个开源 Python 库。作者通过代码封装的方式，将 AI 艺术创作类的开源项目整合到了一起，包括图像风格迁移、基于素描的图像生成、图片分辨率增强、图像卡通话等模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiX3Pbnan&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datastaxdevs/workshop-ai-as-api&#34;&gt;《AI as an API》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的人工智能技术教程：《AI as an API》，主要讲解如何基于 NLP 技术，开发一个文本分类器，并进行持续化数据存储，封装成 API。教程学习时长，约为 50 分钟左右，适合在工作之余的闲暇时间动手学习。 ​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiUHHaTGV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/FastFold&#34;&gt;FastFold&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源了一套训练推理加速方案，通过引入 GPU 优化和大模型训练技术，可将 AlphaFold 总体训练时间 从 11 天减少到 67 小时，且总成本更低，在长序列推理中也实现 9.3 ∼ 11.6 倍提升，加速效果颇为显著。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LiAhibPFD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hpcaitech/ColossalAI&#34;&gt;Colossal-AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国人在 GitHub 开源的一个深度学习系统：Colossal-AI，可用于 AI 大规模并行训练。仅需一半数量的 GPU，便能完成相同效果的 GPT-3 训练工作，极大降低了项目研发成本！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lgsil82Rz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apchenstu/sofgan&#34;&gt;SofGAN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作用是可通过计算机视觉和模式识别技术，生成一张支持风格动态调整的人物肖像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcGblczJr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;Hugging Face&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Hugging Face 对外开放的机器学习任务列表，可以说整理的非常全面了。里面覆盖了自然语言处理、音频、计算机视觉等多个分类，其中包括掩蔽语言填充、智能问答、文本分类、文本翻译、语音识别、图像分割和物体检测等任务。每个任务都附有相对应的使用场景介绍、实际案例、学习指南、模型、数据集等资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lcz6XyeZ9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NVlabs/instant-ngp&#34;&gt;NeRF&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 AI 模型，可借助人工智能技术，把多张 2D 图片进行拼接，进而生成该图片的 3D 模型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbExZlG9Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/synercys/annotated_latex_equations&#34;&gt;annotated_latex_equations&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的 LaTeX 示例库，教你如何使用 Tikz 创建彩色的 LaTeX 注释，让论文变得更为简洁与美观。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaINX18aQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://waifulabs.com/&#34;&gt;动漫肖像魔法&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自麻省理工大学的工作室 sizigi，发布的一款很有意思的 AI 工具，你可以通过选择头像、滤镜、风格、动作等 4 个步骤，来定制一个专属的二次元老婆 / 老公&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LaHCTp6gA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sml2h3/ddddocr&#34;&gt;ddddocr&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的中文 OCR 通用验证码 Python 识别库，通过大批量生成随机数据，并进行深度网络训练，帮助厂商检验自家验证码的难易强度。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/La75XeXlc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;开源字体&#34;&gt;开源字体&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/telier-anchor/smiley-sans&#34;&gt;「得意黑 Smiley Sans」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上的中文开源字体：「得意黑 Smiley Sans」，一款在人文观感和几何特征中寻找平衡的中文黑体。整体字身窄而斜，细节融入了取法手绘美术字的特殊造型。字体支持简体中文常用字（覆盖 GB 2312 编码字符集）、拉丁字母、日文假名、阿拉伯数字和各类标点符号。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/MfMLbxreE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Chenyu-otf/chenyuluoyan_thin&#34;&gt;《辰宇落雁體》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上又一款开源中文字体：《辰宇落雁體》，由刘韦辰和王立宇两名同学联合创作，并基于 OFL 1.1 开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M19npcwCE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TakWolf/ark-pixel-font&#34;&gt;方舟像素字体&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上又一款开源的像素风字体：泛中日韩像素字体。支持 10、12 和 16 像素。目标是为开发「像素风游戏」，提供一套开箱即用的字体解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LuDUBmldF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Buernia/Zhudou-Sans&#34;&gt;煮豆黑体 Zhudou Sans&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的中文字体，支持中日韩标点、全角字母、全角数字及一些特殊符号。标点造型主要来源于 Noto Sans，可以为类似风格的西文字体带来更加协调的中外文混排效果。​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lp9e496zx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ayaka14732/FanWunHak&#34;&gt;「繁媛黑體」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的繁体字体，基于「源样黑体」进行开发设计，整体风格看起来清晰自然，还能满足 &amp;ldquo;一简对多繁&amp;rdquo; 的需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ll52NDdH7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/reorx/cht-colors&#34;&gt;「中国传统色彩」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个记录了「中国传统色彩」配色的网站，网站代码已在 GitHub 开源。该网站提供了各个色彩的常用名称、别名、RGB 与 HEX 值。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M4D1KbSaY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/fluentui-emoji&#34;&gt;Fluent Emoji&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软开源的一套简洁、友好、可爱的 Emoji 表情包，基于 MIT 协议开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/M2p9tv65f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/logto-io/logto&#34;&gt;Logto&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的用户登录认证系统：Logto，可在几分钟内，帮你快速构建完整的用户身份及登录体系。项目自带基于 OIDC 的身份服务，支持多个社交平台的登录集成，开箱即用，拥有丰富的图形化管理界面，另外还提供邮箱、短信等多种认证方式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LCO7kArvE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/4ian/GDevelop&#34;&gt;GDevelop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的跨平台游戏开发引擎，可帮助不懂编程的设计师，快速开发一款能够满足移动端、桌面端、Web 端的游戏。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LB2qwByCQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Singosgu/GreaterWMS&#34;&gt;GreaterWMS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的仓储管理系统：GreaterWMS，拥有报表中心、财务中心等系统，支持货物管理、人员管理、订单管理等功能，适可用于多种成品管理环节的货物管理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LvxaVcMd4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/windmill-labs/windmill&#34;&gt;Windmill.dev&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 OSS 开发者平台。通过编写少量 Python 和 Typescript 脚本，便可快速构建出生产级、多步骤的自动化应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LsnyCFb37&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://svgsilh.com/&#34;&gt;SVG Silh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 CC0 协议开放的 SVG 素材网站，上面收录了诸多 SVG 图像与图标，所有素材均可免费商用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lrp45CYgH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/streamxhub/streamx&#34;&gt;StreamX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个神奇的开源框架，让流处理更简单。该框架规范了项目配置，鼓励函数式编程，定义了最佳的编程方式，提供了一系列开箱即用的 Connectors。标准化了配置、开发、测试、部署、监控、运维的整个过程，提供了 Scala/Java 两套 API，最终目的是打造一个一站式大数据平台，流批一体，湖仓一体的解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lrjz8mjH6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kestra-io/kestra&#34;&gt;Kestra&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可扩展性极强的开源编排和调度平台，可快速创建、运行、调度和监控数百万个复杂管道。支持任意类型的工作流程，易于上手学习，支持从 API、调度、检测、事件来触发执行，可通过界面直接配置流程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LpjPBuoJf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YunYouJun/cook&#34;&gt;Cook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者开源的一个菜谱网站：Cook，可自动将各种食材进行组合，生成对应的菜谱，并配套有视频教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LpcLeEUNS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CytopiaTeam/Cytopia&#34;&gt;Cytopia&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款具有像素艺术风格的开源城市模拟器，基于 JSON 的自定义 UI 系统，可灵活定制，并通过程序生成多种地形，模拟城市构建。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lp29H5jap&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://elest.io/&#34;&gt;elest.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在 Hacker New 上看到的一项开源软件托管服务，可在几分钟内，快速部署 150 多种开源软件。此外，该平台还会帮作者处理后续的软件安装、配置、加密、备份、系统更新、实时监控等工作，并将 10% 的收入跟开源作者共享。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LletgqaSO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/skywind3000/preserve-cd&#34;&gt;《绝版游戏保护工程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了多款堪称经典的小游戏，让你重回童年。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LgDifjm5j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dmarman/sha256algorithm&#34;&gt;sha256algorithm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个 GitHub 项目通过可视化的方式，让你更为直观的理解 SHA256 算法原理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Lf1k8Carf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ACh-K/Cubic-11&#34;&gt;Cubic 11&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的中文字体，像素风，可用于各类游戏及美术作品，支持商用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcQMTlANS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/arcxingye/EatKano&#34;&gt;吃掉小鹿乃&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者做的一款摸鱼小游戏：吃掉小鹿乃。玩家需要在 20 秒内，尽可能点掉更多鹿乃头像。目前该游戏浏览量已突破 1000 万，主要用于训练手指灵活度和反应能力&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcwKQmBEJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/khuedoan/homelab&#34;&gt;Homelab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由越南一位程序员小哥在 GitHub 开源的家用自托管基础设施，支持自动配置、操作和更新各类自托管服务，可用于打造自己的家庭开发实验室。其中包括代码自托管、证书管理、CI/CD 持续集成与交付、K8s 自动化安装和管理、实时聊天系统、应用监控面板等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LcgfZ3rHA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KvrocksLabs/kvrocks&#34;&gt;Kvrocks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 NoSQL 数据库，基于 RocksDB 并兼容 Redis 协议，磁盘类型的 Redis 为降低存储成本而生，存储成本可以降到 Redis 的 1/10 以上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/LbDmVs22N&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>Go1.18 新特性：新增好用的 Cut 方法</title>
      <link>https://note.lican.site/posts/posts/go/118-cut/</link>
      <pubDate>Sat, 05 Feb 2022 16:03:31 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/118-cut/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在各种写业务代码的时候，大家会常常要处理字符串的内容。常见的像是用邮箱登陆账号，如果是：eddycjy@gmail.com，那就得根据 @ 来切割，分别取出前和后，来识别用户名和邮箱地址。&lt;/p&gt;&#xA;&lt;p&gt;这种需求，在 Go 里写起来方便吗？今天就由煎鱼带大家了解。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;h3 id=&#34;重复代码&#34;&gt;重复代码&lt;/h3&gt;&#xA;&lt;p&gt;无独有偶，Ainar Garipov 在许多项目中遇到了前面我们所提的切割需求。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Index&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt;[:&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;又或是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;LastIndex&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;@&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;idx&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;host&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;经常要反复写一些繁琐的代码，提案提出者表示不愉快。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新提案&#34;&gt;新提案&lt;/h2&gt;&#xA;&lt;h3 id=&#34;实施内容&#34;&gt;实施内容&lt;/h3&gt;&#xA;&lt;p&gt;建议新增 Cut 方法到 strings 标准库：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Cut&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;before&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;after&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Index&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;[:&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;len(&lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt;):], &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同步也要在 bytes 标准库：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Cut&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;sep&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;before&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;after&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;found&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样一来，就可以从原本的：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IndexByte&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;rec&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;=&amp;#39;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;eq&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ErrHeader&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;rec&lt;/span&gt;[:&lt;span style=&#34;color:#a6e22e&#34;&gt;eq&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;rec&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;eq&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;:]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;变成：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.18 新特性：编译后的二进制文件，将包含更多信息</title>
      <link>https://note.lican.site/posts/posts/go/118-build-info/</link>
      <pubDate>Sat, 05 Feb 2022 16:02:45 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/118-build-info/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;我有一个朋友，，开开心心入职，想着施展拳脚，第一个任务就是对老旧的二进制文件进行研究。&lt;/p&gt;&#xA;&lt;p&gt;他一看，这文件，不知道是编译器用什么参数怎么打出来的，环境不知道是什么，更不知道来自什么代码分支？&lt;/p&gt;&#xA;&lt;p&gt;这除了是项目流程上的问题外，Go 在这块也有类似的小问题，处理起来比较麻烦。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;日常中很难从 Go 二进制文件中检索元信息，要么是信息完全缺失，要么提取需要对二进制文件进行大量解析。&lt;/p&gt;&#xA;&lt;p&gt;包含的元信息如下：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;元信息&lt;/th&gt;&#xA;          &lt;th&gt;提取处&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 构建版本&lt;/td&gt;&#xA;          &lt;td&gt;符号表，通过全局变量 &lt;code&gt;runtime.buildVersion&lt;/code&gt; 来获取&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;构建信息，例如：模块和版本&lt;/td&gt;&#xA;          &lt;td&gt;符号表，通过全局变量 &lt;code&gt;runtime/debug.modinfo&lt;/code&gt; 来获取&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;编译器选项，例如：构建模式、编译器、gcflags、ldflags 等&lt;/td&gt;&#xA;          &lt;td&gt;无法获取&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;用户定义的自定义数据，例如：应用程序版本等&lt;/td&gt;&#xA;          &lt;td&gt;需在编译时设置全局字符串变量，才可以获取&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;关注到编译器选项，也就是参数等都是无法得知的，也就是会提高获取如何编译出来的难度。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新提案&#34;&gt;新提案&lt;/h2&gt;&#xA;&lt;p&gt;Michael Obermüller 提出了一个新的提案《&lt;a href=&#34;https://github.com/golang/go/issues/35667&#34;&gt;cmd/go: add compiler flags, relevant env vars to &amp;lsquo;go version -m&amp;rsquo; output&lt;/a&gt;》用于解决上述问题。&lt;/p&gt;&#xA;&lt;p&gt;在提案中想要的是 JSON 格式的结构输出：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;go1.13.4&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;compileropts&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;compiler&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gc&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;mode&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pie&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;linux&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;buildinfo&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HelloWorld&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(devel)&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;deps&amp;#34;&lt;/span&gt;: []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    },&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;: {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;customkey&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;customval&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Russ Cox 表示由于编译信息已有既有格式，并且默认使用 JSON 只会让二进制文件变得更大。好处少，没必要，改为了选项化的支持。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.18 新特性：多 Module 工作区模式</title>
      <link>https://note.lican.site/posts/posts/go/118-module/</link>
      <pubDate>Sat, 05 Feb 2022 16:00:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/118-module/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;Go 的依赖管理，也就是 Go Module。从推出到现在，也已经有了一定的年头了，吐槽一直很多，官方也不断地在进行完善。&lt;/p&gt;&#xA;&lt;p&gt;Go1.18 将会推出一个新特性：Multi-Module Workspaces，用于支持 Module 多工作区，能解决以往的一系列问题。&lt;/p&gt;&#xA;&lt;p&gt;今天将由煎鱼带大家一起深入学习。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在日常使用 Go 工程时，总会遇到 2 个经典问题，特别的折腾人。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;依赖本地 replace module。&lt;/li&gt;&#xA;&lt;li&gt;依赖本地未发布的 module。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;replace-module&#34;&gt;replace module&lt;/h3&gt;&#xA;&lt;p&gt;第一个场景：像是平时在 Go 工程中，我们为了解决一些本地依赖，或是定制化代码。会在 go.mod 文件中使用 replace 做替换。&lt;/p&gt;&#xA;&lt;p&gt;如下代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;replace&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;golang&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;org&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt; =&amp;gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Users&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;eddycjy&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;awesomeProject&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样就可以实现本地开发联调时的准确性。&lt;/p&gt;&#xA;&lt;p&gt;问题就在这里：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;本地路径：所设定的 replace 本质上转换的是本地的路径，也就是每个人都不一样。&lt;/li&gt;&#xA;&lt;li&gt;仓库依赖：文件修改是会上传到 Git 仓库的，不小心传上去了，影响到其他开发同学，又或是每次上传都得重新改回去。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;用户体验非常差，很折腾人。&lt;/p&gt;&#xA;&lt;h3 id=&#34;未发布的-module&#34;&gt;未发布的 module&lt;/h3&gt;&#xA;&lt;p&gt;第二个场景：在做本地的 Go 项目开发时，可能会在本地同时开发多个库（项目库、工具库、第三方库）等。&lt;/p&gt;&#xA;&lt;p&gt;如下代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/eddycjy/pkgutil&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pkgutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PrintFish&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果这个时候运行 &lt;code&gt;go run&lt;/code&gt; 或是 &lt;code&gt;go mod tidy&lt;/code&gt;，都不行，会运行失败。&lt;/p&gt;&#xA;&lt;p&gt;报如下类似错误：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;fatal: repository &amp;#39;https://github.com/eddycjy/pkgutil/&amp;#39; not found&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个问题报错是因为 &lt;code&gt;github.com/eddycjy/pkgutil&lt;/code&gt; 这个库，在 GitHub 是没有的，自然也就拉取不到。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么 Go 有两种声明变量的方式，有什么区别，哪种好？</title>
      <link>https://note.lican.site/posts/posts/go/var/</link>
      <pubDate>Sat, 05 Feb 2022 15:56:48 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/var/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;有一个读者刚入门 Go ，提了一个很有意思的问题：Go 有几种种声明变量的方式，作为初学者，到底用哪种，有什么区别，又为什么要有多种声明方式呢？&lt;/p&gt;&#xA;&lt;p&gt;为此，煎鱼将和大家一起探索这个问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;变量声明&#34;&gt;变量声明&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 中，一共有 2 种变量声明的方式，各有不同的使用场景。&lt;/p&gt;&#xA;&lt;p&gt;分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;标准变量声明（Variable declarations）。&lt;/li&gt;&#xA;&lt;li&gt;简短变量声明（Short variable declarations）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;标准声明&#34;&gt;标准声明&lt;/h3&gt;&#xA;&lt;p&gt;变量声明创建了一个或多个变量，为它们绑定了相应的标识符，并给每个变量一个类型和初始值。&lt;/p&gt;&#xA;&lt;p&gt;使用语法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VarDecl&lt;/span&gt;     = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;var&amp;#34;&lt;/span&gt; ( &lt;span style=&#34;color:#a6e22e&#34;&gt;VarSpec&lt;/span&gt; | &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;(&amp;#34;&lt;/span&gt; { &lt;span style=&#34;color:#a6e22e&#34;&gt;VarSpec&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;;&amp;#34;&lt;/span&gt; } &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;)&amp;#34;&lt;/span&gt; ) .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;VarSpec&lt;/span&gt;     = &lt;span style=&#34;color:#a6e22e&#34;&gt;IdentifierList&lt;/span&gt; ( &lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt; [ &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ExpressionList&lt;/span&gt; ] | &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;=&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ExpressionList&lt;/span&gt; ) .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;案例代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;U&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;W&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;float64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;float32&lt;/span&gt; = &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;u&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;1.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2.0&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;简短声明&#34;&gt;简短声明&lt;/h3&gt;&#xA;&lt;p&gt;一个短变量声明。使用语法：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;ShortVarDecl = IdentifierList &amp;#34;:=&amp;#34; ExpressionList .&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;案例代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼进脑子了&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;w&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pipe&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;y&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;coord&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;网友疑惑&#34;&gt;网友疑惑&lt;/h2&gt;&#xA;&lt;p&gt;在我们群里的 Go 读者提了这问题后，我也搜了搜相关资料。发现在 stackoverflow 上也有人提出了类似的疑惑：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 为什么不在语言层面支持 map 并发？</title>
      <link>https://note.lican.site/posts/posts/go/map-con/</link>
      <pubDate>Sat, 05 Feb 2022 15:55:22 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map-con/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;很多小伙伴学习 Go 语言的语法时，可能只是轻轻地看到过这个问题，结果一旦上手，多多少少一个组内总会碰到过几次。&lt;/p&gt;&#xA;&lt;p&gt;甚至会发现有一定年限的程序员也会遇到。有小伙伴疑惑了，这么折腾，为什么 Go 不直接在语言层面就支持 map 并发，那得有多香？&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么原生不支持&#34;&gt;为什么原生不支持&lt;/h2&gt;&#xA;&lt;p&gt;凭什么 Go 官方还不支持，难不成太复杂了，性能太差了，到底是为什么？&lt;/p&gt;&#xA;&lt;p&gt;官方答复原因如下（via @go faq）：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;典型使用场景：map 的典型使用场景是不需要从多个 goroutine 中进行安全访问。&lt;/li&gt;&#xA;&lt;li&gt;非典型场景（需要原子操作）：map 可能是一些更大的数据结构或已经同步的计算的一部分。&lt;/li&gt;&#xA;&lt;li&gt;性能场景考虑：若是只是为少数程序增加安全性，导致 map 所有的操作都要处理 mutex，将会降低大多数程序的性能。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;核心来讲就是：Go 团队在经过了长时间的讨论后，认为原生 map 更应适配典型使用场景。&lt;/p&gt;&#xA;&lt;p&gt;如果为了小部分情况，将&lt;strong&gt;会导致大部分程序付出性能代价&lt;/strong&gt;，决定了不支持原生的并发 map 读写。且在 Go1.6 起，&lt;strong&gt;增加了检测机制&lt;/strong&gt;，并发的话会导致异常。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要崩溃&#34;&gt;为什么要崩溃&lt;/h2&gt;&#xA;&lt;p&gt;前面有提到一点，在 Go1.6 起会进行原生 map 的并发检测，这是一些人的 “噩梦”。&lt;/p&gt;&#xA;&lt;p&gt;在此有人吐槽到：“明明给我抛个错就好了，凭什么要让我的 Go 进程直接崩溃掉，分分钟给我背个 P0”。&lt;/p&gt;&#xA;&lt;h3 id=&#34;场景枚举&#34;&gt;场景枚举&lt;/h3&gt;&#xA;&lt;p&gt;这里我们假设一下，如果并发读写 map 是以下两种场景：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;产生 panic：程序 panic -&amp;gt; 默认走进 recover -&amp;gt; 没有对并发 map 进行处理 -&amp;gt; map 存在脏数据 -&amp;gt; 程序使用脏数据 -&amp;gt; 产生**未知((影响。&lt;/li&gt;&#xA;&lt;li&gt;产生 crash：程序 crash -&amp;gt; 直接崩溃 -&amp;gt; 保全数据（数据正常）-&amp;gt; 产生**明确((风险。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;你会选择哪一种方案呢？Go 官方在两者的风险衡量中选择了第二种。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 泛型的 3 个核心设计，你学会了吗？</title>
      <link>https://note.lican.site/posts/posts/go/generics-design/</link>
      <pubDate>Sat, 05 Feb 2022 15:52:46 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/generics-design/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;Go1.18 的泛型是闹得沸沸扬扬，虽然之前写过很多篇针对泛型的一些设计和思考。但因为泛型的提案之前一直还没定型，所以就没有写完整介绍。&lt;/p&gt;&#xA;&lt;p&gt;如今已经基本成型，就由煎鱼带大家一起摸透 Go 泛型。本文内容主要涉及泛型的 3 大概念，非常值得大家深入了解。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;类型参数。&lt;/li&gt;&#xA;&lt;li&gt;类型约束。&lt;/li&gt;&#xA;&lt;li&gt;类型推导。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;类型参数&#34;&gt;类型参数&lt;/h2&gt;&#xA;&lt;p&gt;类型参数，这个名词。不熟悉的小伙伴咋一看就懵逼了。&lt;/p&gt;&#xA;&lt;p&gt;泛型代码是使用抽象的数据类型编写的，我们将其称之为类型参数。当程序运行通用代码时，类型参数就会被类型参数所取代。也就是&lt;strong&gt;类型参数是泛型的抽象数据类型&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;简单的泛型例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;代码有一个 &lt;code&gt;Print&lt;/code&gt; 函数，它打印出一个片断的每个元素，其中片断的元素类型，这里称为 T，是未知的。&lt;/p&gt;&#xA;&lt;p&gt;这里引出了一个要做泛型语法设计的点，那就是：T 的&lt;strong&gt;泛型类型参数，应该如何定义&lt;/strong&gt;？&lt;/p&gt;&#xA;&lt;p&gt;在现有的设计中，分为两个部分：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;类型参数列表：&lt;strong&gt;类型参数列表将会出现在常规参数的前面&lt;/strong&gt;。为了区分类型参数列表和常规参数列表，类型参数列表&lt;strong&gt;使用方括号&lt;/strong&gt;而不是小括号。&lt;/li&gt;&#xA;&lt;li&gt;类型参数约束：如同常规参数有类型一样，类型参数也有元类型，被称为约束（后面会进一步介绍）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;结合完整的例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Print 可以打印任何片断的元素。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Print 有一个类型参数 T，并有一个单一的（非类型）的 s，它是该类型参数的一个片断。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// do something...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述代码中，我们声明了一个函数 &lt;code&gt;Print&lt;/code&gt;，其有一个类型参数 T，类型约束为 &lt;code&gt;any&lt;/code&gt;，表示为任意的类型，作用与 &lt;code&gt;interface{}&lt;/code&gt; 一样。他的入参变量 &lt;code&gt;s&lt;/code&gt; 是类型 T 的切片。&lt;/p&gt;&#xA;&lt;p&gt;函数声明完了，在函数调用时，我们需要指定类型参数的类型。如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;]([]&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;{&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述代码中，我们指定了传入的类型参数为 int，并传入了 &lt;code&gt;[]int{1, 2, 3}&lt;/code&gt; 作为参数。&lt;/p&gt;&#xA;&lt;p&gt;其他类型，例如 float64:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 读者提问：值为 nil 也能调用函数，太神奇了吧？</title>
      <link>https://note.lican.site/posts/posts/go/nil-func/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:27 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/nil-func/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近在我们 Go 的技术交流群里，有一个小伙伴提了一个程序方面的问题，还挺有意思的，分享给大家。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/0774f643-81a2-4458-b557-05c81a9572ef.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;示例&#34;&gt;示例&lt;/h2&gt;&#xA;&lt;p&gt;示例程序如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Hello&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼进脑子了&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Hello&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这段程序的运行结果是什么？&lt;/p&gt;&#xA;&lt;p&gt;从程序的分析来看，变量 &lt;code&gt;t&lt;/code&gt; 并没有初始化，只是声明了类型。然后就直接调用了 &lt;code&gt;Hello&lt;/code&gt; 方法，像是 nil 调用函数，理论上应该出现恐慌（panic）。&lt;/p&gt;&#xA;&lt;p&gt;运行结果是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;panic: runtime error: invalid memory address or nil pointer dereference&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;对不对呢？&lt;/p&gt;&#xA;&lt;p&gt;显然，真正的运行结果是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;脑子进煎鱼了&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;请你思考一下，想想这是为什么？&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么&#34;&gt;为什么&lt;/h2&gt;&#xA;&lt;p&gt;问题的原因是：很多小伙伴认为变量 &lt;code&gt;t&lt;/code&gt; 的值都是 nil 了，不应该还能调用到才对。&lt;/p&gt;&#xA;&lt;p&gt;更抽象化来讲，就是 ”程序是如何检查对象指针来寻找和调度所需函数“。&lt;/p&gt;&#xA;&lt;p&gt;实际上，在 Go 中，表达式 &lt;code&gt;Expression.Name&lt;/code&gt; 的语法，所调用的函数完全由 &lt;code&gt;Expression&lt;/code&gt; 的类型决定。&lt;/p&gt;&#xA;&lt;p&gt;其调用函数的指向不是由该表达式的特定运行时值来决定，包括我们前面所提到的 nil。&lt;/p&gt;&#xA;&lt;p&gt;具体如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Sometype&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Somemethod&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;firstArg&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;本质上是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 有哪些无法恢复的致命场景？</title>
      <link>https://note.lican.site/posts/posts/go/throw/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:26 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/throw/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;有一次事故现场，在紧急恢复后，他正在排查代码，查了好一会。我回头一看，这错误提醒很明显就是致命错误，较好定位。&lt;/p&gt;&#xA;&lt;p&gt;但此时，他竟然在查 panic-recover 是不是哪里漏了，我表示大受震惊&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;今天就由煎鱼给大家分享一下错误类型有哪几种，又在什么场景下会触发。&lt;/p&gt;&#xA;&lt;h2 id=&#34;错误类型&#34;&gt;错误类型&lt;/h2&gt;&#xA;&lt;h3 id=&#34;error&#34;&gt;error&lt;/h3&gt;&#xA;&lt;p&gt;第一种是 Go 中最标准的 error 错误，其真身是一个 interface{}。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Error&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在日常工程中，我们只需要创建任意结构体，实现了 Error 方法，就可以认为是 error 错误类型。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;errorString&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;errorString&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Error&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在外部调用标准库 API，一般如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Open&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filename.ext&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// do something with the open *File f&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们会约定最后一个参数为 error 类型，一般常见于第二个参数，可以有个约定俗成的习惯。&lt;/p&gt;&#xA;&lt;h3 id=&#34;panic&#34;&gt;panic&lt;/h3&gt;&#xA;&lt;p&gt;第二种是 Go 中的异常处理 panic，能够产生异常错误，结合 panic+recover 可以扭转程序的运行状态。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    panic(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;a problem&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Create&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tmp/file&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        panic(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>长达 12 年，Go 才引入泛型，是政治，还是技术问题？</title>
      <link>https://note.lican.site/posts/posts/go/import-generics/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:25 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/import-generics/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前两天 Go1.18 beta1 已经发布，距离正式发布 Go1.18 的生产可用还有 2 个月，也就是泛型即将正式面世。&lt;/p&gt;&#xA;&lt;p&gt;最近正在收集泛型的一些资料，看到在 2015 年有人在 Hacker News 上的《&lt;a href=&#34;https://news.ycombinator.com/item?id=9622417&#34; title=&#34;Go 1.5 max procs default&#34;&gt;Go 1.5 max procs default&lt;/a&gt;》吐槽 Go 不支持泛型是 “政治” 原因&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;看了还是有些意义的，&lt;strong&gt;与现在的矛盾点基本一致&lt;/strong&gt;，为此分享给大家。&lt;/p&gt;&#xA;&lt;h2 id=&#34;网友吐槽&#34;&gt;网友吐槽&lt;/h2&gt;&#xA;&lt;p&gt;网友 @aikah 认为 Go 团队不太可能在语言中加入泛型，这显然是一个政治问题而不是技术问题。错误处理也是如此。&lt;/p&gt;&#xA;&lt;p&gt;和许多人一样，该网友&lt;strong&gt;认为 Go 在极简主义和功能之间没有取得正确的平衡&lt;/strong&gt;。反对泛型的人赞成用编译时类型检查（总是安全的）换取运行时类型断言（可能失败）。&lt;/p&gt;&#xA;&lt;p&gt;他们拒绝承认这一事实。这就是他们反对泛型的论点，并将最终损害语言的任何潜在增长。他们基本上是在违背自己的利益。&lt;/p&gt;&#xA;&lt;h2 id=&#34;官方回复&#34;&gt;官方回复&lt;/h2&gt;&#xA;&lt;p&gt;Russ Cox 做了正式的回复：很抱歉，但不是：&lt;strong&gt;泛型是一个技术问题&lt;/strong&gt;，不是一个政治问题。&lt;/p&gt;&#xA;&lt;p&gt;Go 团队并&lt;strong&gt;不反对泛型本身&lt;/strong&gt;，只是反对做那些没有被很好理解或不能很好地与 Go 配合的事情。&lt;/p&gt;&#xA;&lt;p&gt;这就是核心观点和矛盾点，也从 2009 年，延续到了现在。&lt;/p&gt;&#xA;&lt;h3 id=&#34;会遇到的问题&#34;&gt;会遇到的问题&lt;/h3&gt;&#xA;&lt;p&gt;Go 团队认为要将泛型的概念融入 Go，并与系统的其他部分很好地配合，必须解决一些深层次的技术问题，而我们并没有解决这些问题的办法。&lt;/p&gt;&#xA;&lt;p&gt;关于这些问题，在几年前就在博客上写过一篇《&lt;a href=&#34;https://research.swtch.com/generic&#34; title=&#34;The Generic Dilemma&#34;&gt;The Generic Dilemma&lt;/a&gt;》：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/8ed3923a-d5fc-482f-bb6d-6fff7a19fcaa.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;即使克服了那一页上的问题，也有其他问题，接下来你会遇到的问题是：”如何让程序员以一种有用的、易于解释的方式省略类型注释“。&lt;/p&gt;&#xA;&lt;p&gt;也就是如何更人性、更易于的表达泛型的类型参数。&lt;/p&gt;&#xA;&lt;h4 id=&#34;泛型例子&#34;&gt;泛型例子&lt;/h4&gt;&#xA;&lt;p&gt;举个例子，C++ 允许你写 &lt;code&gt;make_pair(1, &amp;quot;foo&amp;quot;)&lt;/code&gt;，而不是 &lt;code&gt;make_pair&amp;lt;int, string&amp;gt;(1, &amp;quot;foo&amp;quot;)&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;为了达到这种效果，推断注释背后的逻辑需要几页几页的规范，这并不是一个特别容易理解的编程模型，当事情出错时，编译器也不能轻易解释。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 为什么不支持可重入锁？</title>
      <link>https://note.lican.site/posts/posts/go/again-mutex/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:24 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/again-mutex/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;程序里的锁，是很多小伙伴在写分布式应用时用的最多的一个利器之一。&lt;/p&gt;&#xA;&lt;p&gt;使用 Go 的同学里，绝大部分都有其他语言的经验，就会对其中一点有疑惑，那就是 &lt;strong&gt;Go 里的锁，竟然不支持可重入&lt;/strong&gt;？&lt;/p&gt;&#xA;&lt;p&gt;为此，今天煎鱼带大家一起来了解这里的设计考量，看看为什么。&lt;/p&gt;&#xA;&lt;h2 id=&#34;可重入锁&#34;&gt;可重入锁&lt;/h2&gt;&#xA;&lt;p&gt;如果对已经上锁的普通互斥锁进行 “加锁” 操作，其结果要么失败，要么会阻塞至解锁。&lt;/p&gt;&#xA;&lt;p&gt;锁的场景如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在加锁上：如果是可重入互斥锁，当前尝试加锁的线程如果就是持有该锁的线程时，加锁操作就会成功。&lt;/li&gt;&#xA;&lt;li&gt;在解锁上：可重入互斥锁一般都会记录被加锁的次数，只有执行相同次数的解锁操作才会真正解锁。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;简单来讲，可重入互斥锁是互斥锁的一种，同一线程对其多次加锁不会产生死锁，又或是导致阻塞。&lt;/p&gt;&#xA;&lt;p&gt;不同语言间实现可能或多或少有些区别，但大体意思差不多。&lt;/p&gt;&#xA;&lt;p&gt;请你想一下，Go 是怎么样的呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-支持情况&#34;&gt;Go 支持情况&lt;/h2&gt;&#xA;&lt;p&gt;我们看到以下这个 Go 互斥锁例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sync&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Mutex&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Lock&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mu&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Lock&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这段 Go 程序会阻塞吗？不会，会报以下错误：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;fatal error: all goroutines are asleep - deadlock!&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Go 显然是不支持可重入互斥锁的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;官方回复&#34;&gt;官方回复&lt;/h2&gt;&#xA;&lt;h3 id=&#34;go-设计原则&#34;&gt;Go 设计原则&lt;/h3&gt;&#xA;&lt;p&gt;在工程中使用互斥的根本原因是：为了保护不变量，也可以用于保护内、外部的不变量。&lt;/p&gt;&#xA;&lt;p&gt;基于此，Go 在互斥锁设计上会遵守这几个原则。如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在调用 &lt;code&gt;mutex.Lock&lt;/code&gt; 方法时，要保证这些变量的不变性保持，不会在后续的过程中被破坏。&lt;/li&gt;&#xA;&lt;li&gt;在调用 &lt;code&gt;mu.Unlock&lt;/code&gt; 方法时，要保证：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;程序不再需要依赖那些不变量。&lt;/li&gt;&#xA;&lt;li&gt;如果程序在互斥锁加锁期间破坏了它们，则需要确保已经恢复了它们。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;不支持的原因&#34;&gt;不支持的原因&lt;/h3&gt;&#xA;&lt;p&gt;讲了 Go 自己的设计原则后，那为什么不支持可重入呢？&lt;/p&gt;&#xA;&lt;p&gt;其实 Russ Cox 于 2010 年在《&lt;a href=&#34;https://groups.google.com/g/golang-nuts/c/XqW1qcuZgKg/m/Ui3nQkeLV80J&#34; title=&#34;Experimenting with GO&#34;&gt;Experimenting with GO&lt;/a&gt;》就给出了答复，认为递归（又称：重入）互斥是个坏主意，这个设计并不好。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 泛型玩出花，详解新提案 switch type！</title>
      <link>https://note.lican.site/posts/posts/go/switch-type/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:23 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/switch-type/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前面写过好几篇 Go 泛型的语法、案例介绍，新的一手 Go 消息。实际上，随着一些提案被接受，新的提案也逐渐冒出。&lt;/p&gt;&#xA;&lt;p&gt;这不，我发现有了泛型后，大家可以更进一步玩出花来了。看到了一个 ”新“ 提案《&lt;a href=&#34;https://github.com/golang/go/issues/45380&#34; title=&#34;proposal: spec: generics: type switch on parametric types&#34;&gt;proposal: spec: generics: type switch on parametric types&lt;/a&gt;》，讲的就是增加泛型后的参数类型上的类型开关诉求。&lt;/p&gt;&#xA;&lt;p&gt;跟着煎鱼一起掌握新的 Go 知识吧！&lt;/p&gt;&#xA;&lt;h2 id=&#34;新提案&#34;&gt;新提案&lt;/h2&gt;&#xA;&lt;p&gt;新的提案内容是希望增加一个新的变种语句，允许在 switch 语句中使用泛型时，能够进一步便捷的约束其类型参数。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;A1&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;A2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;A3&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也就是 switch-type 语句的 &lt;strong&gt;T 类型可以是一个泛型的类型参&lt;/strong&gt;，case 所对应的的类型可以是任何类型，包括泛型的约束类型。&lt;/p&gt;&#xA;&lt;p&gt;假设类型 T 的类型有可能是以下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;A&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以借助泛型的近似元素来约束：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;C&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;A1&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;A2&lt;/span&gt; | &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;An&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;甚至还可以在 case 上有新的写法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; {~&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;}:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在支持泛型后，&lt;strong&gt;switch 在 type 和 case 上会存在很多种可能性&lt;/strong&gt;，需要进行具体的特性支持，这个提案就是为此出现。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 为什么不支持类和继承？</title>
      <link>https://note.lican.site/posts/posts/go/class-extends/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:22 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/class-extends/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;大家在早期学习 Go 时，一旦跨过语法的阶段后。马上就会进入到一个新的纠结点，Go 不支持面向对象吗？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/a299d98d-e46c-4a6d-8362-02f957e86b10.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这门编程语言里没有类（class）、继承（extends），&lt;del&gt;没法一把搜了，面试问啥面向对象（OOP）&lt;/del&gt;？&lt;/p&gt;&#xA;&lt;p&gt;今天煎鱼就带大家一起来了解这之中的思考，Go 真的不支持吗？&lt;/p&gt;&#xA;&lt;h2 id=&#34;类和继承&#34;&gt;类和继承&lt;/h2&gt;&#xA;&lt;h3 id=&#34;类是什么&#34;&gt;类是什么&lt;/h3&gt;&#xA;&lt;p&gt;类（class）在面向对象编程中是一种面向对象计算机编程语言的构造，是创建对象的蓝图，描述了所创建的对象共同的特性和方法（via @维基百科）。&lt;/p&gt;&#xA;&lt;p&gt;例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SimpleClass&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 声明属性&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; $var &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;脑子进煎鱼了&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 声明方法&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;displayVar&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; $this&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;每个类的定义都以关键字 class 开头，后面跟着类名，后面跟着一对花括号，里面包含有类的属性与方法的定义。&lt;/p&gt;&#xA;&lt;h3 id=&#34;继承是什么&#34;&gt;继承是什么&lt;/h3&gt;&#xA;&lt;p&gt;继承是面向对象软件技术当中的一个概念，如果一个类别 B “继承自”另一个类别 A，就把这个 B 称为 “A的子类”，而把 A 称为 “B的父类别” 也可以称 “A 是 B 的超类”（via @维基百科）。&lt;/p&gt;&#xA;&lt;p&gt;例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-php&#34; data-lang=&#34;php&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 父类&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printItem&lt;/span&gt;($string)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;煎鱼1: &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; $string &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PHP_EOL&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printPHP&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;PHP is great.&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PHP_EOL&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// 子类&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Bar&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Foo&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;function&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printItem&lt;/span&gt;($string)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;echo&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;煎鱼2: &amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; $string &lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PHP_EOL&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;继承有如下两个特性：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 新关键字 any，interface 会成历史吗？</title>
      <link>https://note.lican.site/posts/posts/go/any/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:21 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/any/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;大家在看 Go1.18 泛型的代码时，不知道是否有留意到一个新的关键字 any。&lt;/p&gt;&#xA;&lt;p&gt;例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;) {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;之前没有专门提过，但有没有小伙伴以为这个关键字，是泛型代码专属的？&lt;/p&gt;&#xA;&lt;p&gt;其实不是&amp;hellip;在这次新的 Go1.18 更新中，any 是作为一个新的关键字出现，&lt;strong&gt;any 有一个真身，本质上是 interface{} 的别名&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;也就是，在常规代码中，也可以直接使用：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.(&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;进脑子煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;float64&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼进脑子了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3.1415&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼好！&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从使用层面来讲，新的关键字 any 会比 interface{} 方便不少，毕竟少打了好多个词，更快了，其实也是参照现有 rune 类型的做法。&lt;/p&gt;&#xA;&lt;p&gt;增加新关键字后的对比如下：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;长声明&lt;/th&gt;&#xA;          &lt;th&gt;短声明&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;func f[T interface{}](s []T) []T&lt;/td&gt;&#xA;          &lt;td&gt;func f[T any](s []T) []T&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;func f(a interface{})&lt;/td&gt;&#xA;          &lt;td&gt;func f(a any)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;var a interface{}&lt;/td&gt;&#xA;          &lt;td&gt;var a any&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;我们在了解他的便利性后，再从代码一致性和可读性来讲，是有些问题的，会造成一定的疑惑。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rust 内讧，PHP 主力淡出？Go：好好放假</title>
      <link>https://note.lican.site/posts/posts/go/rust-php/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:20 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/rust-php/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;现在已经是 2021 年的 Q4 季度了，许多职场人都忙的飞起，被 PPT 各种轰炸。&lt;/p&gt;&#xA;&lt;p&gt;在上周，看到几门语言的社区都发生了一些大事，煎鱼表示大受震撼，来说几句我的看法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;php-主力淡出&#34;&gt;PHP 主力淡出&lt;/h2&gt;&#xA;&lt;p&gt;在 11 月 23 日，看到 PHP 的主力开发 &lt;a href=&#34;https://twitter.com/nikita_ppv&#34; title=&#34;Nikita Popov&#34;&gt;Nikita Popov&lt;/a&gt; 在论坛上发文宣布将&lt;strong&gt;不再以专业身份从事 PHP 工作&lt;/strong&gt;，投入到 PHP 开发中的时间将会大幅度减少。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/82ba0eaf-fa69-4bee-9cbc-ec385d3b9793.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;根据 Jetbrains 分享的消息来看，可得知 Nikita Popov 在高中（2011 年）时就开始参与 PHP 开发，截止现在已有 10 年经验了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/93d9d4c9-9863-42fe-9d2c-f5ada62210c2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;他离开的原因，我看了一遍帖子，众说纷纭，业内猜测有以下两个观点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;迫于生活压力，过多精力投入维护开源项目收入不高。&lt;/li&gt;&#xA;&lt;li&gt;PHP 新版本特性受阻等原因，把精力从 PHP 转到 LLVM。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;也因此，PHP 社区加速宣布成立 PHP 基金会《&lt;a href=&#34;https://blog.jetbrains.com/phpstorm/2021/11/the-php-foundation/&#34; title=&#34;The New Life of PHP – The PHP Foundation&#34;&gt;The New Life of PHP – The PHP Foundation&lt;/a&gt;》。基金会所募集的资金，将会用于资助开发者在 PHP 上工作。&lt;/p&gt;&#xA;&lt;p&gt;基金会的宣发上，讲的很清楚，为的就是&lt;strong&gt;避免再发生失去 PHP 的主要贡献者&lt;/strong&gt;的事情发生，这影响是非常之巨大的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 新语法挺丑？最新的泛型类型约束介绍</title>
      <link>https://note.lican.site/posts/posts/go/118-constraints/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:19 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/118-constraints/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;近期我们在分享《&lt;a href=&#34;https://mp.weixin.qq.com/s/22TeQOUjf_glPX3QLPX8yw&#34;&gt;3 件与 Go 开发者有关的大小事&lt;/a&gt;》时，里面有一部分有提到 Go 泛型的约束类型语法又又又变了。&lt;/p&gt;&#xA;&lt;p&gt;在评论区里看到不少的读者朋友大呼泛型的新类型约束语法挺丑，不如原本的好&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/8e734a8f-612c-41c3-a0cd-8a5fe6eea483.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;为此，今天煎鱼就带大家来看看，为什么会发生泛型的新语法会这种改变？&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题背景&#34;&gt;问题背景&lt;/h2&gt;&#xA;&lt;p&gt;原本 @Ian Lance Taylor 设计的的泛型类型关键字如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int8&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int16&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int64&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;uint&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;uint16&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;uint32&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;uint64&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;float32&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;float64&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;complex64&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;complex128&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;看起来好像非常 “顺眼”。但在《&lt;a href=&#34;https://github.com/golang/go/issues/41716&#34; title=&#34;proposal: Go 2: sum types using interface type lists&#34;&gt;proposal: Go 2: sum types using interface type lists&lt;/a&gt;》中社区进行了热烈的讨论。&lt;/p&gt;&#xA;&lt;p&gt;认为该类型约束的关键字，过于 “模棱两可”。像是 @Damien Neil 所提出的以下两个例子。&lt;/p&gt;&#xA;&lt;p&gt;结构体的例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mustIncludeDefaultCase&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MySum&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;float64&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mustIncludeDefaultCase&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不明确的点之一，如果类型列表包含一个未导出的类型，那又应该是如何处理呢？&lt;/p&gt;&#xA;&lt;p&gt;接口的例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; { &lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int16&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;x&lt;/span&gt;.(&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int16&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  } &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你认为程序会跑进哪个 switch-case 的代码块里呢，是 int16，还是 int32？&lt;/p&gt;</description>
    </item>
    <item>
      <title>泛型是双刃剑？Go1.18 编译会慢近 20%</title>
      <link>https://note.lican.site/posts/posts/go/118-build/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:18 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/118-build/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;目前 Go 的泛型已经在稳定推进的过程，在 Go1.18 将会释出正式的第一版。不过前两天我看到 @danscales 提出的《cmd/compile: Go 1.18 compile time may be about 18% slower than Go.17 (largely from changes due to generics)》。&lt;/p&gt;&#xA;&lt;p&gt;作者表示在 Go1.18 有了泛型后，编译速度将会变慢，虽然不意外，说明副作用还是有的，升级需谨慎。&lt;/p&gt;&#xA;&lt;p&gt;以下为修整后概括的原文信息。&lt;/p&gt;&#xA;&lt;h2 id=&#34;性能分析&#34;&gt;性能分析&lt;/h2&gt;&#xA;&lt;p&gt;这个测试主要是测试 Go 泛型对 Go 编译器带来的影响，并没有输入大量的测试用例，是最简单的比较，仅代表大部分的差异。&lt;/p&gt;&#xA;&lt;p&gt;比较的内容是 Go 泛型的 -G=0 和 -G=3 模式下的编译时间。&lt;/p&gt;&#xA;&lt;p&gt;分别代表以下含义：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;-G=0 模式：默认不打开泛型的模式。&lt;/li&gt;&#xA;&lt;li&gt;-G=3 模式：打开泛型的模式。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Go 1.18 中的 -G=0 模式和 Go 1.17 模式的比较显示，由于非泛型的变化，编译器的速度可能降低了~1%（因为 -G=0 模式不支持泛型）。&lt;/p&gt;&#xA;&lt;p&gt;Go 1.18 的编译时间可能比 Go 1.17 慢 15-18%，这主要是由于实现泛型所带来的变化，也就是 Go1.18 开启泛型下，编译时间会变慢。&lt;/p&gt;&#xA;&lt;h2 id=&#34;差异在哪&#34;&gt;差异在哪&lt;/h2&gt;&#xA;&lt;p&gt;大部分的差异是由于新的编译器前端处理，因为 SSA 后端对于泛型完全没有变化。&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享 Go 最近的几件周边大小事</title>
      <link>https://note.lican.site/posts/posts/go/news115/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:17 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/news115/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近可能是因为 Q4 了，又恰逢 Go1.18 快要发布，各路 Go 语言的新消息层出不穷。&lt;/p&gt;&#xA;&lt;p&gt;今天煎鱼带大家一起来了解下最近社区发生的几件大小事，当然，我只讲一些核心的内容。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/d6f8bfde-141c-405b-8ec5-779d31b0283d.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-诞生-12-年&#34;&gt;Go 诞生 12 年&lt;/h2&gt;&#xA;&lt;p&gt;在 2021 年 11 月 10 日，是 Go 语言开源版本的 12 岁生日。Go 官方博客发表《&lt;a href=&#34;https://go.dev/blog/12years&#34; title=&#34;Twelve Years of Go&#34;&gt;Twelve Years of Go&lt;/a&gt;》。&lt;/p&gt;&#xA;&lt;p&gt;主体内容分为三块介绍：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;回顾过去一年的核心变更。&lt;/li&gt;&#xA;&lt;li&gt;展望明年的特性计划。&lt;/li&gt;&#xA;&lt;li&gt;介绍今年做的 Go 相关分享。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;回顾过去&#34;&gt;回顾过去&lt;/h3&gt;&#xA;&lt;p&gt;是对过去一年的版本更新进行说明：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go1.16：默认启用 Go modules，增加 MacOS ARM64 的支持，新支持文件系统接口和嵌入文件的特性。&lt;/li&gt;&#xA;&lt;li&gt;Go1.17：Go 函数改为基于寄存器的调用规范（提高了 5~15% 的性能），增加 Windows ARM64 支持，还引入了模块裁剪等功能。&lt;/li&gt;&#xA;&lt;li&gt;Go1.18：预计支持模糊测试（Go fuzzing）、泛型等强大的新特性。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;核心总结：今年大力推动 Go modules，提高了 Go 函数的性能，增加了更多的计算机架构支持，以及若干改进和优化（例如：TLS）。&lt;/p&gt;&#xA;&lt;p&gt;也为了推广 Go 语言，做出了更多的努力和资料培训（Gin 也因此更上了一层楼）。&lt;/p&gt;&#xA;&lt;h3 id=&#34;后续安排&#34;&gt;后续安排&lt;/h3&gt;&#xA;&lt;p&gt;我们核心关注泛型方面的消息，泛型将会是 2022 年的核心重点之一。规划如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go 1.18 中的初始版本只是泛型的开始，将会在此版本使用泛型并学习哪些有效、哪些无效。&lt;/li&gt;&#xA;&lt;li&gt;在确定泛型的 “实践” 后，会输出 “最佳实践”，并决定何时追加泛型实现到标准库和第三方库中。&lt;/li&gt;&#xA;&lt;li&gt;期待在 &lt;strong&gt;Go1.19&lt;/strong&gt;（也就是 2022.08）及更高版本将&lt;strong&gt;进一步完善泛型&lt;/strong&gt;的设计和实现，并将它们进一步整合到整体的 Go 体验中（也就是工具链等）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;核心总结：明年要继续大力推进泛型，先尝鲜，再出最佳实践，进而融合进 Go 体系中，路还比较远。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 为什么不支持函数重载和参数默认值？</title>
      <link>https://note.lican.site/posts/posts/go/func-reload/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:16 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/func-reload/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;大家在初学习 Go 语言时，带着其他语言的习惯，总是会有些不习惯，感觉非常不能理解，直打问号。&lt;/p&gt;&#xA;&lt;p&gt;其中一点就是 Go 语言不支持函数重载和参数默认值，觉得使用起来很不方便。&lt;/p&gt;&#xA;&lt;p&gt;为此，在这篇文章中煎鱼就和大家一起来了解为什么，有又会怎么样。&lt;/p&gt;&#xA;&lt;h2 id=&#34;函数重载&#34;&gt;函数重载&lt;/h2&gt;&#xA;&lt;p&gt;函数重载（function overloading），也叫方法重载。是某些编程语言（如 C++、C#、Java、Swift、Kotlin 等）具有的一项特性。&lt;/p&gt;&#xA;&lt;p&gt;该特性&lt;strong&gt;允许创建多个具有不同实现的同名函数&lt;/strong&gt;，对重载函数的调用会运行其适用于调用上下文的具体实现。&lt;/p&gt;&#xA;&lt;p&gt;从功能上来讲，就是允许一个函数调用根据上下文执行不同的方法，达到调用同一个函数名，执行不同的方法。&lt;/p&gt;&#xA;&lt;p&gt;一个简单的例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c++&#34; data-lang=&#34;c++&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#include&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Volume&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; s) {  &lt;span style=&#34;color:#75715e&#34;&gt;// 立方体的体积。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; s &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; s;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Volume&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt; r, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; h) {  &lt;span style=&#34;color:#75715e&#34;&gt;// 圆柱体的体积。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3.1415926&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; r &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; r &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static_cast&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;double&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(h);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Volume&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; l, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; b, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; h) {  &lt;span style=&#34;color:#75715e&#34;&gt;// 长方体的体积。&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; l &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; b &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; h;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;cout &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; Volume(&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;cout &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; Volume(&lt;span style=&#34;color:#ae81ff&#34;&gt;2.5&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  std&lt;span style=&#34;color:#f92672&#34;&gt;::&lt;/span&gt;cout &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; Volume(&lt;span style=&#34;color:#ae81ff&#34;&gt;100l&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;75&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述例子中，实现了 3 个同名的 &lt;code&gt;Volume&lt;/code&gt; 函数，但是 3 个函数的入参个数、类型均不一样，也代表了不同的实现目的。&lt;/p&gt;&#xA;&lt;p&gt;在主函数 &lt;code&gt;main&lt;/code&gt; 中，传入了不同的入参，编译器或运行时再进行内部处理，从程序上来看达到了调用不同函数的目的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>回归现实：Go Leader 对 1.18 泛型的期望</title>
      <link>https://note.lican.site/posts/posts/go/118-leader-generics/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:16 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/118-leader-generics/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间根据 Go 泛型的最新动态，我写了一篇《&lt;a href=&#34;https://mp.weixin.qq.com/s/yWEM2EAwv80ZUFjbKGtpNA&#34;&gt;出泛型后 API 怎么办？Go 开发者要注意了&lt;/a&gt;》文章，引发了不少小伙伴的热议。&lt;/p&gt;&#xA;&lt;p&gt;Go 核心开发团队的现任 Leader&#xA;@Russ Cox 在 golang-dev 中正式发表《&lt;a href=&#34;https://groups.google.com/g/golang-dev/c/iuB22_G9Kbo&#34;&gt;expectations for generics in Go 1.18&lt;/a&gt;》对 Go 泛型给出了 “期待”，可以认为是后续的计划了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/e4693268-eff4-4dd3-ab6b-e4c41d8728cc.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;如果不出现严重的问题，Go 1.18 将会包括对泛型的支持，并且这次泛型的支持将会是有史以来最大的一次语言变化，对以下几点有顾虑：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;最佳实践.&lt;/li&gt;&#xA;&lt;li&gt;生产经验&lt;/li&gt;&#xA;&lt;li&gt;兼容性承诺。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;接下来，煎鱼带大家一起了解 Russ Cox 发表的 Go 泛型进程，知悉官方一手消息。&lt;/p&gt;&#xA;&lt;h2 id=&#34;最佳实践&#34;&gt;最佳实践&lt;/h2&gt;&#xA;&lt;p&gt;Go 团队表示不知道使用泛型的最佳实践是什么，所以给出的官方文档将无法就何时使用泛型和何时不使用泛型给出精确、明确的答案，只可以给出粗略的指导。&lt;/p&gt;&#xA;&lt;p&gt;此处可以参考《Effective Go》的最初版本，是在不间断地写了一整年的 Go 代码后，才正式输出的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/034ab5db-f125-450d-bc97-9ea42ba94022.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;按照现有的计划，官方只会提供关于如何使用泛型的文档，暂时无法提供任何关于风格、最佳实践的规定性文档。&lt;/p&gt;&#xA;&lt;p&gt;在提供的标准库上，先是已经通过提案的 maps 和 slices库会先放到 golang.org/x/exp 中作为实验，不会保证向后兼容。待成熟后，再推广到标准库中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/b1d967a2-2ac7-4077-be2e-4d1c4d3565cb.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;可以明确，Go 泛型出来后，社区就会陆续开始百花齐放，接着有官方输出推荐方法了，历史是如此的相似。&lt;/p&gt;&#xA;&lt;h2 id=&#34;生产经验&#34;&gt;生产经验&lt;/h2&gt;&#xA;&lt;p&gt;目前 Go 团队没有关于泛型的生产经验，因此会在文档中给出明确提示，让大家在生产中使用泛型的时候应该适当谨慎。&lt;/p&gt;&#xA;&lt;p&gt;泛型出来后，会陆续涉及到大量的重写工作，但是由于现在处于中间阶段。正在重写的 Go 1.18 工具链去同时适配泛型、非泛型代码是需要时间和经验的，有一定的风险。&lt;/p&gt;&#xA;&lt;p&gt;因此泛型出来后，可能会出现一些意想不到的问题，仅在生产发现（教训）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;兼容性承诺&#34;&gt;兼容性承诺&lt;/h2&gt;&#xA;&lt;p&gt;Go1.18 会和其他 Go1.x 版本一样，保证向后兼容的承诺：不会破坏用 Go 1.18 构建的代码，包括使用泛型的代码。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么 Go 不支持循环引用？</title>
      <link>https://note.lican.site/posts/posts/go/import-cyc/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:15 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/import-cyc/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;近年来开始学习 Go 语言的开发者越来越多了。很多小伙伴在使用时，就会遇到种种不理解的问题。&lt;/p&gt;&#xA;&lt;p&gt;其中一点就是循环引入的报错：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;package command-line-arguments&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;imports github.com/eddycjy/awesome-project/a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;imports github.com/eddycjy/awesome-project/b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;imports github.com/eddycjy/awesome-project/a: import cycle not allowed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;为什么 Go 不支持循环引用呢，这就很不解了，难道还影响性能了？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/4596a6d1-9286-40b2-8074-cc43f9bbd9f4.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天煎鱼将和大家一起了解背后的原因。&lt;/p&gt;&#xA;&lt;h2 id=&#34;案例演示&#34;&gt;案例演示&lt;/h2&gt;&#xA;&lt;p&gt;做一个基本的案例 Demo，便于没接触过的同学建立初步认知。我们的程序分别有 2 个 package。&lt;/p&gt;&#xA;&lt;p&gt;package a 的代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/eddycjy/awesome-project/b&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Hello&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;package b 的代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/eddycjy/awesome-project/a&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Hello&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Hello&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再在 main.go 的文件中调用 &lt;code&gt;a.Hello(&amp;quot;脑子进煎鱼了&amp;quot;)&lt;/code&gt; 方法。&lt;/p&gt;&#xA;&lt;p&gt;一运行，就会出现如下错误提示：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;package command-line-arguments&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;imports github.com/eddycjy/awesome-project/a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;imports github.com/eddycjy/awesome-project/b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;imports github.com/eddycjy/awesome-project/a: import cycle not allowed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;错误的本质原因是 package a 引用了 package b，而 package b 又引用了 package a，造成了循环引用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>出泛型后 API 怎么办？Go 开发者要注意了</title>
      <link>https://note.lican.site/posts/posts/go/generics-apis/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:14 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/generics-apis/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间社区里一下子就爆了，主要是各大媒体引用了 Go 语言之父&#xA;Rob Pike 所提的《go: don&amp;rsquo;t change the libraries in 1.18》。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/08e47a87-cf63-4dec-b0b5-fc178a494c4c.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;很多社交媒体都做了跟进，认为 Rob Pike 是硬性的反对 Go 泛型的 API 改造！&lt;/p&gt;&#xA;&lt;p&gt;如果读者只看了标题，有可能会产生一些误解实际上其表达的意思和近期 Go 社区讨论的事项是有关联的，要一起综合来看。&lt;/p&gt;&#xA;&lt;p&gt;为此，今天煎鱼就和大家一起来理一理，看看 Go 泛型 API 的改造工程，是个怎么一回事？&lt;/p&gt;&#xA;&lt;h2 id=&#34;现状&#34;&gt;现状&lt;/h2&gt;&#xA;&lt;p&gt;马上就是 2021.11 月，连深圳都变冷了&amp;hellip;根据 Go 语言的发布周期，Go1.18 版本的发布，那就是 2022.02 月左右。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/f849c76d-e84d-43d6-96c5-b30df77f1dd9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在给到 Ian Lance Taylor、&#xA;Robert Griesemer 等大佬仅剩 3 个月的时间给大家讨论泛型细节，进一步完善实现，达到生产可用。&lt;/p&gt;&#xA;&lt;p&gt;抛出 Go 泛型的实现进度不说，现在遇到了一个比较大的问题。那就是&lt;strong&gt;实现泛型后 ”如何更新泛型的 API“&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这之中包含好几个方面，分别是：既有标准库、开源库，新标准库等。不同库之间是不同的人在维护。&lt;/p&gt;&#xA;&lt;p&gt;但这里存在一个大问题，如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/033083ef-d0ba-40f7-93d4-006e65310cf9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Russ Cox 在 9 月就提出了 ”how to update APIs for generics“ 的疑惑，当时显然这一块还没有共识。在 11 月的现在，从讨论的记录来看，&lt;strong&gt;怎么做还没有达成一个最终的明确共识&lt;/strong&gt;（初步已有，未正式答复）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>上帝视角：Go 语言设计失误，缺乏远见？</title>
      <link>https://note.lican.site/posts/posts/go/go-design/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:13 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-design/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间我有一个朋友在某乎上摸鱼时，给我甩来一个主题为《golang 设计者是如何偿还技术债的》链接。&lt;/p&gt;&#xA;&lt;p&gt;说是让我学习、围观一下社区观点，早日好修成正果，本鱼表示满脸问号。&lt;/p&gt;&#xA;&lt;p&gt;原回答如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/4bbdfe91-b98e-4ae1-bcc6-aa5fc50cd184.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;主要是以极短的话语表述 Go 语言的 “泛型、异常、channel、annotation、模块依赖” 的设计是失误的。&lt;/p&gt;&#xA;&lt;p&gt;说是没有向各种编程语言的 “最佳实践” 各取所需。&lt;/p&gt;&#xA;&lt;h2 id=&#34;那些故事&#34;&gt;那些故事&lt;/h2&gt;&#xA;&lt;p&gt;刚好煎鱼也入门 Go 没几天，偶尔翻过 issues 和 proposal，看了一点点历史事件。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/3213b564-1a53-4dcf-9b69-4f4359bd50db.png&#34; alt=&#34;图来自 Introduction to Golang&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;也从我的观点来围观一下 Go 官方这些年为特性挣扎过的那些事。&lt;/p&gt;&#xA;&lt;p&gt;涉及：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;泛型。&lt;/li&gt;&#xA;&lt;li&gt;错误处理。&lt;/li&gt;&#xA;&lt;li&gt;依赖管理。&lt;/li&gt;&#xA;&lt;li&gt;注解。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;泛型&#34;&gt;泛型&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;为什么 Go 语言这么久都没有泛型&lt;/strong&gt;，是不是 Go 官方不够 “聪明”，抄作业都不会抄。这显然是不对的。&lt;/p&gt;&#xA;&lt;p&gt;有如下几点原因：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;泛型本质上并不是绝对的必需品。&lt;/li&gt;&#xA;&lt;li&gt;泛型不是 Go 语言的早期目标。&lt;/li&gt;&#xA;&lt;li&gt;其他 feature 更重要，把精力放在这些上面，Go 团队人力很有限的。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h4 id=&#34;历史尝试&#34;&gt;历史尝试&lt;/h4&gt;&#xA;&lt;p&gt;在以往的尝试中，Go 团队有人进行过不少的泛型 proposal 试验。基本时间线（via @changkun）如下：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;时间&lt;/th&gt;&#xA;          &lt;th&gt;作者&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Type Functions&lt;/td&gt;&#xA;          &lt;td&gt;2010年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Generalized Types&lt;/td&gt;&#xA;          &lt;td&gt;2011年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Generalized Types v2&lt;/td&gt;&#xA;          &lt;td&gt;2013年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Type Parameters&lt;/td&gt;&#xA;          &lt;td&gt;2013年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;go:generate&lt;/td&gt;&#xA;          &lt;td&gt;2014年&lt;/td&gt;&#xA;          &lt;td&gt;Rob Pike&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;First Class Types&lt;/td&gt;&#xA;          &lt;td&gt;2015年&lt;/td&gt;&#xA;          &lt;td&gt;Bryan C.Mills&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Contracts&lt;/td&gt;&#xA;          &lt;td&gt;2018年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor, Robert Griesemer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Contracts&lt;/td&gt;&#xA;          &lt;td&gt;2019年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor, Robert Griesemer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Redundancy in Contracts(2019)&amp;rsquo;s Design&lt;/td&gt;&#xA;          &lt;td&gt;2019年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor, Robert Griesemer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Constrained Type Parameters(2020, v1)&lt;/td&gt;&#xA;          &lt;td&gt;2020年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor, Robert Griesemer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Constrained Type Parameters(2020, v2)&lt;/td&gt;&#xA;          &lt;td&gt;2020年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor, Robert Griesemer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Constrained Type Parameters(2020, v3)&lt;/td&gt;&#xA;          &lt;td&gt;2020年&lt;/td&gt;&#xA;          &lt;td&gt;Ian Lance Taylor, Robert Griesemer&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;我们观察一下，10 年过去了，Ian Lance Taylor 依然在开展泛型提案，持续地在思考着 Go 泛型。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 和 Golang 有什么关系？</title>
      <link>https://note.lican.site/posts/posts/go/go-golang/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:12 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-golang/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近天气也冷了，掐指一算是招聘季了，无论是校招、社招、HR、面试官们都蠢蠢欲动。这不，我有一个朋友的 HR 朋友都有起名困难了，一看 Go 语言的工作说明（Job Description），发现各有不同。&lt;/p&gt;&#xA;&lt;p&gt;如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/629d4aaa-bb01-4e2b-9a43-d671200da099.png&#34; alt=&#34;来自某招聘网站&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;仔细一看，有叫 Go 的，也有叫 Golang，还有叫 GO 的。好家伙，Go 语言有这么多个别名，甚至某乎都讨论了起来。到底叫什么是正确的？&lt;/p&gt;&#xA;&lt;p&gt;为此，今天就由煎鱼带大家理一理，了解这背后的关系。&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-官方定义&#34;&gt;Go 官方定义&lt;/h2&gt;&#xA;&lt;p&gt;从网上的资料来看，大家对 Go 的名字还是比较关注的，对于 Go 团队来讲，仿佛经常被问。例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;“Go 和 Golang 的关系是什么？”&lt;/li&gt;&#xA;&lt;li&gt;“Go、Golang、GO 哪个对？”&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;甚至在之前探讨 Go2 草案时，也有人开始起 Go2 的名字了，纠结是要叫 “golang2”，还是 “go2lang”：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/7608f5a1-9e77-45b2-a552-a7b7c32ad100.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;其实这是错误的。在 Go FAQ 中有明确的回答这个问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/bdb43d48-f5c1-41bb-8495-7bbfc2fc60a6.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这一门语言称为 “Go”，不叫 “Golang”，也不叫 “GO”。“golang” 只是网站的地址，而不是语言的名称。&lt;/p&gt;&#xA;&lt;p&gt;同时 “GO” 的语言名称叫法也是错误的，虽然官方上的 Logo 是 “GO”：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/67b022a9-49de-4349-861e-77dd25367ac6.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;但这显然只是设计师层面的美观考量，并不是这一门语言的标准定义。&lt;/p&gt;&#xA;&lt;p&gt;因此&lt;strong&gt;这一门语言叫做 “Go” 语言&lt;/strong&gt;，这是正确的，也得到官方认证的，也不曾改变过。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么会有-golang&#34;&gt;为什么会有 Golang&lt;/h2&gt;&#xA;&lt;p&gt;但可能又有小伙伴疑惑了，那为什么 “Golang” 这个别名，如此之火。到底是为什么？&lt;/p&gt;&#xA;&lt;p&gt;这里一共有三点原因，分别是：站点地址（Go FAQ 提到）、搜索引擎、社区和论坛、语言重名。&lt;/p&gt;&#xA;&lt;h3 id=&#34;go-站点地址&#34;&gt;Go 站点地址&lt;/h3&gt;&#xA;&lt;p&gt;Go 团队所期望的 &lt;a href=&#34;https://go.org&#34;&gt;https://go.org&lt;/a&gt; 早就被注册，从网站的底部标识来看，2008 年起建站：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go：我有注解，Java：不，你没有！</title>
      <link>https://note.lican.site/posts/posts/go/annotation/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:11 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/annotation/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;作为一位 Go 程序员，你会发现身边的同事大多都拥有其他语言的编写经验。那势必就会遇到一点，要把新学到的知识和以前的知识建立连接。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/050a9802-1ca2-4634-859d-325a09d418c5.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;特殊在于，Go 有些特性是其他语言有，他没有的。最经典的就是 N 位 Java 同学寻找 Go 语言的注解在哪里，总要解释。&lt;/p&gt;&#xA;&lt;p&gt;为此，今天煎鱼就带大家了解一下 Go 语言的注解的使用和情况。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是注解&#34;&gt;什么是注解&lt;/h2&gt;&#xA;&lt;h3 id=&#34;了解历史&#34;&gt;了解历史&lt;/h3&gt;&#xA;&lt;p&gt;注解（Annotation）最早出现自何处，翻了一圈并没有找到。但可以明确，在注解的使用中，Java 注解最为经典，为了便于理解，因此我们基于 Java 做初步的注解理解。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/3c9e2434-c5f4-4d7a-bd2d-a8b582b570c8.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在 2002 年，JSR-175 提出了 《&lt;a href=&#34;https://jcp.org/en/jsr/detail?id=175&#34;&gt;A Metadata Facility for the Java Programming Language&lt;/a&gt;》，也就是为 Java 编程语言提供元数据工具。&lt;/p&gt;&#xA;&lt;p&gt;这就是现在使用最广泛地注解（Annotation）的来源。&#xA;示例如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @annotation1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @annotation2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Hello&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在格式上均以 “@” 作为注解标识来使用。&lt;/p&gt;&#xA;&lt;h3 id=&#34;注解例子&#34;&gt;注解例子&lt;/h3&gt;&#xA;&lt;p&gt;摘抄自 @wikipedia 的一个注解例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;//等同于 @Edible(value = true)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;@Edible&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Item item &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Carrot();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;@interface&lt;/span&gt; Edible {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;boolean&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;default&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;@Author&lt;/span&gt;(first &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Oompah&amp;#34;&lt;/span&gt;, last &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Loompah&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Book book &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Book();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;@interface&lt;/span&gt; Author {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    String &lt;span style=&#34;color:#a6e22e&#34;&gt;first&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    String &lt;span style=&#34;color:#a6e22e&#34;&gt;last&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 该标注可以在运行时通过反射访问。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;@Retention&lt;/span&gt;(RetentionPolicy.&lt;span style=&#34;color:#a6e22e&#34;&gt;RUNTIME&lt;/span&gt;) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 该标注只用于类内方法。&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;@Target&lt;/span&gt;({ElementType.&lt;span style=&#34;color:#a6e22e&#34;&gt;METHOD&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;@interface&lt;/span&gt; Tweezable {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述例子中，通过注解去做了一系列的定义、声明、赋值等。若是对语言既有注解不熟，或是做的比较复杂的注解，就会有一定的理解成本。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么 Go 语言把类型放在后面？</title>
      <link>https://note.lican.site/posts/posts/go/type-after/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:10 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/type-after/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间看到大家在吵一个话题，那就是 Go 语言的类型声明，抠知识抠的非常细了，就是为什么他要放在后面。&lt;/p&gt;&#xA;&lt;p&gt;示例代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;其实在早年 Go 官方估计已经被问烦了，写过一篇《&lt;a href=&#34;https://go.dev/blog/declaration-syntax&#34; title=&#34;Go&#39;s Declaration Syntax&#34;&gt;Go&amp;rsquo;s Declaration Syntax&lt;/a&gt;》来具体介绍和说明情况。&lt;/p&gt;&#xA;&lt;p&gt;为此煎鱼将参考并结合这篇官方资料，带大家一起了解为什么 Go 如此的 “与众不同” ，为什么要把类型放在后面。&lt;/p&gt;&#xA;&lt;h2 id=&#34;类型前置&#34;&gt;类型前置&lt;/h2&gt;&#xA;&lt;p&gt;在业内目前有不少知名语言，也采取的是在声明变量类型时，把类型定义在名字前面。像是 C、C++、C#、Java 等：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; x;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; x &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基本的格式定义：&amp;lt;data_type&amp;gt; &amp;lt;variable_list&amp;gt;;。&lt;/p&gt;&#xA;&lt;p&gt;上面的声明是一个简单的例子，如果更复杂一些，Go 官方还给出了著名的函数指针的例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;fp)(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; a, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; b);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;更进一步，如果返回值也是个函数指针类型，就会变成：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;fp)(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;)(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;), &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;))(&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这已经很难看出来是个 fp 的声明了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;类型后置&#34;&gt;类型后置&lt;/h2&gt;&#xA;&lt;p&gt;前面所举例的类型前置的编程语言，很多都是 C 系列中的一者。类型后置的代表，分别有：Go、Rust、Scala、Kotlin 等。&lt;/p&gt;&#xA;&lt;p&gt;其实在很多类型后置的编程语言种，会采取变量名+冒号+类型的方式出现。就像 Rust 一样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-rust&#34; data-lang=&#34;rust&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;let&lt;/span&gt; x: &lt;span style=&#34;color:#66d9ef&#34;&gt;i32&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基本的格式定义：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;x: int&#xA;p: pointer to int&#xA;a: array[3] of int&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Go 官方参照了这类类型后置的设计，并且为了简洁，进一步去掉了冒号和一些关键字，变成：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们再看回前面 fp 的声明的例子：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 切片导致内存泄露，被坑两次了！</title>
      <link>https://note.lican.site/posts/posts/go/slice-leak/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:09 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/slice-leak/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间在我的 Go 读者群里，有小伙伴们在纠结切片（slice）的问题，我写了这篇《&lt;a href=&#34;https://mp.weixin.qq.com/s/kEQI74ge6VhvNEr1d3JW-Q&#34;&gt;Go 切片这道题，吵了一个下午！&lt;/a&gt;》，引起了一拨各种讨论，还是比较欣慰的。&lt;/p&gt;&#xA;&lt;p&gt;这不，有小伙伴给我提出了新的题材：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/a97e5e6d-b58d-44f2-b858-b9ca12780180.png&#34; alt=&#34;来自读者微信提问&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;提出的是 Go 中很容易踩坑的切片内存泄露问题。作为宠粉的煎鱼肯定不会放过，争取让大家都避开这个 “坑”。&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章，就由煎鱼带大家来了解这个问题：Go 切片可能可以怎么泄露法？&lt;/p&gt;&#xA;&lt;h2 id=&#34;切片泄露的可能&#34;&gt;切片泄露的可能&lt;/h2&gt;&#xA;&lt;p&gt;在业务代码的编写上，我们经常会接受来自外部的接口数据，再把他插入到对应的数据结构中去，再进行下一步的业务聚合、裁剪、封装、处理。&lt;/p&gt;&#xA;&lt;p&gt;像在 PHP 语言，常常会放到数组（array）中。在 Go 语言，会放到切片（slice）中。因此在 Go 的切片处理逻辑中，常常会涉及到如下类似的动作。&lt;/p&gt;&#xA;&lt;p&gt;示例代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;[:&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;仔细想想，&lt;strong&gt;这段程序有没有问题&lt;/strong&gt;，是否存在内存泄露的风险？&lt;/p&gt;&#xA;&lt;p&gt;答案是：有的。有明确的切片内存泄露的可能性和风险。&lt;/p&gt;&#xA;&lt;h2 id=&#34;切片底层结构&#34;&gt;切片底层结构&lt;/h2&gt;&#xA;&lt;p&gt;可能有些小伙伴会疑惑，怎么就有问题了，是哪里有问题？&lt;/p&gt;&#xA;&lt;p&gt;这里就得复习一下切片的底层基本数据结构了，切片在运行时的表现是 SliceHeader 结构体，定义如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SliceHeader&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Data&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Len&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Cap&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Data：指向具体的底层数组。&lt;/li&gt;&#xA;&lt;li&gt;Len：代表切片的长度。&lt;/li&gt;&#xA;&lt;li&gt;Cap：代表切片的容量。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;要点是：切片真正存储数据的地方，是一个数组。切片的 Data 属性中&lt;strong&gt;存储的是指向所引用的数组指针地址&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背后的原因&#34;&gt;背后的原因&lt;/h2&gt;&#xA;&lt;p&gt;在上述案例中，我们有一个包全局变量 a，共有 2 个切片 a 和 b，截取了 b 的一部分赋值给了 a，两者存在着关联。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 什么时候会触发 GC？</title>
      <link>https://note.lican.site/posts/posts/go/when-gc/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:08 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/when-gc/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;Go 语言作为一门新语言，在早期经常遭到唾弃的就是在垃圾回收（下称：GC）机制中 STW（Stop-The-World）的时间过长。&lt;/p&gt;&#xA;&lt;p&gt;那么这个时候，我们又会好奇一点，作为 STW 的起始，Go 语言中什么时候才会触发 GC 呢？&lt;/p&gt;&#xA;&lt;p&gt;今天就由煎鱼带大家一起来学习研讨一轮。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是-gc&#34;&gt;什么是 GC&lt;/h2&gt;&#xA;&lt;p&gt;在计算机科学中，垃圾回收（GC）是一种自动管理内存的机制，垃圾回收器会去尝试回收程序不再使用的对象及其占用的内存。&lt;/p&gt;&#xA;&lt;p&gt;最早 John McCarthy 在 1959 年左右发明了垃圾回收，以简化 Lisp 中的手动内存管理的机制（来自 @wikipedia）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/09425faf-f521-43a9-a7fa-1db3c5163914.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要-gc&#34;&gt;为什么要 GC&lt;/h2&gt;&#xA;&lt;p&gt;手动管理内存挺麻烦，管错或者管漏内存也很糟糕，将会直接导致程序不稳定（持续泄露）甚至直接崩溃。&lt;/p&gt;&#xA;&lt;h2 id=&#34;gc-触发场景&#34;&gt;GC 触发场景&lt;/h2&gt;&#xA;&lt;p&gt;GC 触发的场景主要分为两大类，分别是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;系统触发：运行时自行根据内置的条件，检查、发现到，则进行 GC 处理，维护整个应用程序的可用性。&lt;/li&gt;&#xA;&lt;li&gt;手动触发：开发者在业务代码中自行调用 &lt;code&gt; runtime.GC&lt;/code&gt; 方法来触发 GC 行为。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;系统触发&#34;&gt;系统触发&lt;/h3&gt;&#xA;&lt;p&gt;在系统触发的场景中，Go 源码的 &lt;code&gt;src/runtime/mgc.go&lt;/code&gt; 文件，明确标识了 GC 系统触发的三种场景，分别如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcTriggerHeap&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gcTriggerKind&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;iota&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcTriggerTime&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gcTriggerCycle&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;gcTriggerHeap：当所分配的堆大小达到阈值（由控制器计算的触发堆的大小）时，将会触发。&lt;/li&gt;&#xA;&lt;li&gt;gcTriggerTime：当距离上一个 GC 周期的时间超过一定时间时，将会触发。&#xA;-时间周期以 &lt;code&gt;runtime.forcegcperiod&lt;/code&gt; 变量为准，默认 2 分钟。&lt;/li&gt;&#xA;&lt;li&gt;gcTriggerCycle：如果没有开启 GC，则启动 GC。&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在手动触发的 &lt;code&gt;runtime.GC&lt;/code&gt; 方法中涉及。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;手动触发&#34;&gt;手动触发&lt;/h3&gt;&#xA;&lt;p&gt;在手动触发的场景下，Go 语言中仅有 &lt;code&gt;runtime.GC&lt;/code&gt; 方法可以触发，也就没什么额外的分类的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go map 如何缩容？</title>
      <link>https://note.lican.site/posts/posts/go/map-reset/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:07 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map-reset/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天看到 Go 圈子的著名股神（不是我&amp;hellip;），在归类中简单的提到了 Go 语言中 map 的缩容的描述，这让我对其产生了兴趣，想要来一探究竟。&lt;/p&gt;&#xA;&lt;p&gt;我们常常喊扩缩容，扩缩容，但社区里都是清一色分析扩容机制，Go 面试官也都是卷 Go 语言 map 的扩容机制&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;在 &lt;strong&gt;Go 语言中的 map 缩容机制是怎么做的&lt;/strong&gt;呢，今天就由煎鱼带大家一起研讨围观一轮。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本分析&#34;&gt;基本分析&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 底层源码 src/runtime/map.go 中，扩缩容的处理方法是 grow 为前缀的方法来处理的。&lt;/p&gt;&#xA;&lt;p&gt;其中扩缩容涉及到的是插入元素的操作，对应 mapassign 方法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mapassign&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;maptype&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hmap&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; !&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;growing&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;overLoadFactor&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tooManyOverflowBuckets&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;noverflow&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;hashGrow&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;t&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;goto&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;again&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;hmap&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;growing&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;h&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;oldbuckets&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;overLoadFactor&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;bucketCnt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; uintptr(&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;) &amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;loadFactorNum&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;bucketShift&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;loadFactorDen&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tooManyOverflowBuckets&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;noverflow&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint16&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt; &amp;gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;noverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; uint16(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;核心看到针对扩缩容的判断逻辑：&lt;/p&gt;</description>
    </item>
    <item>
      <title>面试官：为什么 Go 的负载因子是 6.5？</title>
      <link>https://note.lican.site/posts/posts/go/map-65/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:07 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map-65/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近我有一个朋友，在网上看到一个有趣的段子，引发了我一些兴趣。&lt;/p&gt;&#xA;&lt;p&gt;如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/e81547d8-8de7-4310-a62f-e59ce4c0def2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;听说是在最后的闲聊、吹水、聊人生、乱扯环节了，不是在技术环节了，所以大家也不用太在意什么技术评估法则（别杠）。&lt;/p&gt;&#xA;&lt;p&gt;煎鱼作为一名技术号主，看到这里的 6.5，就想给大家挖一挖，这到底是何物，和大家一同学习和增长知识！&lt;/p&gt;&#xA;&lt;h2 id=&#34;65-是什么&#34;&gt;6.5 是什么&lt;/h2&gt;&#xA;&lt;p&gt;实际上在 Go 语言中，就存在 6.5 这一概念，与 map 存在直接关系，因此我们需要先了解 map 的基本数据结构，再介绍 6.5 的背景和由来。&lt;/p&gt;&#xA;&lt;p&gt;开始学习 6.5 吧！&lt;/p&gt;&#xA;&lt;h3 id=&#34;了解-map-底层&#34;&gt;了解 map 底层&lt;/h3&gt;&#xA;&lt;p&gt;我以前在写《&lt;a href=&#34;https://eddycjy.com/posts/go/map/2019-03-05-map-access/&#34;&gt;深入理解 Go map：初始化和访问元素&lt;/a&gt;》时有介绍过 map 的基础数据结构。&lt;/p&gt;&#xA;&lt;p&gt;基本结构如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/8679a84f-0d21-485d-b55f-dc9d70d5ddd1.png&#34; alt=&#34;map 基本数据结构&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;其中重要的一个基本单位是 hmap：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hmap&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;flags&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;         &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;noverflow&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint16&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;hash0&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;uint32&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;buckets&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;oldbuckets&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nevacuate&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;extra&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mapextra&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mapextra&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;overflow&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;[]&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;oldoverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;[]&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nextOverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;count：map 的大小，也就是 len() 的值，代指 map 中的键值对个数。&lt;/li&gt;&#xA;&lt;li&gt;flags：状态标识，主要是 goroutine 写入和扩容机制的相关状态控制。并发读写的判断条件之一就是该值。&lt;/li&gt;&#xA;&lt;li&gt;B：&lt;strong&gt;桶，最大可容纳的元素数量，值为 负载因子（默认 6.5） * 2 ^ B，是 2 的指数&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;noverflow：溢出桶的数量。&lt;/li&gt;&#xA;&lt;li&gt;hash0：哈希因子。&lt;/li&gt;&#xA;&lt;li&gt;buckets：保存当前桶数据的指针地址（指向一段连续的内存地址，主要存储键值对数据）。&lt;/li&gt;&#xA;&lt;li&gt;oldbuckets，保存旧桶的指针地址。&lt;/li&gt;&#xA;&lt;li&gt;nevacuate：迁移进度。&lt;/li&gt;&#xA;&lt;li&gt;extra：原有 buckets 满载后，会发生扩容动作，在 Go 的机制中使用了增量扩容，如下为细项：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;overflow 为 hmap.buckets （当前）溢出桶的指针地址。&lt;/li&gt;&#xA;&lt;li&gt;oldoverflow 为 hmap.oldbuckets （旧）溢出桶的指针地址。&lt;/li&gt;&#xA;&lt;li&gt;nextOverflow 为空闲溢出桶的指针地址。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我们关注到 hmap 的 B 字段，其值就是 6.5，他就是我们在苦苦寻找的 6.5，但他又是什么呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 切片这道题，吵了一个下午！</title>
      <link>https://note.lican.site/posts/posts/go/slice-discuss/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:06 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/slice-discuss/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天听到咱 Go 读者交流群里的小伙伴私聊我，表示他们在群里一直在讨论一个问题 slice 相关的问题，众说纷纭。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/f2cedcdf-8f6e-42f9-9009-6f1ee0f74f91.png&#34; alt=&#34;来自煎鱼的聊天记录&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天和各位小伙伴们一起来研究一下，避免后续又踩一遍坑，共同进步！&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题代码&#34;&gt;问题代码&lt;/h2&gt;&#xA;&lt;p&gt;引起群内大范围讨论的代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make([]&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;appenFunc&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; = append(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;appenFunc&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;[:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你认为程序的输出结果是什么？&lt;/p&gt;&#xA;&lt;p&gt;是如下的答案：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[]&#xA;[10 20 30]&#xA;[]&#xA;[]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;对吗？&lt;/p&gt;&#xA;&lt;p&gt;看上去很有道理，但错了。正确的结果是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[]&#xA;[10 20 30]&#xA;[]&#xA;[10 20 30 0 0 0 0 0 0 0]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这下可把大家整懵了，为什么输出 &lt;code&gt;sl&lt;/code&gt; 和 &lt;code&gt;sl[:10]&lt;/code&gt; 的结果差别这么大，这与预期的输出结果不一致。&lt;/p&gt;&#xA;&lt;p&gt;群内小伙伴的问题更明确了，疑惑点是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;)     &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;[:&lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;]) &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上述代码中，&lt;strong&gt;为什么第一个 &lt;code&gt;sl&lt;/code&gt; 打印结果是空的，第二个 &lt;code&gt;sl&lt;/code&gt; 给索引位置就能打印出来&lt;/strong&gt;？&lt;/p&gt;&#xA;&lt;p&gt;也有小伙伴不断在尝试 &lt;code&gt;sl[:10]&lt;/code&gt; 以外的输出，有没有因为一些边界值改变而导致不行。&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;sl&lt;/span&gt;[:])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你认为这个对应的输出结果是什么？&lt;/p&gt;</description>
    </item>
    <item>
      <title>会诱发 Goroutine 挂起的 27 个原因</title>
      <link>https://note.lican.site/posts/posts/go/goroutine-27/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:06 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/goroutine-27/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;上个月面向读者的提问，我们针对 goroutine 泄露中都会看到的大头 runtime.gopark 函数进行了学习和了解，输出了 《&lt;a href=&#34;https://mp.weixin.qq.com/s/x6Kzn7VA1wUz7g8txcBX7A&#34;&gt;Goroutine 一泄露就看到他，这是个什么？&lt;/a&gt;》。&lt;/p&gt;&#xA;&lt;p&gt;有小伙伴提到，虽然我们知道了 runtime.gopark 函数的缘起和内在，但其实没有提到 &lt;strong&gt;runtime.gopark 的诱发因素，这是我们日常编码中需要关注的&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章就和大家一起围观 gopark 的 27 个诱发场景。为了方便阅读，我们会根据分类进行说明。&lt;/p&gt;&#xA;&lt;h3 id=&#34;第一部分&#34;&gt;第一部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonZero&lt;/td&gt;&#xA;          &lt;td&gt;无&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGCAssistMarking&lt;/td&gt;&#xA;          &lt;td&gt;GC assist marking&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonIOWait&lt;/td&gt;&#xA;          &lt;td&gt;IO wait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonZero：无正式解释，从使用情况来看。主要在 sleep 和 lock 的 2 个场景中使用。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonGCAssistMarking：GC 辅助标记阶段会使得阻塞等待。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonIOWait：IO 阻塞等待时，例如：网络请求等。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第二部分&#34;&gt;第二部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonChanReceiveNilChan&lt;/td&gt;&#xA;          &lt;td&gt;chan receive (nil chan)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonChanSendNilChan&lt;/td&gt;&#xA;          &lt;td&gt;chan send (nil chan)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonChanReceiveNilChan：对未初始化的 channel 进行读操作。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonChanSendNilChan：对未初始化的 channel 进行写操作。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第三部分&#34;&gt;第三部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonDumpingHeap&lt;/td&gt;&#xA;          &lt;td&gt;dumping heap&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGarbageCollection&lt;/td&gt;&#xA;          &lt;td&gt;garbage collection&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGarbageCollectionScan&lt;/td&gt;&#xA;          &lt;td&gt;garbage collection scan&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonDumpingHeap：对 Go Heap 堆 dump 时，这个的使用场景仅在 runtime.debug 时，也就是常见的 pprof 这一类采集时阻塞。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonGarbageCollection：在垃圾回收时，主要场景是 GC 标记终止（GC Mark Termination）阶段时触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonGarbageCollectionScan：在垃圾回收扫描时，主要场景是 GC 标记（GC Mark）扫描 Root 阶段时触发。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第四部分&#34;&gt;第四部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonPanicWait&lt;/td&gt;&#xA;          &lt;td&gt;panicwait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonSelect&lt;/td&gt;&#xA;          &lt;td&gt;select&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonSelectNoCases&lt;/td&gt;&#xA;          &lt;td&gt;select (no cases)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonPanicWait：在 main goroutine 发生 panic 时，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonSelect：在调用关键字 select 时会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonSelectNoCases：在调用关键字 select 时，若一个 case 都没有，会直接触发。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第五部分&#34;&gt;第五部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGCAssistWait&lt;/td&gt;&#xA;          &lt;td&gt;GC assist wait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGCSweepWait&lt;/td&gt;&#xA;          &lt;td&gt;GC sweep wait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGCScavengeWait&lt;/td&gt;&#xA;          &lt;td&gt;GC scavenge wait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonGCAssistWait：GC 辅助标记阶段中的结束行为，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonGCSweepWait：GC 清扫阶段中的结束行为，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonGCScavengeWait：GC scavenge 阶段的结束行为，会触发。GC Scavenge 主要是新空间的垃圾回收，是一种经常运行、快速的 GC，负责从新空间中清理较小的对象。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第六部分&#34;&gt;第六部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonChanReceive&lt;/td&gt;&#xA;          &lt;td&gt;chan receive&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonChanSend&lt;/td&gt;&#xA;          &lt;td&gt;chan send&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonFinalizerWait&lt;/td&gt;&#xA;          &lt;td&gt;finalizer wait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonChanReceive：在 channel 进行读操作，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonChanSend：在 channel 进行写操作，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonFinalizerWait：在 finalizer 结束的阶段，会触发。在 Go 程序中，可以通过调用 &lt;code&gt;runtime.SetFinalizer&lt;/code&gt; 函数来为一个对象设置一个终结者函数。这个行为对应着结束阶段造成的回收。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第七部分&#34;&gt;第七部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonForceGCIdle&lt;/td&gt;&#xA;          &lt;td&gt;force gc (idle)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonSemacquire&lt;/td&gt;&#xA;          &lt;td&gt;semacquire&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonSleep&lt;/td&gt;&#xA;          &lt;td&gt;sleep&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonForceGCIdle：强制 GC（空闲时间）结束时，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonSemacquire：信号量处理结束时，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonSleep：经典的 sleep 行为，会触发。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第八部分&#34;&gt;第八部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonSyncCondWait&lt;/td&gt;&#xA;          &lt;td&gt;sync.Cond.Wait&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonTimerGoroutineIdle&lt;/td&gt;&#xA;          &lt;td&gt;timer goroutine (idle)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonTraceReaderBlocked&lt;/td&gt;&#xA;          &lt;td&gt;trace reader (blocked)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonSyncCondWait：结合 &lt;code&gt;sync.Cond&lt;/code&gt; 用法能知道，是在调用 &lt;code&gt;sync.Wait&lt;/code&gt; 方法时所触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonTimerGoroutineIdle：与 Timer 相关，在没有定时器需要执行任务时，会触发。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonTraceReaderBlocked：与 Trace 相关，ReadTrace会返回二进制跟踪数据，将会阻塞直到数据可用。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第九部分&#34;&gt;第九部分&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;标识&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonWaitForGCCycle&lt;/td&gt;&#xA;          &lt;td&gt;wait for GC cycle&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonGCWorkerIdle&lt;/td&gt;&#xA;          &lt;td&gt;GC worker (idle)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonPreempted&lt;/td&gt;&#xA;          &lt;td&gt;preempted&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;waitReasonDebugCall&lt;/td&gt;&#xA;          &lt;td&gt;debug call&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;waitReasonWaitForGCCycle：等待 GC 周期，会休眠造成阻塞。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonGCWorkerIdle：GC Worker 空闲时，会休眠造成阻塞。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonPreempted：发生循环调用抢占时，会会休眠等待调度。&lt;/li&gt;&#xA;&lt;li&gt;waitReasonDebugCall：调用 GODEBUG 时，会触发。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;今天这篇文章是对开头 runtime.gopark 函数的详解文章的一个补充，我们能够对此了解到其诱发的因素。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.17 新特性，优化抛出的错误堆栈</title>
      <link>https://note.lican.site/posts/posts/go/117-errorstack/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:05 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/117-errorstack/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;平时在日常工程中，我们常常会用到异常恐慌（panic）的记录和追踪。最常见的就是，线上 panic 了之后，我们总想从中找到一些蛛丝马迹。&lt;/p&gt;&#xA;&lt;p&gt;我们很多人是看 panic 是看他的调用堆栈。然后就开始猜，看代码。猜测是不是哪里写的有问题，就想知道 panic 是由什么参数引起的？&lt;/p&gt;&#xA;&lt;p&gt;因为知道了诱发的参数，排查问题就非常方便了。为此&lt;strong&gt;在 Go1.17，官方对这块的调用堆栈信息展示进行了优化&lt;/strong&gt;，使其可读性更友好。&lt;/p&gt;&#xA;&lt;h2 id=&#34;案例&#34;&gt;案例&lt;/h2&gt;&#xA;&lt;p&gt;结合我们平时所使用的 panic 案例。如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;example&lt;/span&gt;(make([]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//go:noinline&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;example&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;str&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;panic(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;运行结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go&#xA;panic: 脑子进煎鱼了&#xA;&#xA;goroutine 1 [running]:&#xA;main.example(0xc000032758, 0x1, 0x2, 0x1073d11, 0x6, 0x3, 0xc000102058, 0x1013201)&#xA;&#x9;/Users/eddycjy/go-application/awesomeProject/main.go:9 +0x39&#xA;main.main()&#xA;&#x9;/Users/eddycjy/go-application/awesomeProject/main.go:4 +0x68&#xA;exit status 2&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我们函数的入参是：&lt;code&gt;[]string、string、int&lt;/code&gt;，核心关注到 &lt;code&gt;main.example&lt;/code&gt; 方法的调用堆栈信息：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;example&lt;/span&gt;(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0xc000032758&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x1&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x2&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x1073d11&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x6&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x3&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0xc000102058&lt;/span&gt;, &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x1013201&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;明明只是函数三个参数，却输出了一堆，对应起来非常的不清晰。&lt;/p&gt;&#xA;&lt;p&gt;其实际对应是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;slice：0xc000032758、0x1、0x2。&lt;/li&gt;&#xA;&lt;li&gt;string：0x1073d11、0x6。&lt;/li&gt;&#xA;&lt;li&gt;int：0x3。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这里存在的问题是，看调用堆栈的人，还得必须了解基本数据结构（例如：slice、string、int 等），他才知道每个函数入参他对应拥有几个字段，才能知道其内存布局的结构，有一点麻烦。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.17 新特性，凭什么提速 5~10%？</title>
      <link>https://note.lican.site/posts/posts/go/117-performance/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:04 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/117-performance/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在 Go1.17 发布后，我们惊喜的发现 Go 语言他又又又优化了，编译器改进后产生了约 5% 的性能提升，也没有什么破坏性修改，保证了向前兼容。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/c39ffb33-4afd-4537-a172-4919be7975a4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;他做了些什么呢，好像没怎么看到有人提起。为此今天煎鱼带大家来解读两新提案：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;《&lt;a href=&#34;https://go.googlesource.com/proposal/+/master/design/40724-register-calling.md&#34; title=&#34;Proposal: Register-based Go calling convention&#34;&gt;Proposal: Register-based Go calling convention&lt;/a&gt;》&lt;/li&gt;&#xA;&lt;li&gt;《&lt;a href=&#34;https://go.googlesource.com/proposal/+/master/design/27539-internal-abi.md&#34; title=&#34;Proposal: Create an undefined internal calling convention&#34;&gt;Proposal: Create an undefined internal calling convention&lt;/a&gt;》&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;本文会基于提案讲解和拆解，毕竟分享新知识肯定要从官方资料作为事实基准出发。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在以往的 Go 版本中，Go 的调用约定简单且几乎跨平台通用，其原因在于选用了基于 Plan9 ABI 的堆栈调用约定，也就是&lt;strong&gt;函数的参数和返回值都是通过堆栈上来进行传递&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这里我们一共提到了 Plan9 和 ABI，这是两个很关键的理念：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Plan9：Go 语言所使用的汇编器，Rob Pike 是贝尔实验室的猛人。&lt;/li&gt;&#xA;&lt;li&gt;ABI：Application Binary Interface（应用程序二进制接口），ABI 包含了应用程序在操作系统下运行时必须遵守的编程约定（例如：二进制接口）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;该方案的优缺点如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;优点：实现简单，简化了实现成本。&lt;/li&gt;&#xA;&lt;li&gt;缺点：性能方面付出了不少的代价。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;按我理解，在 Go 语言初创时期，采取先简单实现，跑起来再说。也合理，性能倒不是一个 TOP1 需求。&lt;/p&gt;&#xA;&lt;h2 id=&#34;go117-优化&#34;&gt;Go1.17 优化&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是调用惯例&#34;&gt;什么是调用惯例&lt;/h3&gt;&#xA;&lt;p&gt;在新版本的优化中，提到了调用惯例（calling convention）的概念，指的是&lt;strong&gt;调用方和被调用方对函数调用的共识约定&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这些共识包含：函数的参数、返回值、参数传递顺序、传递方式等。&lt;/p&gt;&#xA;&lt;p&gt;双方都必须遵循这个约定时，程序的函数才能正常的运行起来。如果不遵循，那么该函数是没法运行起来的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;优化是什么&#34;&gt;优化是什么&lt;/h3&gt;&#xA;&lt;p&gt;在 Go1.17 起，正式将把 Go 内部 ABI 规范（在 Go 函数之间使用）从基于堆栈的函数参数和结果传递的方式&lt;strong&gt;改为基于寄存器的函数参数和结果传递&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.17 新特性：对 Go 依赖管理的一把大剪刀</title>
      <link>https://note.lican.site/posts/posts/go/117-module-pruning-lazy/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:03 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/117-module-pruning-lazy/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;不得不说。我可是个经历过 Go 依赖管理群魔乱舞，Go modules 迁移一堆 BUG 的人儿，难顶&amp;hellip;&#xA;为此当年我写了不少技术文章，希望给大家避坑。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/6gJkSyGAFR0v6kow2uVklA&#34;&gt;Go Modules 终极入门&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/uUNTH06_s6yzy5urtjPMsg&#34;&gt;干货满满的 Go Modules 知识分享&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/0g89yj9sc1oIz9kS9ZIAEA&#34;&gt;Go1.16 新特性：Go mod 的后悔药，仅需这一招&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在近期 Go1.17 发布后，Go modules 带来了两大更新，煎鱼摩拳擦掌，他们分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;模块依赖图裁剪（module graph pruning）&lt;/li&gt;&#xA;&lt;li&gt;延时模块加载（lazy module loading）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;今天带大家一起来了解这两块内容，争取了解其为何物，背景又是什么。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在日常的 Go 工程开发中，不知道你有没有遇到过 Go modules 的一个奇怪的点。大家没说，就以为是正确的，默认就接受了。&lt;/p&gt;&#xA;&lt;p&gt;引用官方的 &lt;a href=&#34;https://github.com/golang/go/blob/4012fea822763ef3aa66dd949fa95b9f8d89450a/src/cmd/go/testdata/script/mod_lazy_new_import.txt&#34; title=&#34;mod_lazy_new_import.txt&#34;&gt;mod_lazy_new_import.txt&lt;/a&gt; 的案例来说，就是假设我们在代码中：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;main module 是 lazy。其导入了 module A 的 package x，package x 又导入了 module B。&lt;/li&gt;&#xA;&lt;li&gt;main module lazy 也相当于同时导入了 module A 的 package y。&lt;/li&gt;&#xA;&lt;li&gt;module A 的 package y 又导入了 module C 的 package z。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;关联如下图所示：&lt;/p&gt;</description>
    </item>
    <item>
      <title>分久必合，golang.org 将成为历史！</title>
      <link>https://note.lican.site/posts/posts/go/site-history/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:03 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/site-history/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;这两天看到官方博客的《&lt;a href=&#34;https://go.dev/blog/tidy-web&#34; title=&#34;Tidying up the Go web experience&#34;&gt;Tidying up the Go web experience&lt;/a&gt;》，已经明确了优化 Go 站点的计划和安排了，为此今天和大家分享这一个好消息。&lt;/p&gt;&#xA;&lt;p&gt;在之前 Go 官方推出了新的站点 go.dev，一个新的 Go 开发者中心：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/c70f1330-64da-4b65-8988-f9dbe6b1df05.png&#34; alt=&#34;go.dev&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;以及提供给开发者查询 Go 包（package）和模块（module）信息的配套网站 pkg.go.dev：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/41df22df-78e2-4b15-83d7-c8e38fcaba54.png&#34; alt=&#34;pkg.go.dev&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;看上去似乎美好，但其实原有的 golang.org 在继续提供 Go 发行版下载、文档和标准库的软件包的资料。&lt;/p&gt;&#xA;&lt;p&gt;而其他 Go 网站，例如：blog.golang.org、play.golang.org、talks.golang.org 以及tour.golang.org，又都拥有额外的 Go 资料。这一切都有些零散和混乱。&lt;/p&gt;&#xA;&lt;p&gt;在软件发展来讲，这种被称之为 ”绞杀者“ 模式：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/4645e874-771a-452a-b4ba-e41d8ffe5673.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;也就是旧系统不断地被新系统取代，在两边都还存在流量时，会保持两边的运行。随着时间的推移，新系统不断地取代老系统，最终完全取代。&lt;/p&gt;&#xA;&lt;p&gt;Go 官方&lt;strong&gt;计划在接下来的一两个月里，将把 golang.org 网站合并成一个统一的网站&lt;/strong&gt;，也就是在 go.dev 上。&lt;/p&gt;&#xA;&lt;p&gt;所有的现有 URL（例如：Go 标准库、Go 博客等）都会重定向到新的 URL 地址中，不会出现破坏性修改（无法访问），一切按计划都是兼容的。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/0708fcf4-90b2-4451-8a3d-5bf5ce2a1dfa.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;咱们将会有一个更统一的 Go 网站，部分 Go 初学者也不再需要辛辛苦苦再翻山倒海先找个天梯了，因为是&lt;strong&gt;可以直接访问的&lt;/strong&gt;，这是一种利好！&lt;/p&gt;&#xA;&lt;p&gt;不得不感叹语句，Russ Cox 推动事情的能力真是杠杠的，虽然也会引来不少争议和讨论，但我们依然可以从中学习到好的部分！&lt;/p&gt;&#xA;&lt;p&gt;大家&lt;strong&gt;有没有什么也想让 Go 团队优化的呢，欢迎在评论区交流和讨论&lt;/strong&gt;！&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 1.17 支持泛型了？具体怎么用</title>
      <link>https://note.lican.site/posts/posts/go/117-generics/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:02 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/117-generics/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;千呼万唤的，Go1.17 前几天终于发布了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/45fe4f8a-ef8e-41a0-abba-ecdc05fe61c5.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;先前我写了几篇 Go1.17 新特性的文章，有兴趣的小伙伴可以看看：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/v1czjzlUsaSQTpAOG9Ub3w&#34;&gt;一个新细节，Go 1.17 将允许切片转换为数组指针！&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/zdsrmlwVR0bP1Q_Xg_VlpQ&#34;&gt;我要提高 Go 程序健壮性，Fuzzing 来了！&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/5kLFIuI0UJl_o8vMmZNfoA&#34;&gt;提了 3 年，Go1.17 终于增强构建约束！&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;今天的主题是泛型，众所皆知 Go1.18 泛型就会正式释出，都很期待，毕竟大更新，所有配套都会陆续有来！&#xA;其实，&lt;strong&gt;在 Go1.17 的此刻其实可以使用泛型了&lt;/strong&gt;，泛型代码已合入 master 分支。&lt;/p&gt;&#xA;&lt;p&gt;咱们只需要一点点操作，就能提前过上 Go 泛型的实验生活了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;升级-go117&#34;&gt;升级 Go1.17&lt;/h2&gt;&#xA;&lt;p&gt;你需要先升级 Go1.17，如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/a3260cf0-f9bc-4c86-aafd-4d08480143b9.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;安装后查看版本信息是否正常输出：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go1.17 version&#xA;go version go1.17 darwin/amd64&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;使用泛型&#34;&gt;使用泛型&lt;/h2&gt;&#xA;&lt;p&gt;接着写入一个基本的泛型 Demo：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;T&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;([]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;你好, &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进了煎鱼\n&amp;#34;&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Print&lt;/span&gt;([]&lt;span style=&#34;color:#66d9ef&#34;&gt;int64&lt;/span&gt;{&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;只需要在 run 和 build 的命令执行时指定 &lt;code&gt;-G&lt;/code&gt; 标识就好了。不过有的小伙伴可能会疑惑，为什么要这么干？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Goroutine 一泄露就看到他，这是个什么？</title>
      <link>https://note.lican.site/posts/posts/go/runtimepark/</link>
      <pubDate>Fri, 31 Dec 2021 12:55:01 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/runtimepark/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;作为一个 Go 语言的使用大户，常常就有人冷不丁的，一下就泄露了&amp;hellip;泄露了啥？&lt;/p&gt;&#xA;&lt;p&gt;表象来看当然是 goroutine 泄露了，这时候就会有小伙伴开始跑去拉取 PProf。就会看到类似下面这张图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/78c8dadf-4f5c-4dfe-be36-d39bfa9d13d3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;重点会看到 &lt;code&gt;runtime.gopark&lt;/code&gt; 这个函数，在所有的 goroutine 泄露中都会看到有，并且都会是大头。&lt;/p&gt;&#xA;&lt;p&gt;既然是大头，也就会有许多朋友以为他是泄漏点，在那一顿猛查，那这个函数到底是什么，作用是？&lt;/p&gt;&#xA;&lt;h2 id=&#34;runtimegopark-是何物&#34;&gt;runtime.gopark 是何物&lt;/h2&gt;&#xA;&lt;p&gt;想要知道 &lt;code&gt;runtime.gopark&lt;/code&gt; 函数是作用，最快的办法就是看源码了。其实现细节在 src/runtime/proc.go 文件中。&lt;/p&gt;&#xA;&lt;p&gt;源代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gopark&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;unlockf&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;g&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;lock&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;reason&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;waitReason&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;traceEv&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;traceskip&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;acquirem&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gp&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;curg&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;status&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;readgstatus&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;gp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waitlock&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;lock&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waitunlockf&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;unlockf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waitreason&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;reason&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waittraceev&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;traceEv&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;waittraceskip&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;traceskip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;releasem&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;mp&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mcall&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;park_m&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该函数主要作用有三大点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;acquirem&lt;/code&gt; 函数：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;获取当前 goroutine 所绑定的 m，设置各类所需数据。&lt;/li&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;releasem&lt;/code&gt; 函数&lt;strong&gt;将当前 goroutine 和其 m 的绑定关系解除&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;park_m&lt;/code&gt; 函数：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;将当前 goroutine 的状态从 &lt;code&gt;_Grunning&lt;/code&gt; 切换为 &lt;code&gt;_Gwaiting&lt;/code&gt;，也就是等待状态。&lt;/li&gt;&#xA;&lt;li&gt;删除 m 和当前 goroutine m-&amp;gt;curg（简称gp）之间的关联。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;mcall&lt;/code&gt; 函数，仅会在需要进行 goroutiine 切换时会被调用：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;切换当前线程的堆栈，从 g 的堆栈切换到 g0 的堆栈并调用 fn(g) 函数。&lt;/li&gt;&#xA;&lt;li&gt;将 g 的当前 PC/SP 保存在 g-&amp;gt;sched 中，以便后续调用 goready 函数时可以恢复运行现场。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;熟读了其源码后，我们可得知该函数的关键作用就是&lt;strong&gt;将当前的 goroutine 放入等待状态&lt;/strong&gt;，这意味着 goroutine 被暂时被搁置了，也就是被运行时调度器暂停了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 插件系统，一个凉了快半截的特性？</title>
      <link>https://note.lican.site/posts/posts/go/plugin/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:59 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/plugin/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在 Go 语言中，有一个好像很好用，但却比较少人提及的功能，那就是 Go Plugin。目前在 Go 工程中普遍还没广泛的使用起来，覆盖率不高。&lt;/p&gt;&#xA;&lt;p&gt;前段时间小咸鱼的同事问了他这玩具怎么用，他正想甩出一个链接，但发现&amp;hellip;煎鱼竟然没写过，这不，Go 知识板块的文章地图得补全。&lt;/p&gt;&#xA;&lt;p&gt;今天煎鱼就大家一起学习 Go Plugin！&lt;/p&gt;&#xA;&lt;h2 id=&#34;是什么&#34;&gt;是什么&lt;/h2&gt;&#xA;&lt;p&gt;Go Team 最早在 Go1.7 实验，在 Go1.8 正式引入了 Go Plugin 的机制。于 2016 年发布，一开始仅支持 Linux 实现：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/9a791ced-39db-4f09-a027-60569ccc95dd.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Go Plugin 机制实现了 Go 插件的加载和符号解析，能够支持将我们所编写的 Go 包编译为共享库（.so）。&lt;/p&gt;&#xA;&lt;p&gt;这样 Go 工程就可以加载所编译好的 Go Plugin（已经变成了共享库文件），在程序中调用共享库中的函数、常量、变量等使用。也称其为 Go 语言中的热插拔的插件系统。&lt;/p&gt;&#xA;&lt;p&gt;截止 Go1.17 为止，Go Plugin 仅支持在 Linux、FreeBSD 和 MacOS 上运行，还不支持 Windows。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么需要&#34;&gt;为什么需要&lt;/h2&gt;&#xA;&lt;p&gt;Go 语言是静态语言，正常我们写一个程序，分如下两个角度来看：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;从代码编写的角度来看：我们在程序编写的时候就已经把所有的功能实现给确定了，不会发生什么根本性的变化。&lt;/li&gt;&#xA;&lt;li&gt;从程序的角度来看：在 Go 进行编译时，就已经把所有引用的标准库、第三方库等都编译打包好进二进制文件了，因此也就无法在运行时去动态加载，所以没法有其它的可能性。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;那么为什么需要 Go Plugin 呢，原因如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;可插拔的插件：程序能够随时的安装插件，也能够卸载他，获得更多运行时的自定义能力。&lt;/li&gt;&#xA;&lt;li&gt;可动态加载运行时模块：随时安装了插件，自然也就需要可自行决定运行哪个插件的模块了。&lt;/li&gt;&#xA;&lt;li&gt;可独立开发插件、模块：主系统和子插件，可能由不同的团队开发和提供，也更有价值。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其实本质上还是&lt;strong&gt;希望程序能够在运行时实现动态的外部加载&lt;/strong&gt;，根据不同的条件、场景加载不同的插件功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法&#34;&gt;使用方法&lt;/h2&gt;&#xA;&lt;h3 id=&#34;通用概念&#34;&gt;通用概念&lt;/h3&gt;&#xA;&lt;p&gt;Go 官方给出的例子非常简单，只需要在 Go 编译时指定为插件就可以了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>迷惑了，Go len() 是怎么计算出来的？</title>
      <link>https://note.lican.site/posts/posts/go/len/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:58 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/len/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近看到了一个很有意思的话题，我们平时常常会用 Go 的内置函数 &lt;code&gt;len&lt;/code&gt; 去获取各种 map、slice 的长度，那他是怎么实现的呢？&lt;/p&gt;&#xA;&lt;p&gt;正当我想去看看 &lt;code&gt;len&lt;/code&gt; 的具体实现时，一展身手，却发现竟然是个空方法：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; len(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;看注解也没有 link 到其他 runtime 函数，那么 len 函数是如何被调用的呢？&lt;/p&gt;&#xA;&lt;p&gt;先前看国外讨论 Go 计算 len 的文章时做了一些翻译和笔记（底下有参考链接），在此分享给大家，共同进步。&lt;/p&gt;&#xA;&lt;h2 id=&#34;谜底&#34;&gt;谜底&lt;/h2&gt;&#xA;&lt;p&gt;今天就由煎鱼带大家一同解开这个谜底。既然是谜底，那就一开始就揭开。&lt;/p&gt;&#xA;&lt;p&gt;其实 Go 语言中并没有 len 函数的具体实现代码，他其实&lt;strong&gt;是 Go 编译器的 &amp;ldquo;魔法&amp;rdquo; ，不是实际的函数调用&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;接下来将展开这部分，我们可以更深入地了解 Go 编译器的内部工作原理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;编译器&#34;&gt;编译器&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 编译器编译时会解析命令行参数中指定的标志和 Go 源文件，对解析后的 Go 包进行类型检查，将函数编译为机器代码。代码，最后将编译后的包定义写到磁盘上。&lt;/p&gt;&#xA;&lt;p&gt;内部定义基本类型、内置函数和操作函数的阶段是在 types/universe.go 当中。同时会进行内置函数和具体的操作符匹配，可以明确知道内置函数 len 对应的是 OLEN：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;builtinFuncs&lt;/span&gt; = [&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;op&lt;/span&gt;   &lt;span style=&#34;color:#a6e22e&#34;&gt;Op&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;append&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OAPPEND&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cap&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OCAP&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;close&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OCLOSE&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;complex&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OCOMPLEX&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;copy&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OCOPY&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;delete&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ODELETE&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;imag&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OIMAG&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;len&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;OLEN&lt;/span&gt;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在编译时，上分为五个阶段进行类型检查：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 提案：增加泛型版 slices 和 maps 新包</title>
      <link>https://note.lican.site/posts/posts/go/news-slices-maps/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:57 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/news-slices-maps/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;现在是 2021 年 8 月份了，根据 Go 语言发布周期的 2，8 原则。Go 1.17 即将发布，在写这篇文章时，现在已经进行到了 rc2：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/ced4caa3-98ac-4c8a-8077-c72e11f69b56.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这意味着离 Go1.18 释出泛型的正式支持又近了一点点，社区中讨论泛型相关的周边功能的声音又多了起来。&lt;/p&gt;&#xA;&lt;p&gt;今天要讨论的泛型版功能支持也是如此，分别包含：map（#47330）、slice（#45955）、container/set（#47331） 三种通用类型的支持。&lt;/p&gt;&#xA;&lt;p&gt;我们主要展开 maps 和 slices，其余的都大同小异，理解核心思想就好。&lt;/p&gt;&#xA;&lt;h2 id=&#34;maps&#34;&gt;maps&lt;/h2&gt;&#xA;&lt;p&gt;该提案建议定义一个新的包 maps，它将提供可用于任何类型的 map 的函数：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/fc067e0f-0972-4f92-898e-d64404b5bfa4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;下面的描述侧重于描述 API 的提供：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maps&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Keys&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;) []&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Values&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;) []&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Equal&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;m2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EqualFunc&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;m2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cmp&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;V1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V2&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Clear&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Clone&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;dst&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Filter&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;comparable&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;any&lt;/span&gt;](&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;]&lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;keep&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;K&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;V&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;Keys：返回 map 的键值。这些键将是一个不确定的顺序。&lt;/li&gt;&#xA;&lt;li&gt;Values：返回 map 值。这些值将以不确定的顺序出现。&lt;/li&gt;&#xA;&lt;li&gt;Equal：匹配两个 map 是否包含相同的键/值对。&lt;/li&gt;&#xA;&lt;li&gt;EqualFunc：EqualFunc 与 Equal 类似，但使用 cmp 进行数值比较。&lt;/li&gt;&#xA;&lt;li&gt;Clear：从 map 中清除所有条目，使其为空。&lt;/li&gt;&#xA;&lt;li&gt;Clone：返回一个 map 的副本，这是一个浅层克隆。新的键和值使用普通的赋值来设置。&lt;/li&gt;&#xA;&lt;li&gt;Add：将 src 中的所有键/值对添加到 dst 中。当 src 中的一个键已经存在于 dst 中时，dst 中的值将被 src 中的键相关的值覆盖。&lt;/li&gt;&#xA;&lt;li&gt;Filter：过滤器从 map 中删除任何 keep 返回结果为 false 的键/值对。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;slice&#34;&gt;slice&lt;/h2&gt;&#xA;&lt;p&gt;该提案建议定义一个新的包 slices，它将提供可用于任何类型的 slice 的函数：&lt;/p&gt;</description>
    </item>
    <item>
      <title>一个 Demo 学会使用 Go Delve 调试</title>
      <link>https://note.lican.site/posts/posts/go/delve/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:57 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/delve/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在 Go 语言中，除了 go tool 工具链中的 pprof、trace 等剖析工具的大利器外。常常还会有小伙伴问，有没有更好用，更精细的，&lt;/p&gt;&#xA;&lt;p&gt;大家总嫌弃 pprof、trace 等工具，不够细，没法一口气看到根因，或者具体变量&amp;hellip;希望能够最好能追到代码级别调试的，看到具体变量的值是怎么样的，随意想怎么看怎么看的那种。&lt;/p&gt;&#xA;&lt;p&gt;为此今天给大家介绍 Go 语言强大的 Delve （dlv）调试工具，来更深入问题剖析。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;p&gt;我们需要先安装 Go delve，若是 Go1.16 及以后的版本，可以直接执行下述命令安装：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go install github.com/go-delve/delve/cmd/dlv@latest&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;也可以通过 git clone 的方式安装：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git clone https://github.com/go-delve/delve&#xA;$ cd delve&#xA;$ go install github.com/go-delve/delve/cmd/dlv&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在安装完毕后，我们执行 &lt;code&gt;dlv version&lt;/code&gt; 命令，查看安装情况：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ dlv version&#xA;Delve Debugger&#xA;Version: 1.7.0&#xA;Build: $Id: e353a65161e6ed74952b96bbb62ebfc56090832b $&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可以明确看到我们所安装的版本是 v1.7.0。&lt;/p&gt;&#xA;&lt;h2 id=&#34;演示程序&#34;&gt;演示程序&lt;/h2&gt;&#xA;&lt;p&gt;我们计划用一个反转字符串的演示程序来进行 Go 程序的调试。第一部分先是完成 &lt;code&gt;stringer&lt;/code&gt; 包的 &lt;code&gt;Reverse&lt;/code&gt; 方法。&lt;/p&gt;&#xA;&lt;p&gt;代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;stringer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Reverse&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; []rune(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, len(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; len(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;] = &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;j&lt;/span&gt;], &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; string(&lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再在具体的 &lt;code&gt;main&lt;/code&gt; 启动函数中进行调用。代码如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>学会使用 GDB 调试 Go 代码</title>
      <link>https://note.lican.site/posts/posts/go/gdb/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:57 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gdb/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;上一篇文章《一个 Demo 学会使用 Go Delve 调试》我们详细介绍了 Go 语言如何使用 Delve 进行排查和调试，对于问题的解决非常的有帮助。&lt;/p&gt;&#xA;&lt;p&gt;但调试工具肯定不止只有 Delve，今天我们来介绍第二个神器，那就是：GDB。&lt;/p&gt;&#xA;&lt;h2 id=&#34;gdb-是什么&#34;&gt;GDB 是什么&lt;/h2&gt;&#xA;&lt;p&gt;GDB 是一个类 UNIX 系统下的程序调试工具，允许你看到另一个程序在执行时 &amp;ldquo;内部 &amp;ldquo;发生了什么，或者程序在崩溃时正在做什么。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/35fc6475-ec0d-44a0-ae8c-920121130edb.png&#34; alt=&#34;GDB Logo&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;主要可以做四类事情：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;启动你的程序，指定任何可能影响其行为的东西。&lt;/li&gt;&#xA;&lt;li&gt;使你的程序在指定的条件下停止。&lt;/li&gt;&#xA;&lt;li&gt;检查当你的程序停止时发生了什么。&lt;/li&gt;&#xA;&lt;li&gt;改变你程序中的东西，这样你就可以试验纠正一个错误的影响，并继续了解另一个错误。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;p&gt;如果是在 MacOS 上的话，可以直接使用 brew 安装：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;brew install gdb&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果是在 Linux ，则使用自带的包管理工具进行安装即可，但需要注意安装完毕后需要在 HOME 目录进行相关配置。&lt;/p&gt;&#xA;&lt;p&gt;安装完毕后，执行 &lt;code&gt;gdb&lt;/code&gt; 就可以看到：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ gdb&#xA;GNU gdb (GDB) 10.2&#xA;...&#xA;(gdb) &#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;写此文时最新的 gdb 版本已经是 10.2 了，我也升级了上去。问题不大，还多了不少功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;编译&#34;&gt;编译&lt;/h2&gt;&#xA;&lt;p&gt;我们还是使用先前的演示程序来进行调试。但由于 Go 语言的不少编译优化，因此在编译运行程序时，有以下几点需要注意：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;go build 编译时需要增加 &lt;code&gt;-gcflags=all=&amp;quot;-N -l&amp;quot;&lt;/code&gt; 指令来关闭内联优化，方便接下来的调试。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;若是 MacOS，在 go build 编译时需要增加 &lt;code&gt;-ldflags=&#39;-compressdwarf=false&#39;&lt;/code&gt; 指令。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我周末参加了个架构师大会！</title>
      <link>https://note.lican.site/posts/posts/2021giac/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:57 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/2021giac/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前两天 GIAC 全球互联网架构大会在深圳举办了，总算是有个长年在深圳举办的大会了，愉快参加了大部分的场次，面基了不少社区网友。&lt;/p&gt;&#xA;&lt;p&gt;分享一些我听了觉得有意义的记录给大家。希望能和大家一起学习进步。本文分别涉及如下几个议题：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;《hits for microservices desgin》&lt;/li&gt;&#xA;&lt;li&gt;《在企业中的个人成长》&lt;/li&gt;&#xA;&lt;li&gt;《大规模任务调度在 AfterShip 的高可用实践》&lt;/li&gt;&#xA;&lt;li&gt;《快手前端实时性能监控和稳定性度量》&lt;/li&gt;&#xA;&lt;li&gt;《快手中间件 mesh 化实践》&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;hits-for-microservices-desgin&#34;&gt;hits for microservices desgin&lt;/h2&gt;&#xA;&lt;p&gt;一开始先介绍了为什么叫 ”hits“。叫 ”hits“ 的主要原因，是&lt;strong&gt;业务架构没有技术架构那么明确，没有明确的对与错，是个人的工作经验和总结&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;微服务解决什么问题&#34;&gt;微服务解决什么问题&lt;/h3&gt;&#xA;&lt;p&gt;业内常常说到，微服务，微服务。总归期望微服务解决什么问题。&lt;/p&gt;&#xA;&lt;p&gt;演讲的作者做了如下的调研：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/903dfcbb-a0b6-481f-a40e-3476b8ac8b64.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从调研结果来看，占比最大的就是 ”独立自治，只关注自己的模块“。这和绝大部分既有业务的公司做微服务的初衷一致。&lt;/p&gt;&#xA;&lt;p&gt;许多就是被单体的巨石应用折腾的不行，纷纷希望通过拆分微服务来实现业务模块的独立自治。&lt;/p&gt;&#xA;&lt;h3 id=&#34;微服务的现状&#34;&gt;微服务的现状&lt;/h3&gt;&#xA;&lt;p&gt;主要是播放了动图，配合口述。现在大多数服务拆分后的现状，很多就是&lt;strong&gt;改哪影响哪完全不清楚，和水管漏水似的&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/f871b4de-c8b6-47b4-a5e7-5b9f64b73aea.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;(自行脑补一拧水管，堵哪，别的地方就漏)&lt;/p&gt;&#xA;&lt;h3 id=&#34;衡量微服务拆分的标准&#34;&gt;衡量微服务拆分的标准&lt;/h3&gt;&#xA;&lt;p&gt;理想中的微服务拆分，希望要有灵活的组装能力。但拆分后遇到的新问题，实际的情况，拆分后与期望的不一样，拆着拆着就变成了一大坨，但只是说隔开了，与现在企业中微服务运行的现状很贴合。&lt;/p&gt;&#xA;&lt;p&gt;拆分后如有如下几个痛点：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/0890ca8a-4fa1-4173-8334-92a167a47a19.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;举了几个案例。分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;订单的例子。&lt;/li&gt;&#xA;&lt;li&gt;报价的系统。&lt;/li&gt;&#xA;&lt;li&gt;数仓的例子。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;订单&#34;&gt;订单&lt;/h4&gt;&#xA;&lt;p&gt;举的是订单的例子，订单团队非常忙，因为信息都存在订单里，系统其他有任何业务上的变更诉求，都要找订单的团队。&lt;/p&gt;&#xA;&lt;p&gt;为此，在拆分上需要优化成订单业务只保存订单 ID：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/24a64dd9-98ae-419f-afef-aa125513dbd2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;各系统存订单ID，各团队自治，实现业务解耦，订单团队就不用因其他业务变更天天加班了。&lt;/p&gt;&#xA;&lt;h4 id=&#34;报价&#34;&gt;报价&lt;/h4&gt;&#xA;&lt;p&gt;举的是报价的系统，要是报价团队，针对各个子业务项都要自己实现一般，会非常的辛苦，经常要加班。&lt;/p&gt;&#xA;&lt;p&gt;我们只需要在报价系统提供接口标准，各系统自己实现，再对接：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/92f5b5eb-e5de-4bfd-bab6-f3e9ab2d7a6d.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;报价团队就不需要每次都重新开会，再对接。报价系统自己只做业务流程的编排，瞬间变轻松了。&lt;/p&gt;&#xA;&lt;h4 id=&#34;数仓&#34;&gt;数仓&lt;/h4&gt;&#xA;&lt;p&gt;举的是数仓的例子，业务改一个字段，数仓系统要改一个月，否则就会出现问题，因此要求业务有任何 schema 改变都必须要通知数仓团队：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/b1a09935-9663-449a-8646-b55ef3e08b7c.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;很现实的是，基本通知不过来，所以很多公司把他作为绩效，定期考核，出问题定期批评。&lt;/p&gt;&#xA;&lt;p&gt;建议的是：通过 RPC 的方式提供维护，把数据维护交给业务团队自己维护，数仓团队应该只做具体的跨团队的数据互联。&lt;/p&gt;&#xA;&lt;h4 id=&#34;好的标准的定义&#34;&gt;好的标准的定义&lt;/h4&gt;&#xA;&lt;p&gt;分层，都可以独立变更，可以自己搞自己，只需要保证这一层提供的能力是稳定的就好（全部改一遍的另当别论），不需要了解上下游，只需要维护好 interface。&lt;/p&gt;&#xA;&lt;p&gt;具体几点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;不同模块间完全没影响&lt;/li&gt;&#xA;&lt;li&gt;只共享不可变数据&lt;/li&gt;&#xA;&lt;li&gt;共享可变数据，但接口不变。&lt;/li&gt;&#xA;&lt;li&gt;大部分情况变化的是实现，变化的不是接口，接口的变更次数很少。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;参照乐高，关注接口的稳定性，而不是拆的越细越好。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么鼓励可以重塑一个职场人？</title>
      <link>https://note.lican.site/posts/posts/reload-man/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:56 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/reload-man/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近在看书的时候看到了一句很经典的话：“&lt;strong&gt;重塑一个人行为最好的方式是鼓励&lt;/strong&gt;”。平时我在多个领域的不同图书、不同面谈场合都能听到过不同的诠释。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/9a4b75a6-b512-47b8-9c12-28d9b8e7a068.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;可惜的是作者大多都没有指出是 “心理学” 的范畴，都只是表示应该要这么做，没有表示为什么，没有讲解来源，传播的信息非常的 3.5 手。&lt;/p&gt;&#xA;&lt;p&gt;为此特意咨询了身边的一个心理学科班大佬，自打我认识她以来，每次开会都能看到她点头表示肯定，在我的记忆中非常深刻，非常有意思。&lt;/p&gt;&#xA;&lt;p&gt;与她咨询过后，得出对应的是理论是 “&lt;strong&gt;皮格马利翁效应&lt;/strong&gt;”。今天就进一步展开来简单学习、思考一下这为何物。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;皮格马利翁效应，又称毕马龙效应、罗森塔尔效应或期待效应，是指人（通常是指孩童或学生）在被赋予更高期望以后，他们会表现的更好的一种现象。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/e27b3d98-18c0-4cfc-bd4d-5900ac772351.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;美国心理学家罗伯特·罗森塔尔和雷诺尔·雅各布森对此进行了研究。在他们的研究中发现，假设&lt;strong&gt;老师对学生的期望加强，学生的表现也会相对加强&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;实验&#34;&gt;实验&lt;/h2&gt;&#xA;&lt;p&gt;在罗森塔尔的实验中，他们从 1~6 年级各选了 3 个班，对这 18 个班的学生进行了 “未来发展趋势测验”。并将一份 “最有发展前途者” 名单（实际上是随便抽取出来的）交给了校长和相关老师。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/6a09db03-5811-4ff7-b6b5-7a2cb2cc36e4.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在 8 个月后，罗森塔尔和助手们对那 18 个班级的学生进行复试，结果发现：&lt;strong&gt;被期望的学生表现出更有适应能力、更有魅力、求知欲更强、智力更活跃等倾向&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/c59f2415-812a-4d74-bc93-03f360944b79.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;通过各种研究和试验得出结论：&lt;strong&gt;认为教师的期望会传递给被期望的学生并产生鼓励效应，进而产生改变&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;也正是因为罗森塔尔对该效应在小学教学上予以验证提出，皮格马利翁效应也被称为“罗森塔尔效应”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;思考&#34;&gt;思考&lt;/h2&gt;&#xA;&lt;p&gt;回到最初的话题，为什么作者会说 ”重塑一个人行为最好的方式是鼓励”，这让我想起了非常著名两类思考模式：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/db4d42cc-9519-4c03-8961-57b3deaf9a65.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;成长型思考模式：认为学习不在于天赋，在于努力，只要努力用功，什么都能学会。&lt;/li&gt;&#xA;&lt;li&gt;固定型思考模式：特别相信天赋的作用，擅长的东西就是擅长，要是不擅长怎么学都没有用。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这其实就直接和 “鼓励” 有关系，我们接下来结合 “否定” 和 “鼓励” 来具体展开说说。&lt;/p&gt;&#xA;&lt;p&gt;看看长期对一个人进行 “否定”，又或是进行 “鼓励” 可能会发生怎么样的事情，会不会改变一个人？&lt;/p&gt;&#xA;&lt;h3 id=&#34;否定&#34;&gt;否定&lt;/h3&gt;&#xA;&lt;p&gt;如果在职场中，你&lt;strong&gt;对一个人一直是否定、不认可，这对他是不好的&lt;/strong&gt;。你无论做什么，那个人总是挑刺，冷嘲热讽，在公开场合批判你。&lt;/p&gt;&#xA;&lt;p&gt;可能会带来如下结果：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;若他是一张白纸：极有可能就会认为自己不行，认为自己怎么学都没有用，无限的进行自我否定，很难走出来。&lt;/li&gt;&#xA;&lt;li&gt;若他不是白纸：明确知道自己的底线，一直否定、不认可，也会反噬你团队，又或是对你有极大的意见。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这还是明确是否白纸的场景，但&lt;strong&gt;更多的人不是非黑即白，也就是在灰色，处于两者之间&lt;/strong&gt;，不少人会怀疑人生。&lt;/p&gt;&#xA;&lt;p&gt;逐渐才发现是&lt;strong&gt;大家常说的职场 PUA&lt;/strong&gt;，这在勾心斗角的某些地方很常见。&lt;/p&gt;&#xA;&lt;h3 id=&#34;鼓励&#34;&gt;鼓励&lt;/h3&gt;&#xA;&lt;p&gt;如果我们加之鼓励，多鼓励职场中的同事，在不同的人生阶段能带来不同的结果：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;从小培养：埋下成长型思维模式的种子，他会主动把每一项任务都当成成长的机会，主动愿意花更长的时间钻研难题，主动选择更困难的任务。&lt;/li&gt;&#xA;&lt;li&gt;成年发展：知道自己不应该被局限、固定的思维定式所控制，慢慢把 “固定型思考” 转变成 “成长型思考”，就会有较大的突破。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在职场中受到鼓励后，就&lt;strong&gt;会朝着这块持续不断地突破，获得自我和周遭的成就和认同感，进而更进一步的拓展，得到更多的发展空间&lt;/strong&gt;，这就是 “鼓励” 的力量。&lt;/p&gt;</description>
    </item>
    <item>
      <title>时隔 3 年，Go1.17 增强构建约束！</title>
      <link>https://note.lican.site/posts/posts/go/117-build/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:56 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/117-build/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;Go1.17rc1 在前几天终于正式发布了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/a9dd1134-e4f8-4d9c-9c3c-2608728ddf69.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;看到 Go1.17 增加了一个新特性，是面向 Go 构建时的构建约束的增强。认真一看，是一个时隔 3 年的提案了，原本还在 Go2 和 Go1 之间左右摇摆，这下在 6 月底 Russ Cox 就输出了新草案：《Bug-resistant build constraints — Draft Design》。紧接着直接计划在 Go1.17 发布了。&lt;/p&gt;&#xA;&lt;p&gt;一气呵成，真实版高效能了。&lt;/p&gt;&#xA;&lt;p&gt;如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/10037273-887d-45c0-9eca-6ef36d7c4d72.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;之前小咸鱼有遇到好几个朋友，在报错时压根不知道 Go 有这个约束语法，以为只是个单纯的注释，直接不明所以然，感觉科普之路任重道远。&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章煎鱼就来讲讲构建约束这事。&lt;/p&gt;&#xA;&lt;p&gt;注：下个月 Go1.17 就会正式发布，距离 Go1.18 泛型出山只差一点点距离了，值得期待！&lt;/p&gt;&#xA;&lt;h2 id=&#34;构建约束的背景&#34;&gt;构建约束的背景&lt;/h2&gt;&#xA;&lt;p&gt;简单来讲，在真实环境中，可能需要为不同的编译环境编写不同的 Go 代码，所以需要做构建约束。&lt;/p&gt;&#xA;&lt;p&gt;划重点，Go 语言对这一问题的解决方案是&lt;strong&gt;在文件层面进行有条件的编译：每个文件要么在编译中，要么不在&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;也就是，假设不符合构建约束的场景。那么会直接不编译这个文件，因为他不在编译范围内。那在程序想运行时就会报错，表示找不到文件。因此有许多的同学看着报错信息，经常找不着北&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;现有的构建约束&#34;&gt;现有的构建约束&lt;/h2&gt;&#xA;&lt;p&gt;既然是叫 “增强”。说明现有就有构建约束。最早的构建约束是在 2011 年 9 月引入的构建约束。&lt;/p&gt;&#xA;&lt;p&gt;我们平时常见的构建约束（build constraint），也叫做构建标记（build tag），构建约束必须出现在 &lt;code&gt;package&lt;/code&gt; 之前。&lt;/p&gt;&#xA;&lt;p&gt;平时会在 Go 工程的文件中的最开始会看到如下行注解：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// +build&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;为了将构建约束与包文档区分开来，构建约束后必须跟一个空行。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// +build linux,386 darwin,!cgo&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;又或是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// +build linux darwin&#xA;// +build amd64&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;还可以根据 Go 版本来约束：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 内存模型：happens-before 原则</title>
      <link>https://note.lican.site/posts/posts/go/memory-model/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:54 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/memory-model/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在日常工作中，如果我们能够了解 Go 语言内存模型，那会带来非常大的作用。这样在看一些极端情况，又或是变态面试题的时候，就能够明白程序运行表现下的很多根本原因了。&lt;/p&gt;&#xA;&lt;p&gt;当然，靠一篇普通文章讲完 Go 内存模型，不可能。因此今天这篇文章，把重点划在给大家&lt;strong&gt;讲解 Go 语言的 happens-before 原则&lt;/strong&gt;这 1 个细节。&lt;/p&gt;&#xA;&lt;p&gt;开吸，和煎鱼揭开他的神秘面纱！&lt;/p&gt;&#xA;&lt;h2 id=&#34;内存模型定义是什么&#34;&gt;内存模型定义是什么&lt;/h2&gt;&#xA;&lt;p&gt;既然要了解 happens-before 原则，我们得先知道 The Go Memory Model（Go 内存模型）定义的是什么，官方解释如下：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The Go memory model specifies the conditions under which reads of a variable in one goroutine can be guaranteed to observe values produced by writes to the same variable in a different goroutine.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;在 Go 内存模型规定：“在一个 goroutine 中读取一个变量时，可以保证观察到不同 goroutine 中对同一变量的写入所产生的值” 的条件。&lt;/p&gt;&#xA;&lt;p&gt;这是学习后续知识的一个大前提。&lt;/p&gt;&#xA;&lt;h2 id=&#34;happens-before-是什么&#34;&gt;happens-before 是什么&lt;/h2&gt;&#xA;&lt;p&gt;Happens Before 是一个专业术语，与 Go 语言没有直接关系，也就是并非是特有的。用大白话来讲，其定义是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享 Go 使用 Context 的正式姿势</title>
      <link>https://note.lican.site/posts/posts/go/real-context/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:54 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/real-context/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在 Go 语言中，Goroutine（协程），也就是关键字 &lt;code&gt;go&lt;/code&gt; 是一个家喻户晓的高级用法。这起的非常妙，说到 Go，就会想到这一门语言，想到 goroutine 这一关键字，而与之关联最深的就是 context。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/2f26bd64-e9bd-4c89-a9a0-326b8c2b9d00.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;平时在 Go 工程中开发中，几乎所有服务端（例如：HTTP Server）的默认实现，都在处理请求时新起 goroutine 进行处理。&lt;/p&gt;&#xA;&lt;p&gt;但一开始存在一个问题，那就是当一个请求被取消或超时时，所有在该请求上工作的 goroutines 应该迅速退出，以便系统可以回收他们正在使用的任何资源。&lt;/p&gt;&#xA;&lt;p&gt;当年可没有 context 标准库。很折腾。因此 Go 官方在 2014 年正式宣发了 context 标准库，形成一个完整的闭环。&lt;/p&gt;&#xA;&lt;p&gt;但有了 context 标准库，Go 爱好者们又奇怪了，前段时间我就被问到了：“Go context 的正确使用姿势是怎么样的”？&lt;/p&gt;&#xA;&lt;p&gt;（一张忘记在哪里被问的隐形截图）&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章就由煎鱼带你看看。&lt;/p&gt;&#xA;&lt;h2 id=&#34;context-用法&#34;&gt;Context 用法&lt;/h2&gt;&#xA;&lt;p&gt;在 Go context 用法中，我们常常将其与 select 关键字结合使用，用于监听其是否结束、取消等。&lt;/p&gt;&#xA;&lt;p&gt;代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shortDuration&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Millisecond&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ctx&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cancel&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;WithTimeout&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#a6e22e&#34;&gt;shortDuration&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cancel&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;After&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ctx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Done&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ctx&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Err&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;context deadline exceeded&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果是更进一步结合 goroutine 的话，常见的例子是：&lt;/p&gt;</description>
    </item>
    <item>
      <title>详解 Go 团队不建议用的 unsafe.Pointer</title>
      <link>https://note.lican.site/posts/posts/go/unsafe-pointer/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:54 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/unsafe-pointer/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;大家在学习 Go 的时候，肯定都学过 “Go 的指针是不支持指针运算和转换” 这个知识点。为什么呢？&lt;/p&gt;&#xA;&lt;p&gt;首先，Go 是一门静态语言，所有的变量都必须为标量类型。不同的类型不能够进行赋值、计算等跨类型的操作。&lt;/p&gt;&#xA;&lt;p&gt;那么指针也对应着相对的类型，也在 Compile 的静态类型检查的范围内。同时静态语言，也称为强类型。也就是一旦定义了，就不能再改变它。&lt;/p&gt;&#xA;&lt;h2 id=&#34;错误的示例&#34;&gt;错误的示例&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main(){&#xA; num := 5&#xA; numPointer := &amp;amp;num&#xA;&#xA; flnum := (*float32)(numPointer)&#xA; fmt.Println(flnum)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# command-line-arguments&#xA;...: cannot convert numPointer (type *int) to type *float32&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在示例中，我们创建了一个 &lt;code&gt;num&lt;/code&gt; 变量，值为 5，类型为 &lt;code&gt;int&lt;/code&gt;，准备干一番大事。&lt;/p&gt;&#xA;&lt;p&gt;接下来我们取了其对于的指针地址后，试图强制转换为 &lt;code&gt;*float32&lt;/code&gt;，结果失败&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;万能的破壁-unsafe&#34;&gt;万能的破壁 unsafe&lt;/h2&gt;&#xA;&lt;p&gt;针对刚刚的 “错误示例”，我们可以采用今天的男主角 &lt;code&gt;unsafe&lt;/code&gt; 标准库来解决。它是一个神奇的包，在官方的诠释中，有如下概述：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;围绕 Go 程序内存安全及类型的操作。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;很可能会是不可移植的。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;不受 Go 1 兼容性指南的保护。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;简单来讲就是，不怎么推荐你使用，因为它是 unsafe（不安全的）。&lt;/p&gt;&#xA;&lt;p&gt;但是在特殊的场景下，使用了它，可以打破 Go 的类型和内存安全机制，让你获得眼前一亮的惊喜效果。&lt;/p&gt;&#xA;&lt;h3 id=&#34;unsafepointer&#34;&gt;unsafe.Pointer&lt;/h3&gt;&#xA;&lt;p&gt;为了解决这个问题，需要用到 &lt;code&gt;unsafe.Pointer&lt;/code&gt;。它表示任意类型且可寻址的指针值，可以在不同的指针类型之间进行转换（类似 C 语言的 void * 的用途）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go SliceHeader 和 StringHeader，你知道吗？</title>
      <link>https://note.lican.site/posts/posts/go/slice-string-header/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:53 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/slice-string-header/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在 Go 语言中总是有一些看上去奇奇怪怪的东西，咋一眼一看感觉很熟悉，但又不理解其在 Go 代码中的实际意义，面试官却爱问&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;今天要给大家介绍的是 SliceHeader 和 StringHeader 结构体，了解清楚他到底是什么，又有什么用，并且会在最后给大家介绍 0 拷贝转换的内容。&lt;/p&gt;&#xA;&lt;p&gt;一起愉快地开始吸鱼之路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;sliceheader&#34;&gt;SliceHeader&lt;/h2&gt;&#xA;&lt;p&gt;SliceHeader 如其名，Slice + Header，看上去很直观，实际上是 Go Slice（切片）的运行时表现。&lt;/p&gt;&#xA;&lt;p&gt;SliceHeader 的定义如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type SliceHeader struct {&#xA; Data uintptr&#xA; Len  int&#xA; Cap  int&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Data：指向具体的底层数组。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Len：代表切片的长度。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Cap：代表切片的容量。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;既然知道了切片的运行时表现，那是不是就意味着我们可以自己造一个？&lt;/p&gt;&#xA;&lt;p&gt;在日常程序中，可以利用标准库 &lt;code&gt;reflect&lt;/code&gt; 提供的 &lt;code&gt;SliceHeader&lt;/code&gt; 结构体造一个：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;  // 初始化底层数组&#xA; s := [4]string{&amp;#34;脑子&amp;#34;, &amp;#34;进&amp;#34;, &amp;#34;煎鱼&amp;#34;, &amp;#34;了&amp;#34;}&#xA; s1 := s[0:1]&#xA; s2 := s[:]&#xA;&#xA;  // 构造 SliceHeader&#xA; sh1 := (*reflect.SliceHeader)(unsafe.Pointer(&amp;amp;s1))&#xA; sh2 := (*reflect.SliceHeader)(unsafe.Pointer(&amp;amp;s2))&#xA; fmt.Println(sh1.Len, sh1.Cap, sh1.Data)&#xA; fmt.Println(sh2.Len, sh2.Cap, sh2.Data)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;你认为输出结果是什么，这两个新切片会指向同一个底层数组的内存地址吗？&lt;/p&gt;</description>
    </item>
    <item>
      <title>群里又吵起来了，Go 是传值还是传引用？</title>
      <link>https://note.lican.site/posts/posts/go/value-quote/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:52 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/value-quote/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在咱们的 Go 交流群里，有一个小伙伴问了 “xxx 是不是引用类型？” 这个问题，引发了将近 5 小时的讨论：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9be6b8a7ae844766afa6c2a79c3666d5~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;兜兜转转回到了日经的问题，几乎每个月都要有人因此吵一架。就是 &lt;strong&gt;Go 语言到底是传值（值传递），还是传引用（引用传递）&lt;/strong&gt;？&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-官方的定义&#34;&gt;Go 官方的定义&lt;/h2&gt;&#xA;&lt;p&gt;本部分引用 Go 官方 FAQ 的 “When are function parameters passed by value?”，内容如下。&lt;/p&gt;&#xA;&lt;p&gt;如同 C 系列的所有语言一样，&lt;strong&gt;Go 语言中的所有东西都是以值传递的&lt;/strong&gt;。也就是说，一个函数总是得到一个被传递的东西的副本，就像有一个赋值语句将值赋给参数一样。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4dc92546d5494e5b9a2a2a5083aa0a5b~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;向一个函数传递一个 int 值，就会得到 int 的副本。&lt;/p&gt;&#xA;&lt;p&gt;而传递一个指针值就会得到指针的副本，但不会得到它所指向的数据。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;map 和 slice 的行为类似于指针：它们是包含指向底层 map 或 slice 数据的指针的描述符。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;复制一个 map 或 slice 值并不会复制它所指向的数据。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;复制一个接口值会复制存储在接口值中的东西。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;如果接口值持有一个结构，复制接口值就会复制该结构。如果接口值持有一个指针，复制接口值会复制该指针，但同样不会复制它所指向的数据。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;划重点，Go 语言中一切都是值传递，没有引用传递。不要直接把其他概念硬套上来，会犯先入为主的错误的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;传值和传引用&#34;&gt;传值和传引用&lt;/h2&gt;&#xA;&lt;h3 id=&#34;传值&#34;&gt;传值&lt;/h3&gt;&#xA;&lt;p&gt;传值，也叫做值传递（pass by value）。其&lt;strong&gt;指的是在调用函数时将实际参数复制一份传递到函数中&lt;/strong&gt;，这样在函数中如果对参数进行修改，将不会影响到实际参数。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，值传递，所传递的是该参数的副本，是复制了一份的，本质上不能认为是一个东西，指向的不是一个内存地址。&lt;/p&gt;&#xA;&lt;p&gt;案例一如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA; s := &amp;#34;脑子进煎鱼了&amp;#34;&#xA; fmt.Printf(&amp;#34;main 内存地址：%p\n&amp;#34;, &amp;amp;s)&#xA; hello(&amp;amp;s)&#xA;}&#xA;&#xA;func hello(s *string) {&#xA; fmt.Printf(&amp;#34;hello 内存地址：%p\n&amp;#34;, &amp;amp;s)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>详解 Go 空结构体的 3 种使用场景</title>
      <link>https://note.lican.site/posts/posts/go/empty-struct/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:51 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/empty-struct/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在大家初识 Go 语言时，总会拿其他语言的基本特性来类比 Go 语言，说白了就是老知识和新知识产生关联，实现更高的学习效率。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/87c66858abf04b848643b6fa03f4bdab~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;最常见的类比，就是 “Go 语言如何实现面向对象？”，进一步展开就是 Go 语言如何实现面向对象特性中的继承。&lt;/p&gt;&#xA;&lt;p&gt;这不仅在学习中才用到类比，在业内的 Go 面试中也有非常多的面试官喜欢问：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d1cc9c2b2e174fc4a82506b368591a70~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;来自读者微信群&lt;/p&gt;&#xA;&lt;p&gt;在今天这篇文章中，煎鱼带大家具体展开了解这块的知识。一起愉快地开始吸鱼之路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是面向对象&#34;&gt;什么是面向对象&lt;/h2&gt;&#xA;&lt;p&gt;在了解 Go 语言是不是面向对象（简称：OOP） 之前，我们必须先知道 OOP 是啥，得先给他 “下定义”。&lt;/p&gt;&#xA;&lt;p&gt;根据 Wikipedia 的定义，我们梳理出 OOP 的几个基本认知：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;面向对象编程（OOP）是一种基于 &amp;ldquo;对象&amp;rdquo; 概念的编程范式，它可以包含数据和代码：数据以字段的形式存在（通常称为属性或属性），代码以程序的形式存在（通常称为方法）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;对象自己的程序可以访问并经常修改自己的数据字段。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;对象经常被定义为类的一个实例。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;对象利用属性和方法的私有/受保护/公共可见性，对象的内部状态受到保护，不受外界影响（被封装）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;基于这几个基本认知进行一步延伸出，面向对象的三大基本特性：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;封装。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;继承。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;多态。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;至此对面向对象的基本概念讲解结束，想更进一步了解的可自行网上冲浪。&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-是面向对象的语言吗&#34;&gt;Go 是面向对象的语言吗&lt;/h2&gt;&#xA;&lt;p&gt;“Go 语言是否一门面向对象的语言？”，这是一个日经话题。官方 FAQ 给出的答复是：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bb8296e58a6d4c7c882984dcceaaf9c0~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;是的，也不是。原因是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Go 有类型和方法，并且允许面向对象的编程风格，但没有类型层次。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Go 中的 &amp;ldquo;接口 &amp;ldquo;概念提供了一种不同的方法，我们认为这种方法易于使用，而且在某些方面更加通用。还有一些方法可以将类型嵌入到其他类型中，以提供类似的东西，但不等同于子类。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Go 中的方法比 C++ 或 Java 中的方法更通用：它们可以为任何类型的数据定义，甚至是内置类型，如普通的、&amp;ldquo;未装箱的 &amp;ldquo;整数。它们并不局限于结构（类）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Go 由于缺乏类型层次，Go 中的 &amp;ldquo;对象 &amp;ldquo;比 C++ 或 Java 等语言更轻巧。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《漫谈 MQ》要消息队列（MQ）有什么用？</title>
      <link>https://note.lican.site/posts/posts/why-mq/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/why-mq/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。想是问题，做是答案。&lt;/p&gt;&#xA;&lt;p&gt;最近我有一个朋友公司踩了不少消息队列（MQ）的坑，让人无奈不已。因此计划写 MQ 系列的技术文章，来科普更多这块的知识。&lt;/p&gt;&#xA;&lt;p&gt;目前 MQ 也是互联网应用中非常常用的基础组件了，面试特爱问。基本有一定规模的系统都能看见他的踪影。&lt;/p&gt;&#xA;&lt;p&gt;无论是 RocketMQ、Kafka、RabbitMQ 等，都围绕着根本的设计出发产生不同的高级功能，甚至可能是雷同的设计有 N 个名字。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是-mq&#34;&gt;什么是 MQ&lt;/h2&gt;&#xA;&lt;p&gt;MQ 一般代指消息队列（Message Queue）。它是一个抽象层，允许多个进程（可能在不同的机器上）通过各种模式（例如：点对点，发布订阅等）进行通信。&lt;/p&gt;&#xA;&lt;p&gt;也可以根据不同的实现，它可以被配置为保证可靠性、错误报告、安全、发现、性能等。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么需要-mq&#34;&gt;为什么需要 MQ&lt;/h2&gt;&#xA;&lt;p&gt;在当下 MQ 的必要场景，比较经典的说辞就是 “异步、削峰、解耦”。是各类秒杀系统的设计核心，甚至会作为不少云厂商的卖点，每家都有自己的生态圈。&lt;/p&gt;&#xA;&lt;p&gt;核心分为三个要点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;解耦。&lt;/li&gt;&#xA;&lt;li&gt;削峰。&lt;/li&gt;&#xA;&lt;li&gt;异步。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;解耦&#34;&gt;解耦&lt;/h3&gt;&#xA;&lt;p&gt;在业务系统设计中，我们常常会与一个平台系统 A，他汇聚了许许多多的系统的对接。例如，系统 A 作为平台拥有大量用户操作，自然就有非常多的用户行为。&lt;/p&gt;&#xA;&lt;p&gt;虽然他自己可能不大需要，但是其他子系统就不同了，会要系统 A 来调用他们提供的接口，传输各种行为数据。&lt;/p&gt;&#xA;&lt;p&gt;其链路依赖如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/84478d2799861f81519ede0ba4ceb91d.jpg&#34; alt=&#34;多重依赖&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这时候作为平台方的系统 A 就烦死了，来一个要对接一个，就得安排一个人排工期和迭代。对方还有可能出现系统不稳定，还得关注他们的稳定性和诉求。&lt;/p&gt;&#xA;&lt;p&gt;但用了 MQ 后就不一样了，如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/b6c79dbe5c848ed32e347de4042cd9b6.jpg&#34; alt=&#34;MQ 解耦直接依赖&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;系统 A 只需要将消息放到 MQ 中去，不管以后是对接系统 B、C、D、E&amp;hellip;，他都不需要太关心，不用一个个对接。用业务同学的话来讲，就是：“自己看文档，去 MQ 里拿，别来骚扰我”。&lt;/p&gt;&#xA;&lt;p&gt;以此 MQ 达到了系统间解耦的目的。&lt;/p&gt;&#xA;&lt;h3 id=&#34;削峰&#34;&gt;削峰&lt;/h3&gt;&#xA;&lt;p&gt;在 2C 类别的业务系统中，常常会有活动的概念，要面向用户做促销，像我们常见的双 11、618 都是这类营销，也是营销场景。&lt;/p&gt;&#xA;&lt;p&gt;但这种场景之下，会对系统产生较大的冲击。类似八二原则，也就是 80% 的流量集中在某个时间冲击进来，形成了流量尖峰（高 QPS），系统会因为承受不了如此大的压力，从而宕机。&lt;/p&gt;&#xA;&lt;p&gt;如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/e396606bb1aec70b43a7016933880f09.jpg&#34; alt=&#34;用户直接并发访问&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;用户的请求会经由系统 A 直击数据库。当然，在活动场景下的大流量，数据库自然也就撑不住了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《漫谈 MQ》设计 MQ 的 3 个难点</title>
      <link>https://note.lican.site/posts/posts/mq-nodus/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/mq-nodus/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间我们分享了漫谈 MQ 的第一期《要消息队列（MQ）有什么用？》，感觉打开了一个新的世界。&lt;/p&gt;&#xA;&lt;p&gt;但很快就有小伙伴意识到了不妙，既然 MQ 承接了多个系统，那岂不是该有的问题，他都有，又或是更甚。如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/45b00332-9a06-49b6-a666-675890409c94.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天我们就进一步讲讲，&lt;strong&gt;设计 MQ 时很有可能会遇到的几个大难点&lt;/strong&gt;，在业内又配套用了什么解决方案去处理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;几个难点&#34;&gt;几个难点&lt;/h2&gt;&#xA;&lt;p&gt;从结论上来看，设计 MQ 这一个存在。会至少引发三大难点。堪称互联网经典的，也是面试官们最爱问的：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;高可用：代表系统的可用性程度，高可用性通常通过提高系统的容错能力来实现，从而减少系统宕机时间。&lt;/li&gt;&#xA;&lt;li&gt;高并发：代表通过设计保证系统能够同时并行处理很多请求，在同一个时间点，有很多用户同时访问同一系统、API、URL。&lt;/li&gt;&#xA;&lt;li&gt;高可靠：代表能够满足预计条件的一个系统或组件（例如：备份、故障处理、数据存储以及访问），比较经典的是 4 个9 等标准。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;高可用&#34;&gt;高可用&lt;/h3&gt;&#xA;&lt;p&gt;像前面评论区留言的兄弟截图表述的一样。&lt;/p&gt;&#xA;&lt;p&gt;虽然请求不直接找系统 A、B、C、D 了。但是请求都实打实的通过异步的方式打到了 MQ 上，就可以不断往 MQ 塞，变成了多个系统都在请求 MQ，可以认为压力比单系统同步调用大了不止一倍。&lt;/p&gt;&#xA;&lt;p&gt;同时 MQ 还要去做消费关系的维护，存储既有和新增的大量消息。是一个既要也要还要的典型场景。&lt;/p&gt;&#xA;&lt;p&gt;这样一来，新的一轮问题就出现了。就是要保证 MQ 的高可用，否则他轻轻松松就会被压到宕机，或是负载过高，出现一些匪夷所思的延迟。&lt;/p&gt;&#xA;&lt;p&gt;如何保证 MQ 的高可用，是一个大问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;高并发&#34;&gt;高并发&lt;/h3&gt;&#xA;&lt;p&gt;在高并发上的诉求上，其实是和高可用的场景是一样的。既然各业务系统都是异步的了，自然他也就不会像同步阻塞一样 “等” 你。&lt;/p&gt;&#xA;&lt;p&gt;像是我有一个朋友，他们喜欢批量清洗多租户的数据。业务程序也不怎么节制，几十、几百、上千万数据，利用 Go 语言写的，抄起 for-loop+go func 就是一把梭。刷刷刷一下子就就给打进 MQ 里。&lt;/p&gt;&#xA;&lt;p&gt;再多来几个业务系统这么干，这 MQ 并发就比较高了，单单维护就是头疼。很有可能事故背着背着，年底就 3.25 了。因为 MQ，在业务中的依赖非常重，是标准的核心基础设施。&lt;/p&gt;&#xA;&lt;p&gt;如何保证 MQ 能够承受高并发，是一个大问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;高可靠&#34;&gt;高可靠&lt;/h3&gt;&#xA;&lt;p&gt;对 MQ 来讲，高可靠性的诉求，又分为好几个角度去理解。如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;消息要靠谱：“我” 发的消息要能够可靠的到达 MQ，MQ 要能够正确的让消费者能够接收到推送或拉取。&lt;/li&gt;&#xA;&lt;li&gt;存储要靠谱：“我” 发的消息，还在 MQ 上时要存储好，不能发到 MQ 上就因为大量数据，丢了。又或是查询很慢。&lt;/li&gt;&#xA;&lt;li&gt;处理要靠谱：发了消息，可能会出现异常。发了消息，可能网络抖动，没有接收到。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;上述我们列了三点 “要靠谱” 的内容。实质上，对于 MQ 来讲，其每一块领域都要保证其可靠性，否则查起问题来，真的是会非常崩溃。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 凭什么不支持三元运算符？</title>
      <link>https://note.lican.site/posts/posts/go/ternary-operator/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/ternary-operator/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;这是一个很多其他语言工程师转 Go 语言的时间节点，这就难免不论一番比较。其中一个经典的运算上的就是 “三元运算符”：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/05766eebaf454d7fb91b60ab1c851cf4~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;为什么 Go 语言不支持三元运算符，Go 不支持三元运算符就是设计的不好，是历史在开倒车吗？&lt;/p&gt;&#xA;&lt;p&gt;今天就由煎鱼来和大家一起摸索为什么。&lt;/p&gt;&#xA;&lt;h2 id=&#34;三元运算符是什么&#34;&gt;三元运算符是什么&lt;/h2&gt;&#xA;&lt;p&gt;三元运算符，在典型的数学意义上，或者从解析器的角度来看，是一个需要三个参数的运算符。而我们日常中，最常见的是二元运算符：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;x + y&#xA;x / y&#xA;x * y&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;还有一元运算符：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;-a&#xA;~b&#xA;!c&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;以及今天的男主角 “三元运算符”。在 C/C++ 等多种语言中，我们可以根据条件声明和初始化变量的习惯来选择性使用三元条件运算符：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;int index = val &amp;gt; 0 ? val : -val&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;go-使用三元运算符&#34;&gt;Go 使用三元运算符&lt;/h2&gt;&#xA;&lt;p&gt;想在 Go 语言里也使用三元运算符时，发现居然没有&amp;hellip;想要实现与上面相同的代码段的方式似乎只能：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var index int&#xA;&#xA;if val &amp;gt; 0 {&#xA;    index = val&#xA;} else {&#xA;    index = -val&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;看上去十分的冗余，不够简洁。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么-go-没有三元运算符&#34;&gt;为什么 Go 没有三元运算符&lt;/h2&gt;&#xA;&lt;p&gt;为什么 Go 没有 &lt;code&gt;?:&lt;/code&gt; 操作符，没有的话，官方推荐的方式是怎么样的。&lt;/p&gt;&#xA;&lt;p&gt;通过 Go FAQ 我们可以得知：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 并发读写 sync.map 的强大之处</title>
      <link>https://note.lican.site/posts/posts/go/sync-map/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/sync-map/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在之前的 《&lt;a href=&#34;http://mp.weixin.qq.com/s?__biz=MzUxMDI4MDc1NA==&amp;amp;mid=2247489045&amp;amp;idx=1&amp;amp;sn=197bda427246e16907c7b471a5dc0572&amp;amp;chksm=f9040348ce738a5ebf541954a4de29ce746238ab7f6e5a2af8a1765c5383ad4208f43b2bac4f&amp;amp;scene=21#wechat_redirect&#34;&gt;为什么 Go map 和 slice 是非线程安全的？&lt;/a&gt;》 文章中，我们讨论了 Go 语言的 map 和 slice 非线程安全的问题，基于此引申出了 map 的两种目前在业界使用的最多的并发支持的模式。&lt;/p&gt;&#xA;&lt;p&gt;分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;原生 map + 互斥锁或读写锁 mutex。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;标准库 sync.Map（Go1.9及以后）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;有了选择，总是有选择困难症的，这&lt;strong&gt;两种到底怎么选，谁的性能更加的好&lt;/strong&gt;？我有一个朋友说 标准库 sync.Map 性能菜的很，不要用。我到底听谁的&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;今天煎鱼就带你揭秘 Go sync.map，我们先会了解清楚什么场景下，Go map 的多种类型怎么用，谁的性能最好！&lt;/p&gt;&#xA;&lt;p&gt;接着根据各 map 性能分析的结果，针对性的对 sync.map 进行源码解剖，了解 WHY。&lt;/p&gt;&#xA;&lt;p&gt;一起愉快地开始吸鱼之路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;syncmap-优势&#34;&gt;sync.Map 优势&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 官方文档中明确指出 Map 类型的一些建议：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6500ee41a08a415ca681fa427f5032b3~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;多个 goroutine 的并发使用是安全的，不需要额外的锁定或协调控制。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;大多数代码应该使用原生的 map，而不是单独的锁定或协调控制，以获得更好的类型安全性和维护性。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;同时 Map 类型，还针对以下场景进行了性能优化：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;当一个给定的键的条目只被写入一次但被多次读取时。例如在仅会增长的缓存中，就会有这种业务场景。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;当多个 goroutines 读取、写入和覆盖不相干的键集合的条目时。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这两种情况与 Go map 搭配单独的 Mutex 或 RWMutex 相比较，使用 Map 类型可以大大减少锁的争夺。&lt;/p&gt;</description>
    </item>
    <item>
      <title>回答我，停止 Goroutine 有几种方法？</title>
      <link>https://note.lican.site/posts/posts/go/stop-goroutine/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/stop-goroutine/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;协程（goroutine）作为 Go 语言的扛把子，经常在各种 Go 工程项目中频繁露面，甚至有人会为了用 goroutine 而强行用他。&lt;/p&gt;&#xA;&lt;p&gt;在 Go 工程师的面试中，也绕不开他，会有人问 ”如何停止一个 goroutine？”，一下子就把话题范围扩大了，这是一个涉及多个知识点的话题，能进一步深入问。&lt;/p&gt;&#xA;&lt;p&gt;为此，今天煎鱼就带大家了解一下停止 goroutine 的方法！&lt;/p&gt;&#xA;&lt;h2 id=&#34;goroutine-案例&#34;&gt;goroutine 案例&lt;/h2&gt;&#xA;&lt;p&gt;在日常的工作中，我们常会有这样的 Go 代码，go 关键字一把搜起一个 goroutine：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() { &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;初入 goroutine 大门的开发者可能就完事了，但跑一段时间后，他就可能会遇到一些问题，苦苦排查&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;像是：当 goroutine 内的任务，运行的太久，又或是卡死了&amp;hellip;就会一直阻塞在系统中，变成 goroutine 泄露，或是间接造成资源暴涨，会带来许多的问题。&lt;/p&gt;&#xA;&lt;p&gt;如何在停止 goroutine，就成了一门必修技能了，不懂就没法用好 goroutine。&lt;/p&gt;&#xA;&lt;h2 id=&#34;关闭-channel&#34;&gt;关闭 channel&lt;/h2&gt;&#xA;&lt;p&gt;第一种方法，就是借助 channel 的 close 机制来完成对 goroutine 的精确控制。&lt;/p&gt;&#xA;&lt;p&gt;代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; !&lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;结束&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼还没进锅里...&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼进脑子里了！&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;close(&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在 Go 语言的 channel 中，channel 接受数据有两种方法：&lt;/p&gt;</description>
    </item>
    <item>
      <title>多 Goroutine 如何优雅处理错误？</title>
      <link>https://note.lican.site/posts/posts/go/goroutine-errors/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/goroutine-errors/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在 Go 语言中，goroutine 的使用是非常频繁的，因此在日常编码的时候我们会遇到一个问题，那就是 goroutine 里面的错误处理，怎么做比较好？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/72758b15-f9b7-4437-ba17-b37a36f285ae.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这是来自我读者群的问题。作为一个宠粉煎鱼，我默默记下了这个技术话题。今天煎鱼就大家来看看多 goroutine 的错误处理机制也有哪些！&lt;/p&gt;&#xA;&lt;p&gt;一般来讲，我们的业务代码会是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sync&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;WaitGroup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Done&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼想报错...&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Done&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述代码中，我们运行了多个 goroutine。但我想抛出 error 的错误信息出来，似乎没什么好办法&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;通过错误日志记录&#34;&gt;通过错误日志记录&lt;/h2&gt;&#xA;&lt;p&gt;为此，业务代码中常见的第一种方法：通过把错误记录写入日志文件中，再结合相关的 logtail 进行采集和梳理。&lt;/p&gt;&#xA;&lt;p&gt;但这又会引入新的问题，那就是调用错误日志的方法写的到处都是。代码结构也比较乱，不直观。&lt;/p&gt;&#xA;&lt;p&gt;最重要的是无法针对 error 做特定的逻辑处理和流转。&lt;/p&gt;&#xA;&lt;h2 id=&#34;利用-channel-传输&#34;&gt;利用 channel 传输&lt;/h2&gt;&#xA;&lt;p&gt;这时候大家可能会想到 Go 的经典哲学：&lt;strong&gt;不要通过共享内存来通信，而是通过通信来实现内存共享&lt;/strong&gt;（Do not communicate by sharing memory; instead, share memory by communicating）。&lt;/p&gt;&#xA;&lt;p&gt;第二种的方法：利用 channel 来传输多个 goroutine 中的 errors：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gerrors&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wgDone&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;sync&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;WaitGroup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Done&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;returnError&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gerrors&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Done&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;wg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Wait&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;close(&lt;span style=&#34;color:#a6e22e&#34;&gt;wgDone&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;wgDone&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gerrors&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;close(&lt;span style=&#34;color:#a6e22e&#34;&gt;gerrors&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;returnError&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;errors&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;New&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼报错了...&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>小技巧分享：在 Go 如何实现枚举？</title>
      <link>https://note.lican.site/posts/posts/go/enum/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/enum/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在日常的业务工程开发中，我们常常会有使用枚举值的诉求，枚举控的好，测试值边界一遍过&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;有的小伙伴会说，在 Go 语言不是有 &lt;code&gt;iota&lt;/code&gt; 类型做枚举吗，那煎鱼你这篇文章还讲什么？&lt;/p&gt;&#xA;&lt;p&gt;讲道理，Go 语言并没有 enum 关键字，有用过 Protobuf 等的小伙伴知道，Go 语言只是 ”有限的枚举“ 支持，我们也会用常量来定义，枚举值也需要有字面意思的映射。&lt;/p&gt;&#xA;&lt;h2 id=&#34;示例&#34;&gt;示例&lt;/h2&gt;&#xA;&lt;p&gt;在一些业务场景下，是没法达到我们的诉求的。示例如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type FishType int&#xA;&#xA;const (&#xA; A FishType = iota&#xA; B&#xA; C&#xA; D&#xA;)&#xA;&#xA;func main() {&#xA; fmt.Println(A, B, C, D)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果为：“0 1 2 3”。这时候就一脸懵逼了&amp;hellip;枚举值，应该除了键以外，还得有个对应的值。也就是这个 “0 1 2 3” 分别对应着什么含义，是不是应该输出 ”A B C D“&lt;/p&gt;&#xA;&lt;p&gt;但 Go 语言这块就没有直接的支撑了，因此这不是一个完整的枚举类型的实现。&lt;/p&gt;&#xA;&lt;p&gt;同时假设我们传入超过 &lt;code&gt;FishType&lt;/code&gt; 类型声明范围的枚举值，在 Go 语言中默认也不会有任何控制，是正常输出的。&lt;/p&gt;&#xA;&lt;p&gt;上述这种 Go 枚举实现，在某种情况下是不完全的，严格意义上不能成为 enum（枚举）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用-string-做枚举&#34;&gt;使用 String 做枚举&lt;/h2&gt;&#xA;&lt;p&gt;如果要支持枚举值的对应输出的话，我们可以通过如下方式：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type FishType int&#xA;&#xA;const (&#xA; A FishType = iota&#xA; B&#xA; C&#xA; D&#xA;)&#xA;&#xA;func (f FishType) String() string {&#xA; return [...]string{&amp;#34;A&amp;#34;, &amp;#34;B&amp;#34;, &amp;#34;C&amp;#34;, &amp;#34;D&amp;#34;}[f]&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;运行程序：&lt;/p&gt;</description>
    </item>
    <item>
      <title>提高 Go 程序健壮性，Fuzzing 要来了！</title>
      <link>https://note.lican.site/posts/posts/go/fuzzing/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/fuzzing/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;就在前几天，Go1.17 beta1 正式发布：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/fb4ceb3d-ef1c-4c32-a7c3-a4188a0d74b0.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;兴冲冲本想着看一下当初在 Go1.17 的计划中，预计会支持的新特性：模糊测试（Fuzzing）。不过没想到&amp;hellip;计划赶不上变化，官方正式宣告 Fuzzing 不会出现在 Go1.17 的新功能中。&lt;/p&gt;&#xA;&lt;p&gt;煎鱼在悲伤之际，发现 Go 在 dev.fuzz 分支上提供了该功能的 Beta 测试，因此今天带大家一起来深入该特性。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是-fuzzing&#34;&gt;什么是 Fuzzing&lt;/h2&gt;&#xA;&lt;p&gt;Fuzzing 是一种自动测试技术，包括向计算机程序提供随机数据作为输入。然后监测程序是否出现恐慌、断言失败、无限循环等。&lt;/p&gt;&#xA;&lt;p&gt;Fuzzing 不是使用一个小的、预先定义好的手动创建的输入集（如单元测试），而是用新的案例不断地测试代码，以努力 ”锻炼“ 有关软件的所有方面。&lt;/p&gt;&#xA;&lt;p&gt;这听起来很 ”难“。但在过去的几年里，Fuzzing 的技术水平有了很大的提高。Fuzzing 不再是需要专业知识才能成功使用的东西，现代模糊测试策略能更快、更有效地找到有用的输入。&lt;/p&gt;&#xA;&lt;p&gt;在应用程序中，就是你只要引入一个 package，对着 API 一顿用就可以了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要做-fuzzing&#34;&gt;为什么要做 Fuzzing&lt;/h2&gt;&#xA;&lt;p&gt;可能会有小伙伴说，测试？直接人工测试，再把测试数据准备一下，配套 YAPI 等接口管理平台，把自动化接口测试一弄就好了。还需要 Fuzzing 吗？&lt;/p&gt;&#xA;&lt;p&gt;其实 Fuzzing 是对其他形式的测试、代码审查和静态分析的补充，它通过生成一个随机测试用例去覆盖人为测不到的各种复杂场景。而这些输入几乎不可能人为去构造，总会被传统测试所遗漏。&lt;/p&gt;&#xA;&lt;h2 id=&#34;发生在身边的-fuzzing&#34;&gt;发生在身边的 Fuzzing&lt;/h2&gt;&#xA;&lt;p&gt;实际上 Go-fuzz 对 Go 标准库进行过测试，依然这这之中发现了 200  多个 bug：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/9b00972c-2231-4406-84b8-2e8e44f57d6d.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这还是建立在标准库已经比较成熟，且由非常有经验的开发者编写，在生产中使用多年的情况下，依然有如此多的问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;快速上手&#34;&gt;快速上手&lt;/h2&gt;&#xA;&lt;p&gt;我们需要在本地执行如下命令，需开启 GO111MODULE 和天梯：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;golang&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;org&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;dl&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gotip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;$&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gotip&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;download&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;dev&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fuzz&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行完毕后会从 dev.fuzz 分支构建 Go 工具链，同时 gotip 可以作为 go 命令的替代者命令，也就是可以运行 Fuzzing 的相关代码了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么 Go map 和 slice 是非线程安全的？</title>
      <link>https://note.lican.site/posts/posts/go/map-slice-concurrency/</link>
      <pubDate>Fri, 31 Dec 2021 12:54:49 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map-slice-concurrency/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;初入 Go 语言的大门，有不少的小伙伴会快速的 3 天精通 Go，5 天上手项目，14 天上线业务迭代，21 天排查、定位问题，顺带捎个反省报告。&lt;/p&gt;&#xA;&lt;p&gt;其中最常见的初级错误，Go 面试较最爱问的问题之一：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/8d1a0506617a4729abe35927d87508d0~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&#xA;（来自读者提问）&lt;/p&gt;&#xA;&lt;p&gt;为什么在 Go 语言里，map 和 slice 不支持并发读写，也就是是非线程安全的，为什么不支持？&lt;/p&gt;&#xA;&lt;p&gt;见招拆招后，紧接着就会开始讨论如何让他们俩 ”冤家“ 支持并发读写？&lt;/p&gt;&#xA;&lt;p&gt;今天我们这篇文章就来理一理，了解其前因后果，一起吸鱼学懂 Go 语言。&lt;/p&gt;&#xA;&lt;h2 id=&#34;非线程安全的例子&#34;&gt;非线程安全的例子&lt;/h2&gt;&#xA;&lt;h3 id=&#34;slice&#34;&gt;slice&lt;/h3&gt;&#xA;&lt;p&gt;我们使用多个 goroutine 对类型为 slice 的变量进行操作，看看结果会变的怎么样。&lt;/p&gt;&#xA;&lt;p&gt;如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA; var s []string&#xA; for i := 0; i &amp;lt; 9999; i++ {&#xA;  go func() {&#xA;   s = append(s, &amp;#34;脑子进煎鱼了&amp;#34;)&#xA;  }()&#xA; }&#xA;&#xA; fmt.Printf(&amp;#34;进了 %d 只煎鱼&amp;#34;, len(s))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 第一次执行&#xA;进了 5790 只煎鱼&#xA;// 第二次执行&#xA;进了 7370 只煎鱼&#xA;// 第三次执行&#xA;进了 6792 只煎鱼&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;你会发现无论你执行多少次，每次输出的值大概率都不会一样。也就是追加进 slice 的值，出现了覆盖的情况。&lt;/p&gt;</description>
    </item>
    <item>
      <title>linux常见指令</title>
      <link>https://note.lican.site/tech/linux%E5%B8%B8%E8%A7%81%E6%8C%87%E4%BB%A4/</link>
      <pubDate>Mon, 27 Dec 2021 15:11:18 +0800</pubDate>
      <guid>https://note.lican.site/tech/linux%E5%B8%B8%E8%A7%81%E6%8C%87%E4%BB%A4/</guid>
      <description>&lt;h3 id=&#34;scp&#34;&gt;SCP&lt;/h3&gt;&#xA;&lt;p&gt;描述：远程复制&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;scp -r mysql 175.24.207.175:/home/work/dockerProject/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;将当前服务器的mysql复制到175.24.207.175服务器的/home/work/dockerProject/目录下&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;du&#34;&gt;DU&lt;/h3&gt;&#xA;&lt;p&gt;描述：查看大小&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;du -sh project&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;查看project文件夹占用空间大小&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;df--h&#34;&gt;df -h&lt;/h3&gt;&#xA;&lt;p&gt;描述：查看物理磁盘空间&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;df -h&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;物理盘使用情况&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
    </item>
    <item>
      <title>Go 数组比切片好在哪？</title>
      <link>https://note.lican.site/posts/posts/go/go-array-slice/</link>
      <pubDate>Fri, 17 Sep 2021 12:43:08 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-array-slice/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间有播放一条快讯，就是 Go1.17 会正式支持切片（Slice）转换到数据（Array），不再需要用以前那种骚办法了，安全了许多。&lt;/p&gt;&#xA;&lt;p&gt;但是也有同学提出了新的疑惑，在 Go 语言中，数组其实是用的相对较少的，甚至会有同学认为在 Go 里可以把数组给去掉。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9764cd832d1e4875953b66434beab8e4~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;数组相较切片到底有什么优势，我们又应该在什么场景下使用呢？&lt;/p&gt;&#xA;&lt;p&gt;这是一个我们需要深究的问题，因此今天就跟大家一起来一探究竟，本文会先简单介绍数组和切片是什么，再进一步对数组的使用场景剖析。&lt;/p&gt;&#xA;&lt;p&gt;一起愉快地开始吸鱼之路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;数组是什么&#34;&gt;数组是什么&lt;/h2&gt;&#xA;&lt;p&gt;Go 语言中有一种基本数据类型，叫数组。其格式为：&lt;code&gt;[n]T&lt;/code&gt;。是一个包含 N 个类型 T 的值的数组。&lt;/p&gt;&#xA;&lt;p&gt;基本声明格式为：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;var a [10]int&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;代表的是声明了一个变量 a 是一个包含 10 个整数的数组。数组的长度是其类型的一部分，所以数组不能被随意调整大小。&lt;/p&gt;&#xA;&lt;p&gt;在使用例子上：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA; var a [2]string&#xA; a[0] = &amp;#34;脑子进&amp;#34;&#xA; a[1] = &amp;#34;煎鱼了&amp;#34;&#xA; fmt.Println(a[0], a[1])&#xA; fmt.Println(a)&#xA;&#xA; primes := [6]int{2, 3, 5, 7, 11, 13}&#xA; fmt.Println(primes)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;脑子进 煎鱼了&#xA;[脑子进 煎鱼了]&#xA;[2 3 5 7 11 13]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在赋值和访问上，数组可以针对不同的索引，进行单独操作。在内存布局上，数组的索引 0 和 1&amp;hellip;是会在相邻区域，可直接访问。&lt;/p&gt;&#xA;&lt;h2 id=&#34;切片是什么&#34;&gt;切片是什么&lt;/h2&gt;&#xA;&lt;p&gt;为什么数组在业务代码似乎用的很少。因为 Go 语言有一个切片的数据类型：&lt;/p&gt;</description>
    </item>
    <item>
      <title>上帝视角看 “Go 项目标准布局” 之争</title>
      <link>https://note.lican.site/posts/posts/go/go-standards/</link>
      <pubDate>Mon, 13 Sep 2021 23:34:23 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-standards/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间 Go 语言社区有一件事情引爆了热议，那就是 &lt;code&gt;golang-standards/project-layout&lt;/code&gt; 项目的 “Go 项目的标准布局” 之争。&lt;/p&gt;&#xA;&lt;p&gt;没想到，五一假期，认真一看，这个 issues 已经提出将近一个月了，仍然在热议阶段，我想，咱们需要好好的聊聊这个话题。&lt;/p&gt;&#xA;&lt;p&gt;煎鱼带你了解下的前因后果，再分享我的看法和业务真实情况。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;h3 id=&#34;问题发生地&#34;&gt;问题发生地&lt;/h3&gt;&#xA;&lt;p&gt;在 GitHub 上有一个项目 Spaghetti（github.com/adonovan/spaghetti），是 Go 软件包的一个依赖性分析工具。&lt;/p&gt;&#xA;&lt;p&gt;该项目的目录结构如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/11b7f74aa3944e509c89bcbfc51a2c99~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;看上去并不复杂，代码量不多，文件平铺也不超过一屏，就是一个布局比较简单的项目。&lt;/p&gt;&#xA;&lt;p&gt;有一位老哥提出了一个 PR，明确的期望该项目按照 &lt;code&gt;golang-standards/project-layout&lt;/code&gt; 项目给出的 “标准” 布局来调整。：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e0da59130ce94ee190d51491396d6919~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我猜测该项目可能是因为把 Go、HTML、JS、PNG 和 go.mod 文件等摆在了一起，引起了该同学的一丝丝纠结，觉得比较乱？&lt;/p&gt;&#xA;&lt;h3 id=&#34;标准布局-长什么样子&#34;&gt;“标准布局“ 长什么样子&lt;/h3&gt;&#xA;&lt;p&gt;在 &lt;code&gt;golang-standards/project-layout&lt;/code&gt; 项目中，其自称：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/55511ceb43cb48c59d0ce302783eec59~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;图片&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;项目的组织名也是 &amp;ldquo;golang-standards&amp;rdquo;，其提供了一个基本的 Go 项目布局，精简展示如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;project-layout&#xA;├── api&#xA;├── cmd&#xA;├── configs&#xA;├── docs&#xA;├── go.mod&#xA;├── init&#xA;├── internal&#xA;├── pkg&#xA;├── scripts&#xA;├── vendor&#xA;├── ...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;/cmd：项目主要的应用程序。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 Go map 要注意这个细节，避免依赖他！</title>
      <link>https://note.lican.site/posts/posts/go/go-map-access/</link>
      <pubDate>Sun, 12 Sep 2021 17:47:29 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-map-access/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近又有同学问我这个日经话题，想转他文章时，结果发现我的公众号竟然没有发过，因此今天我再唠叨两句，好让大家避开这个 “坑”。&lt;/p&gt;&#xA;&lt;p&gt;有的小伙伴没留意过 Go map 输出、遍历顺序，&lt;strong&gt;以为它是稳定的有序的，会在业务程序中直接依赖这个结果集顺序，结果栽了个大跟头&lt;/strong&gt;，吃了线上 BUG。&lt;/p&gt;&#xA;&lt;p&gt;有的小伙伴知道是无序的，但却不知道为什么,有的却理解错误？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://wx2.sinaimg.cn/large/006fVPCvly1g1s1ah84k8j30k70dvaac.jpg&#34; alt=&#34;奇怪的输出结果&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天通过本文，我们将揭开 &lt;code&gt;for range map&lt;/code&gt; 输出的 “神秘” 面纱，看看它内部实现到底是怎么样的，顺序到底是怎么样？&lt;/p&gt;&#xA;&lt;p&gt;开始吸鱼之路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY2&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY4&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY5&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;k: %v, v: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;假设运行这段代码，输出的结果是怎么样？是有序，还是无序输出呢？&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;k: 3, v: EDDYCJY4&#xA;k: 4, v: EDDYCJY5&#xA;k: 0, v: EDDYCJY1&#xA;k: 1, v: EDDYCJY2&#xA;k: 2, v: EDDYCJY3&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从输出结果上来讲，是非固定顺序输出的，也就是每次都不一样。但这是为什么呢？&lt;/p&gt;&#xA;&lt;p&gt;首先&lt;strong&gt;建议你先自己想想原因&lt;/strong&gt;。其次我在面试时听过一些说法。有人说因为是哈希的所以就是无（乱）序等等说法。当时我是有点 ？？？&lt;/p&gt;&#xA;&lt;p&gt;这也是这篇文章出现的原因，希望大家可以一起研讨一下，理清这个问题 ：）&lt;/p&gt;&#xA;&lt;h2 id=&#34;看一下汇编&#34;&gt;看一下汇编&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;    ...&#xA;&#x9;0x009b 00155 (main.go:11)&#x9;LEAQ&#x9;type.map[int32]string(SB), AX&#xA;&#x9;0x00a2 00162 (main.go:11)&#x9;PCDATA&#x9;$2, $0&#xA;&#x9;0x00a2 00162 (main.go:11)&#x9;MOVQ&#x9;AX, (SP)&#xA;&#x9;0x00a6 00166 (main.go:11)&#x9;PCDATA&#x9;$2, $2&#xA;&#x9;0x00a6 00166 (main.go:11)&#x9;LEAQ&#x9;&amp;#34;&amp;#34;..autotmp_3+24(SP), AX&#xA;&#x9;0x00ab 00171 (main.go:11)&#x9;PCDATA&#x9;$2, $0&#xA;&#x9;0x00ab 00171 (main.go:11)&#x9;MOVQ&#x9;AX, 8(SP)&#xA;&#x9;0x00b0 00176 (main.go:11)&#x9;PCDATA&#x9;$2, $2&#xA;&#x9;0x00b0 00176 (main.go:11)&#x9;LEAQ&#x9;&amp;#34;&amp;#34;..autotmp_2+72(SP), AX&#xA;&#x9;0x00b5 00181 (main.go:11)&#x9;PCDATA&#x9;$2, $0&#xA;&#x9;0x00b5 00181 (main.go:11)&#x9;MOVQ&#x9;AX, 16(SP)&#xA;&#x9;0x00ba 00186 (main.go:11)&#x9;CALL&#x9;runtime.mapiterinit(SB)&#xA;&#x9;0x00bf 00191 (main.go:11)&#x9;JMP&#x9;207&#xA;&#x9;0x00c1 00193 (main.go:11)&#x9;PCDATA&#x9;$2, $2&#xA;&#x9;0x00c1 00193 (main.go:11)&#x9;LEAQ&#x9;&amp;#34;&amp;#34;..autotmp_2+72(SP), AX&#xA;&#x9;0x00c6 00198 (main.go:11)&#x9;PCDATA&#x9;$2, $0&#xA;&#x9;0x00c6 00198 (main.go:11)&#x9;MOVQ&#x9;AX, (SP)&#xA;&#x9;0x00ca 00202 (main.go:11)&#x9;CALL&#x9;runtime.mapiternext(SB)&#xA;&#x9;0x00cf 00207 (main.go:11)&#x9;CMPQ&#x9;&amp;#34;&amp;#34;..autotmp_2+72(SP), $0&#xA;&#x9;0x00d5 00213 (main.go:11)&#x9;JNE&#x9;193&#xA;&#x9;...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我们大致看一下整体过程，重点处理 Go map 循环迭代的是两个 runtime 方法，如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>生产环境遇到一个 Go 问题，整组人都懵逼了...</title>
      <link>https://note.lican.site/posts/posts/go/go-errors-boom/</link>
      <pubDate>Wed, 07 Jul 2021 12:43:49 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-errors-boom/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间正在疯狂写代码的时候，突然有一个读者给我提了一个问题，让我有了一定的兴趣：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c1011e66fe104d228dcaa2083b554fc8~tplv-k3u1fbpfcp-watermark.image&#34; alt=&#34;image.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我还是比较感兴趣的，因为是生产环境、有代码，且整组人都懵逼的问题。&lt;/p&gt;&#xA;&lt;p&gt;在征求了小伙伴的意见后，今天分享出来，大家也思考一下原因，一起规避这个 “坑”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;案例一&#34;&gt;案例一&lt;/h2&gt;&#xA;&lt;p&gt;代码示例如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyErr&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Msg&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;GetErr&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetErr&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;MyErr&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;MyErr&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Error&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;请思考一下，&lt;strong&gt;这段程序的输出结果是什么&lt;/strong&gt;？&lt;/p&gt;&#xA;&lt;p&gt;该程序所调用的 &lt;code&gt;GetErr&lt;/code&gt; 方法所返回的是 &lt;code&gt;nil&lt;/code&gt;，而外部判断是 &lt;code&gt;e == nil&lt;/code&gt;，因此最终的输出结果是 true，对吗？&lt;/p&gt;&#xA;&lt;p&gt;输出结果如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2021/04/04 08:39:04 false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;答案是：false。&lt;/p&gt;&#xA;&lt;h2 id=&#34;案例二&#34;&gt;案例二&lt;/h2&gt;&#xA;&lt;p&gt;代码示例如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;do&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;base&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Base&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;base&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;GetApp&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;base&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;base&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetApp&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;do&lt;/span&gt;() {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;请思考一下，&lt;strong&gt;这段程序的输出结果是什么&lt;/strong&gt;？&lt;/p&gt;</description>
    </item>
    <item>
      <title>经典面试题：你觉得 Go 在什么时候会抢占 P？</title>
      <link>https://note.lican.site/posts/posts/go/gmp-why-p/</link>
      <pubDate>Thu, 24 Jun 2021 12:42:05 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gmp-why-p/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天我们有聊到《单核 CPU，开两个 Goroutine，其中一个死循环，会怎么样？》的问题，我们在一个细节部分有提到：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6d9cdfb09590496daeca3675aae08611~tplv-k3u1fbpfcp-zoom-1.image&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有新的小伙伴会产生更多的疑问，那就是在 Go 语言中，是如何抢占 P 的呢，这里面是怎么做的？&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章我们就来解密抢占 P。&lt;/p&gt;&#xA;&lt;h2 id=&#34;调度器的发展史&#34;&gt;调度器的发展史&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 语言中，Goroutine 早期是没有设计成抢占式的，早期 Goroutine 只有读写、主动让出、锁等操作时才会触发调度切换。&lt;/p&gt;&#xA;&lt;p&gt;这样有一个严重的问题，就是垃圾回收器进行 STW 时，如果有一个 Goroutine 一直都在阻塞调用，垃圾回收器就会一直等待他，不知道等到什么时候&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;这种情况下就需要抢占式调度来解决问题。如果一个 Goroutine 运行时间过久，就需要进行抢占来解决。&lt;/p&gt;&#xA;&lt;p&gt;这块 Go 语言在 Go1.2 起开始实现抢占式调度器，不断完善直至今日：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go0.x：基于单线程的程调度器。&lt;/li&gt;&#xA;&lt;li&gt;Go1.0：基于多线程的调度器。&lt;/li&gt;&#xA;&lt;li&gt;Go1.1：基于任务窃取的调度器。&lt;/li&gt;&#xA;&lt;li&gt;Go1.2 - Go1.13：基于协作的抢占式调度器。&lt;/li&gt;&#xA;&lt;li&gt;Go1.14：基于信号的抢占式调度器。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;调度器的新提案：非均匀存储器访问调度（Non-uniform memory access，NUMA），&#xA;但由于实现过于复杂，优先级也不够高，因此迟迟未提上日程。&lt;/p&gt;&#xA;&lt;p&gt;有兴趣的小伙伴可以详见 Dmitry Vyukov, dvyukov 所提出的 &lt;a href=&#34;https://docs.google.com/document/u/0/d/1d3iI2QWURgDIsSR6G2275vMeQ_X7w-qxM2Vp7iGwwuM/pub&#34;&gt;NUMA-aware scheduler for Go&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要抢占-p&#34;&gt;为什么要抢占 P&lt;/h2&gt;&#xA;&lt;p&gt;为什么会要想去抢占 P 呢，说白了就是不抢，就没机会运行，会 hang 死。又或是资源分配不均了，&lt;/p&gt;&#xA;&lt;p&gt;这在调度器设计中显然是不合理的。&lt;/p&gt;&#xA;&lt;p&gt;跟这个例子一样：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// Main Goroutine &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 模拟单核 CPU&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;runtime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GOMAXPROCS&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// 模拟 Goroutine 死循环&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Millisecond&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个例子在老版本的 Go 语言中，就会一直阻塞，没法重见天日，是一个需要做抢占的场景。&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-four</title>
      <link>https://note.lican.site/project/share4/</link>
      <pubDate>Fri, 18 Jun 2021 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share4/</guid>
      <description>&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#draft-false&#34;&gt;draft: false&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#java&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#python&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#go&#34;&gt;Go&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%89%8D%E7%AB%AF&#34;&gt;前端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%A7%BB%E5%8A%A8%E7%AB%AF&#34;&gt;移动端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%B7%A5%E5%85%B7&#34;&gt;工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%8F%92%E4%BB%B6&#34;&gt;插件&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E9%9B%86%E5%90%88&#34;&gt;资料集合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E4%B9%A6%E7%B1%8D%E6%95%99%E7%A8%8B&#34;&gt;书籍/教程&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&#34;&gt;机器学习/人工智能&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%89%E8%B6%A3%E5%AE%9E%E7%94%A8%E7%BD%91%E7%AB%99&#34;&gt;有趣/实用网站&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E4%BB%96&#34;&gt;其他&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%A3%B0%E6%98%8E&#34;&gt;声明&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;java&#34;&gt;Java&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apache/incubator-shenyu&#34;&gt;Apache Shenyu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可应用于所有微服务场景的 API 网关解决方案，具备可扩展、高性能、响应式等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L76U9dw8z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wkeyuan/DWSurvey&#34;&gt;DWSurvey&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单高效、成熟稳定的开源问卷系统。部署简单、更新便捷，一行命令完成部署，支持多达 40 多种题型，拥有数据实时统计、富文本编辑、多端适配等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L68O16vuH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/acmenlt/dynamic-threadpool&#34;&gt;Hippo4J&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Java 动态线程池系统，附带监控报警功能（不依赖中间件），遵循了阿里的编码规范。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4i6CtTFI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ssssssss-team/spider-flow&#34;&gt;Spider Flow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个高度灵活可配置的爬虫平台，用户无需编写代码，以流程图的方式，即可实现爬虫。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2e3doG8f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kekingcn/kkFileView&#34;&gt;file-online-preview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的文件文档在线预览项目，支持主流办公文档的在线预览，如 doc、docx、Excel、pdf、txt、zip、rar、 图片等格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1zZ6zGb5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/didi/LogiCommon&#34;&gt;LogiCommon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;滴滴在 GitHub 开源的一套 Java 版认证、鉴权、管理、任务调度通用功能组件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KApx8iHLr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kunal-kushwaha/DSA-Bootcamp-Java&#34;&gt;DSA-Bootcamp-Java&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Java 数据结构与算法代码示例库。整理了油管博主 Kunal Kushwaha 的课程代码示例、作业、视频教程等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuEFuFnWU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RedSpider1/concurrent&#34;&gt;《深入浅出 Java 多线程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的 Java 编程书籍，该书分为基础篇、原理篇、JDK 工具篇等三个篇章，并辅以图片和 Demo，让 Java 工程师可以更加轻松的理解 Java 多线程相关基础知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtzuY29Fw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yuanguangxin/LeetCode&#34;&gt;LeetCode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者整理的 LeetCode 题目分类与面试题答案解析。涵盖链表、指针遍历、字符串操作、堆栈、递归、动态规划、二叉搜索树等知识点，题解代码基于 Java 实现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KswuoaQhR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/youzhengjie9/yblog&#34;&gt;yblog&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自大二学生开源的一个简单、功能齐全的 SpringBoot 博客系统，主要拥有博文管理、图表统计、接口监控、访问记录、附件管理、用户管理、友链管理、监控管理、博文抓取，以及第三方登录等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ks1QLe7xh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doocs/source-code-hunter&#34;&gt;《互联网公司常用框架源码赏析》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Java 知识库，项目致力于从源码层面，剖析和挖掘互联网行业主流技术的底层实现原理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kq3ikfwRZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jetlinks/jetlinks-community&#34;&gt;JetLinks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的物联网基础平台，该平台基于 Java8、Spring Boot 搭建而成，是一个开箱即用，可二次开发的企业级物联网基础平台。平台实现了物联网相关的众多基础功能， 能帮助你快速建立物联网相关业务系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kp0tThWCZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dromara/Sa-Token&#34;&gt;Sa-Token&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级 Java 权限认证框架，主要解决了登录认证、权限认证、单点登录、踢人下线、账号封禁、OAuth2.0 等一系列权限相关问题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoPSkzsbj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shopizer-ecommerce/shopizer&#34;&gt;Shopizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Java 开发的电商系统，支持商品分类、搜索、查询、下单等基础功能，自带后台管理系统，API 满足 RESTful 规范。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnDDpAN7Z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LandGrey/SpringBootVulExploit&#34;&gt;SpringBootVulExploit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Spring Boot 相关漏洞学习资料，利用方法和技巧合集，黑盒安全评估 check list。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KiCDCDADg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;python&#34;&gt;Python&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shinnytech/tqsdk-python&#34;&gt;TqSdk&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Python 量化交易工具，支持用户使用少量代码，快速构建各种类型的量化交易策略程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8zDWBNBP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QPT-Family/QPT&#34;&gt;QPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Python 打包工具，最短仅需一行命令，即可将普通的 Python 脚本打包成 EXE 可执行程序，并选择性添加 CUDA 和 NoAVX 的支持。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7WmwyOMG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pywebio/PyWebIO&#34;&gt;PyWebIO&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用 Python 开发的一个 Web 应用，它能通过一系列命令式的交互函数，在浏览器上获取用户的输入数据并输出。让你无需编写 HTML 和 JS 代码，即可构建一个小型 Web 应用程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L71Nyykki&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gh0stkey/Command2API&#34;&gt;Command2API&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的后端开发工具，开发者可以通过调用 API，来实时获取命令行的输出结果.&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6O3apMIk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/niubiqigai/turtle&#34;&gt;turtle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者汇总了 12 个小型 Python 项目，其中包括圣诞树绘制、弹簧隧道、贪吃蛇游戏代码等项目，适合新手用于日常练习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6MS78RAj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RedisJSON/RedisJSON&#34;&gt;RedisJSON&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个允许开发者从 Redis 中存储、更新、获取 JSON 值，该库完全支持 JSON 标准、类似 JSONPath 的语法、以树状结构存储二进制数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6t8tCOkk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;BadagalaAdarsh/Super_Mario&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了让运动和游戏两不误，印度小哥 Adarsh 用 Python 做了一个项目，可通过体感动作来控制超级马里奥游戏，实现游戏中的各个操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2cSa5AGM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/UlionTse/translators&#34;&gt;Translators&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的 Python 翻译工具库，该库集成了谷歌、必应、有道、百度等多个翻译平台 API，支持上百种语言翻译，使用便捷，配置灵活。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1LLIiybk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/h2oai/wave&#34;&gt;H2O Wave&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Web 仪表面板工具，可用于快速构建实时、低延迟、优雅美观的数据分析仪表面板，适用于 Python 与 R 语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzFzIsmXp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Python-World/python-mini-projects&#34;&gt;Python-Mini-Projects&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个适合练手的 Python 项目，里面收集了 100 多个小型 Python 项目，其中包括随机密码生成器、图片批量下载脚本、网站内容抓取、聊天机器人等项目，适合新手用于日常练习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ky6WExcCV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nucleic/enaml&#34;&gt;Enaml&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Python 声明式 UI 框架，可帮助开发者快速搭建 GUI 项目，支持 Windows、Linux、macOS 及移动端等项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kw9zex7wo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QingdaoU/OnlineJudge&#34;&gt;OnlineJudge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;青岛大学开源的一款在线评测系统，基于 Python 与 Vue 编写而成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kw1jNkiuz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/marceloprates/prettymaps&#34;&gt;PrettyMaps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较不错的小型 Python 开源库，可基于 OpenStreetMap 数据，帮助开发者快速绘制简洁美观的地图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvwGcbaJo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Asabeneh/30-Days-Of-Python&#34;&gt;《30-Days-Of-Python》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个适合新手入门学习的 Python 教程，该教程期望通过为期 30 天的编码学习，手把手教会你 Python 基础编程知识及进阶开发技巧，如 Web 爬虫、数据分析、统计分析、虚拟环境搭建、API 构建等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvcfM1haT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Boris-code/feapder&#34;&gt;feapder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款上手简单，功能强大的 Python 爬虫框架。使用方式类似 Scrapy，内置 3 种爬虫，支持分布式、批次采集、数据防丢、断点续爬、监控报警、浏览器渲染下载等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtPpj09G2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Baekalfen/PyBoy&#34;&gt;PyBoy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Python 的 Game Boy 模拟器，像超级马里奥、口袋妖怪等耳熟能详的游戏都可以在上面完美运行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtiNVlDaB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/codebasics/py&#34;&gt;py&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Python 开源库，里面包含诸多 Python 开源脚本及程序代码，覆盖了 Python 基础与进阶、数据科学、调试工具、深度学习等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsOaj0xiK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iswbm/magic-python&#34;&gt;《Python 黑魔法手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的 Python 技术书籍，里面主要记录了与 Python 相关的一些语法冷知识、命令行使用技巧、开发技巧、编码习惯、开发工具等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpWdWiuxV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lorey/mlscraper&#34;&gt;MLScraper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Python 爬虫脚本，可基于机器学习自动从 HTML 页面中抓取数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpMNrpfJW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alirezamika/autoscraper&#34;&gt;AutoScraper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个智能 Web 爬虫脚本，其主要作用，是能快速且智能获取指定网站上的数据，这些数据可以是网页文本、url 地址或者其它 HTML 元素。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpbhDALyo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bee-san/pyWhat&#34;&gt;pyWhat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Python 脚本工具，能够快速提取信息中的 IP 地址、邮箱、信用卡、数字货币钱包地址、YouTube 视频等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kp7m55ayD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dfeneyrou/palanteer&#34;&gt;Palanteer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Python 编写的飞行射击游戏，可玩性还挺高的。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kmp2p1Y4v&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chriskiehl/Gooey&#34;&gt;Gooey&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可直接将 Python 命令行工具转为 GUI 应用的开源程序，优化用户体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KkoUw4rZu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/leon-thomm/Ryven&#34;&gt;Ryven&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Python 脚本可视化工具，该工具支持通过编辑节点来控制 Python 脚本，让开发者可以更为直观的感受脚本的执行过程与输出结果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JEV6PtlML&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;go&#34;&gt;Go&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/prabhatsharma/zinc&#34;&gt;Zinc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Go 语言开发的搜索引擎，可用于替代 elasticsearch，提供了全文索引、单个二进制文件安装和运行、开箱即用的身份验证等功能，兼容 Elasticsearch API，自带可用于查询数据的 Web UI。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7TdJaBql&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://gowebexamples.com/&#34;&gt;《Go Web 编程实战》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;想学 Go 的同学，可以看下这个开放的技术教程，里面整理了多个 Go 编程代码示例，比如经典的 Hello World 程序，编写一个 HTTP 服务器，用 Go 语言查询 MySQL 数据库，JSON 数据的编码与解码。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L80i53xuv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/teivah/100-go-mistakes&#34;&gt;《如何避免 Go 语言常见的 100 个错误》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该仓库中收录了 Go 语言在开发过程中，新手会常犯的 100 个错误，并给出了相关解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8hY0BfJE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gotomicro/ego&#34;&gt;ego&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的微服务框架，集成了各种工程实践，通过组件化设计模式，让业务能统一调用与启动组件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6q5zg5UD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/taoshihan1991/go-fly&#34;&gt;go-fly&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Web 在线客服系统，开箱即用，支持私有化部署。网站只需嵌入一段 JavaScript 或跳转直连地址，即可快速接入客服。客户端支持电脑、手机页面自适应。项目基于 Go 语言与 MySQL 实现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0J9szkLc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xxjwxc/caoguo&#34;&gt;CaoGuo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Go 语言开发的小程序电商平台，支持商品选择、详情、下单、物流信息展示等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0ylKnTov&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chai2010/ugo-compiler-book&#34;&gt;《从零开发一个 Go 语言编译器》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将尝试以实现 µGo 编译器为线索，带你一边学习，一边完善开发一个玩具语言。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0vZEjMvR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/darjun/go-daily-lib&#34;&gt;go-daily-lib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Go 每日一库，作者会每天跟你介绍一个 Go 语言开源库的用法、场景以及相关代码示例等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L028J4xCM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OpenIMSDK/Open-IM-Server&#34;&gt;Open-IM-Server&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Go 实现的即时通讯（IM）项目，从服务端到客户端 SDK 开源即时通讯（IM）整体解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFs0KxOPi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JordanKnott/taskcafe&#34;&gt;taskcafe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Go 与 Typescript 开发的看板开源软件，支持对任务进行筛选过滤、打标签、添加截止日期、分配成员、制定流程等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAg6DolY3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inancgumus/learngo&#34;&gt;learngo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面包含了共计 1000+ 个 Go 语言相关的代码示例、练习、测验题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvlGghMXu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/labulaka521/crocodile&#34;&gt;Crocodile&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的分布式任务调度系统，基于 Go 语言开发，支持多调度中心，可实时查看任务运行日志与状态、自定义报警策略、账户权限管理等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvdPcapJL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.digitalocean.com/community/books/how-to-code-in-go-ebook&#34;&gt;《How To Code in Go》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本 Go 语言开源书籍，由知名云服务器厂商 Digital Ocean 撰写发布。通过本书你将学会如何使用 Go 语言来编写程序，以及了解一些较为实用的开发者工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KqO2DrlcZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/golang-minibear2333/golang&#34;&gt;《Go 语言精进之路》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本书给快速入门学习 Go 语言使用，更偏向于实战，计划扫清 Go 语言一切障碍。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnKlszvJy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;前端&#34;&gt;前端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zoltantothcom/Design-Patterns-JavaScript&#34;&gt;Design Patterns Game&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以让前端开发者通过玩游戏，来学习设计模式的网站，网站分为设计模式介绍和游戏两部分。在游戏过程中，作者会提供用 JavaScript 实现的设计模式代码，你需要从 4 个答案中，判断代码所属的设计模式类型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8y4x5rvA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JDFED/leo&#34;&gt;leo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;京东前端技术团队在 GitHub 开源了一款前端脚手架工具，覆盖了前端开发全链路、可扩展、可定制的终端运行功能，并支持模板、构建器、扩展命令等丰富的周边生态扩展。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6V7wDAGr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vivirenremoto/doomcaptcha&#34;&gt;Doom Captcha&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;西班牙有一位脑洞比较大的开发者，开源了一款游戏验证器：Doom Captcha，只有先通关作者提供的小游戏，才能通过网站验证。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6zw478JR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chr15m/DoodleCSS&#34;&gt;DoodleCSS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个看起来很可爱的前端 UI 组件库，满满的卡通手绘风格。支持 Web 按钮、下拉菜单、文本框、复选框等多种 UI 组件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6udh0AS0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Budibase/budibase&#34;&gt;Budibase&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的低代码平台，开箱即用、UI 设计简洁精美、功能强大。该项目可帮你更快开发商业级应用，支持单页面项目，具备自动化工作流程、响应式设计、外部数据源对接等特点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1VcdbNtB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chowa/ejyy&#34;&gt;e 家宜业&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套开源的智慧物业解决方案，主要包含装修登记、维修维护、车辆管理、访客通行、房产及业主档案管理、用户权限分配等功能，打通了小程序、PC、H5、智能硬件等多个终端。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L19u5rCsh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qinguoyi/TinyWebServer&#34;&gt;TinyWebServer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可应用于 Linux 系统下的一款轻量级 Web 服务器，主要目的是帮助新手开发者快速实践网络编程，搭建属于自己的服务器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0OQCkTGk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bedimcode/responsive-halloween-website&#34;&gt;Responsive Halloween Website&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外开发者 bedimcode 在 GitHub 开源了一个万圣节网站，该网站主要具备响应式布局、滚动动画、移动端优化、多平台设备兼容等特点。整体设计风格优雅、简洁，感兴趣的同学可以拿去练练手。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEVByyest&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bryanbraun/checkboxland&#34;&gt;Checkboxland&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较有意思的 JavaScript 库，可将任意内容转化为 HTML 复选框，用以展示各类动画、文本、图像、视频等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEmE3vXvj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dusk-Labs/dim&#34;&gt;Dim&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可帮助你快速搭建电影网站的媒体管理器，只需简单配置，即可快速组织与美化本地媒体库，让你随时随地播放本地媒体文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDUmyzJ9I&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Yin-Hongwei/music-website&#34;&gt;Music Website&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的音乐网站管理系统，实现了歌单、播放器、用户及音乐管理等常用功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDKW42Idl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jyolo/wLogger&#34;&gt;wLogger&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款集日志采集、日志解析持久化存储、Web 流量实时监控，三位一体的 Web 服务流量监控应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDCGE0KoG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/appwrite/appwrite&#34;&gt;Appwrite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Web 服务器，可帮你快速构建用户认证、数据库存储、文件管理、图像操作、地理位置检测等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDqU0tbF9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hzfe/awesome-interview&#34;&gt;「剑指前端 Offer」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的前端面试库，由国内多位互联网大厂工程师及前端独立开发者维护。开发者们可借助本书，快速了解面试的高频技术问题与解答，抑或通过书中题目和答案提纲，自主深入学习，查漏补缺。项目来自水友自荐。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBNyFsRm8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qier222/YesPlayMusic&#34;&gt;YesPlayMusic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颜值颇高的第三方网易云播放器，基于 Vue.js 全家桶开发，内置所有音乐播放器基础功能，支持 MV 播放、暗黑模式、自定义快捷键等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KA5v6q9Td&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AriaMinaei/theatre&#34;&gt;Theatre.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个蛮不错的前端动画设计库，可用于创建、设计酷炫丝滑的 Web 动画交互效果。开发者可通过编程或 Web 交互式组件来完成工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kzw9djIFq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/didi/LogicFlow&#34;&gt;LogicFlow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;滴滴在 GitHub 开源的一款流程可视化的前端框架，主要提供了一系列流程图交互、编辑所必需的功能和简单灵活的节点自定义、插件等拓展机制，方便开发者快速在业务系统内满足类流程图的需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyiJewUnQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luruke/browser-2020&#34;&gt;Browser 2020&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个值得前端开发者收藏学习的 GitHub 项目，里面收集了浏览器中一些较为冷门，却异常实用的接口，如商品支付、社交网络分享、消息推送、视频画中画、剪切板、AR 预览、用户身份凭证管理等多种接口。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ky9iKCpcR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/khang-nd/7.css&#34;&gt;7.css&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个小型 CSS 开源框架，可在 Web 页面上添加类似 Windows 7 风格的 UI 组件，其中包括对话框、按钮、下拉菜单、进度条、滚动条等组件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwiZJ9R66&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phuoc-ng/1loc&#34;&gt;1loc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你想知道一行 JavaScript 代码能实现哪些比较实用的功能，可以看看这个 GitHub 项目，该项目收集了共计 126 个代码片段，其中包含对数组、日期、函数、DOM 等常见代码模块的组件实现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kvvv7m6Lj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sparrow-js/sparrow&#34;&gt;sparrow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的场景化、低代码搭建工作台，可实时输出源代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvoqKyP4j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/prabhuignoto/react-chrono&#34;&gt;React Chrono&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 React 组件，可帮你创建多种样式丰富的时间轴，支持以水平、垂直、树状等不同形式进行渲染，并可用幻灯片交互播放。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuDur3AUl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kovacsv/Online3DViewer&#34;&gt;Online 3D Viewer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在 Web 页面上查看与调试 3D 模型的开源工具，支持环绕、平移、缩放等交互。开发者还可将 3D 模型内嵌到个人网站上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KthCSk7yM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liriliri/eruda&#34;&gt;Eruda&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的前端页面调试神器专为手机前端页面设计的调试面板，类似 DevTools 的迷你版，主要功能包括：捕获 console 日志、检查元素状态、捕获 XHR 请求、显示本地存储和 Cookie 信息等等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtfgKffdx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/testjavascript/nodejs-integration-tests-best-practices&#34;&gt;Node.js 集成测试最佳实践&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源资料库：Node.js 集成测试最佳实践，主要包含 Node.js 集成测试实践清单、典型的项目实例、以及 Nest.js、Mocha、Jest、Express 等多个平台示例。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KssL0j2R4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/a597873885/webfunny_monitor&#34;&gt;Webfunny&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的轻量级前端监控系统，可实时分析前端项目健康状态，并生成数据概览。拥有无埋点监控前端日志、程序错误定位、用户行为记录及排查、性能分析等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Krj4plOii&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amirgamil/apollo&#34;&gt;Apollo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的个人搜索引擎与 Web 爬虫，在收录网站 url 后，程序会自动抓取网站文字内容、视频字幕并存储。而后，用户便可通过搜索，快速查看爬取内容或访问网站源页面。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KqZ2m5exp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hua1995116/360-sneakers-viewer&#34;&gt;360-sneakers-viewer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位前端开发者，基于 Three.js，为鸿星尔克写了一个「360° 全景看鞋展厅」，代码已在 GitHub 开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KqXRi8jWG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/blueedgetechno/windows11&#34;&gt;windows11&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一名前端工程师，在 Web 上复现了 Windows 11 的界面及部分功能，项目主要基于 React 搭建而成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kpv7vE7qf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pipipi-pikachu/PPTist&#34;&gt;PPTist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Vue3.x + TypeScript 的在线演示文稿应用，还原了大部分 PPT 常用功能，支持文字、图片、形状、线条、图表、表格等 6 种最常用的元素类型。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoZiPCBgq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lmt-swallow/puppy-browser/&#34;&gt;Puppy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上有人基于 JavaScript V8 引擎和 Rust，搭建了一个微型浏览器，适合开发者用于学习和熟悉浏览器基础原理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoznsBlK1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bradtraversy/50projects50days&#34;&gt;50projects50days&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该项目一共含有 50 个纯使用 HTML、CSS 和 JavaScript 实现的小 Demo，这当中有加载动画、时钟主题、密码生成器、动画倒计时、在线绘图等多个小应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Knt1Rw8wj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Th3Wall/Fakeflix&#34;&gt;Fakeflix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较不错的 Netflix 克隆项目，实现了电影播放、搜索、注册登录、无限滚动等功能。还通过 HTML 与 CSS，实现了其经典的开场动画。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Knn8yiIcc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AllThingsSmitty/css-protips&#34;&gt;CSS Protips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个前端知识库，里面收集并整理了 CSS 相关的一些开发及使用技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KmjlfjGFK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mechaniac/Map-of-Javascript&#34;&gt;Map of Javascript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源的 JavaScript、数据结构与算法知识图谱。可用于日常工作或学习时的查漏补缺。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlsU06OhH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/concrete-utopia/utopia&#34;&gt;Utopia&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较不错的前端开发工具，可在浏览器上为 React 项目及其组件，提供实时展示的设计与编码环境，进一步优化编程体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KkrF07crE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Renovamen/playground-macos&#34;&gt;playground-macos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者基于 React 和 Tailwind CSS，在 Web 页面上实现了 macOS 的模拟界面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KjmkCFBRl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/revolist/revogrid&#34;&gt;Revo Grid&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的前端组件，拥有可高度定制化的虚拟数据智能表格，涵盖了 Excel 上那些优秀特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JFfxep6Qz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/woai3c/introduction-to-front-end-engineering&#34;&gt;《带你入门前端工程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的前端技术书籍，主要记录作者在近两年来，在前端工程师实践经验和学习心得方面的总结。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JENfKdl79&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/i5ting/imove&#34;&gt;iMove&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个逻辑可复用的，面向函数的，流程可视化的 JavaScript 工具库。拥有流程可视化、逻辑复用、灵活可扩展等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JCZiRlywS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;移动端&#34;&gt;移动端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imaNNeoFighT/fl_chart&#34;&gt;fl_chart&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Flutter 图表动画组件库：fl_chart，支持折线图、条形图、饼图、散点图和雷达图等多种图表，并且都拥有不错的动画效果&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;%25id/L7NkobNfX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LianjiaTech/bruno&#34;&gt;Bruno&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套开源的企业级移动端 Flutter 组件库，自带 100+ 组件，开箱即用，主题可自定制，并拥有简约大气的交互和视觉风格。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6LH2lZ8j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facebook/flipper&#34;&gt;Flipper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款移动端调试工具，可在 PC 桌面上可视化调试与控制 iOS、Android 与 React Native 应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBVO69M7x&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Genymobile/scrcpy&#34;&gt;Scrcpy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个通过 USB（或 TCP / IP）连接到电脑上高清显示和流畅控制 Android 设备的工具，适用于 GNU/Linux、Windows 和 Mac OS，无需 root 权限。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxYHbjD7W&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/leanflutter/awesome-flutter-desktop&#34;&gt;Awesome Flutter Desktop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了一系列基于 Flutter 开发的组件包与开源项目，其中包括密码管理器、音乐播放器、翻译词典、漫画阅读器等应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxcnEzg5O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/fluentui-system-icons&#34;&gt;Fluent UI System Icons&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软发布的一款专注于移动端应用的 UI 图标库，针对 iOS、Android、Flutter 等不同开发平台，微软均提供了可快速安装的方式，集成与使用一气呵成。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwtBitJ3Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bytedance/flutter_ume&#34;&gt;Flutter UME&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Flutter 应用内调试工具平台，里面内置了 Widget 信息、颜色吸管、对齐标尺、代码查看、日志展示、内存及 CPU 信息等 10 个插件。开发者可自行创建插件，并集成进 UME 平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KqWhS0i5W&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imaNNeoFighT/fl_chart&#34;&gt;fl_chart&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Flutter 图表动画组件库，支持折线图、条形图、饼图、散点图和雷达图等多种图表，并且都拥有不错的动画效果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7NkobNfX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;工具&#34;&gt;工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iyear/pure-live-core&#34;&gt;Pure Live&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国人在 GitHub 上开源了一个直播系统，简单纯粹，支持直播、弹幕等功能。跨平台，甚至可以运行在路由器上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7OvtA3t3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fanux/sealos&#34;&gt;sealos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 k8s 部署工具，一条命令离线安装高可用 kubernetes，3min 装完，700M，100 年证书，版本不要太全，生产环境稳如老狗。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7QRAxoed&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vnotex/vnote&#34;&gt;VNote&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Markdown 编辑器，提供了强大的笔记管理模式，使得 Markdown 记笔记更轻松简单，并支持 Linux、Windows、macOS 等平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7XVXggyr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gera2ld/markmap&#34;&gt;markmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个蛮实用的 GitHub 开源工具，可快速将 Markdown 文档转为直观可视化的思维导图，并且能集成到 VSCode 上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8j95n2eX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/78778443/QingScan&#34;&gt;QingScan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的漏洞挖掘工具，集多个功能于一体，支持 Web 扫描、系统扫描、子域名收集、主机发现、组件识别、URL 爬虫、XRAY 扫描、POC 批量验证，SSH 批量测试、vulmap 等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8ruJ15R1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://fakeyou.com&#34;&gt;Fake You&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款很好玩的 AI 工具，可将文本自动转换为动漫角色、明星等名人语音，并为其配上开口说话的视频。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8szzjJWR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/easychen/pushdeer&#34;&gt;PushDeerOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可快速搭建消息推送服务的开源工具，遵循了易用、可控、渐进的产品设计原则。简单便捷，输入 URL 即可完成消息推送。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7vEt3mZg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Codennnn/vue-color-avatar&#34;&gt;Vue Color Avatar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的卡通头像生成器，纯前端实现，拥有各类头像搭配组件。随机生成头像时，有一定概率会触发彩蛋。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L74y1uDBZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DinoChan/Loaf&#34;&gt;Loaf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款摸鱼工具，点击按钮，便会假装弹出 Windows 系统更新界面，然后就能光明正大地摸鱼了。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6Sn3u5iF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Yuno&#34;&gt;Yuno&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款动漫搜番神器，可让 AI 通过文字描述，帮你快速找到相似动漫。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6ba7r5LY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://repobeats.axiom.co/&#34;&gt;Repobeats&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可在 GitHub README 页面上，添加酷炫的可视化统计图表，用以展示项目代码的提交频率、分支合并及 issue 状态。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5iaytiKP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kuaifan/dootask&#34;&gt;DooTask&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级的、开源的在线项目任务管理系统，提供各类文档协作工具、在线思维导图、在线流程图、项目管理、任务分发、即时 IM，文件管理等工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4WLf759P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/appsmithorg/appsmith&#34;&gt;appsmith&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的低代码构建平台，可对接各类数据源，帮你快速搭建管理后台、开发工具、企业 CRM 系统等各类项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4N8zATDx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antonreshetov/image-optimizer&#34;&gt;Image Optimizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;墨西哥一位前端工程师开源的图像及矢量图压缩工具，可通过拖拽快速完成压缩。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4uhzCjO8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pytorch/live&#34;&gt;PyTorch Live&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;PyTorch 官方前不久发布了一套工具包，可帮助开发者，快速构建移动端 AI 应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4t6xxmgs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://designstripe.com/&#34;&gt;designstripe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一款插图绘制工具，让不懂设计的人也能自制插图。完成后的插图，可导出成 PNG、JPG、SVG（付费用户）等格式，并应用到个人项目、博客、图书、周边等场景上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4m29vWiz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.paper-digest.com/&#34;&gt;Paper Digest&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;东京大学发布的一款工具，可利用 AI 为每篇论文生成摘要，将阅读时间缩短为 3 分钟。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4cBFzeVW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/editso/fuso&#34;&gt;Fuso&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款快速，稳定，高效，轻量的内网穿透，端口转发工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4bqB6pMx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/visioncortex/vtracer&#34;&gt;VTracer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速将 JPG、PNG 等格式的图片快速转换为 SVG 矢量图，并支持过滤斑点、色彩精度、曲线拟合等多种参数配置。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3Royre28&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.connectedpapers.com/&#34;&gt;Connect Papers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款论文可视化检索神器，当你搜索论文时，该工具会自动生成直观的可视化图谱，展示多篇论文的关联度、引用度及时间跨度。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3fGyml8X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/merico-dev/lake&#34;&gt;Dev Lake&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 DevOps 开发工具，可将 DevOps 数据以实用、个性化、可扩展的视图呈现，完成数据的收集、分析和可视化。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L39ZqdlW7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/penpot/penpot&#34;&gt;Penpot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;首个开源的 UI 设计与原型制作平台，拥有多款 UI 组件与样式、交互式原型以及项目设计示例与模板，帮你更快完成项目设计工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2Np4cKxH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xaboy/form-create&#34;&gt;Form Create&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在线动态表单生成器，用户只需上传 JSON 数据，即可快速生成表单。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2DYAaxXw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tldraw/tldraw&#34;&gt;tldraw&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级，功能强大的绘画 App，自带画笔、橡皮、线框、文字等工具，用户可自定义画笔颜色、线框样式等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2jKl0GqF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AppFlowy-IO/appflowy&#34;&gt;AppFlowy.IO&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Notion 替代品，完成了个人笔记 - 知识库 - 任务管理的功能结合。除了具备 Notion 的基础核心功能外，该项目还支持自托管与离线模式，数据与安全性可控。开发者可任意定制项目模板、插件、主题等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1RgHySLX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mbrlabs/Lorien&#34;&gt;Lorien&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的画板与笔记工具，可用于日常文字记录和头脑风暴等场景，也可绘制草图或图标。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1N8WAAEz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.loudreader.com/&#34;&gt;Loud Reader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个颇为实用的 Web 电子书阅读器，可让你直接在浏览器阅读电子书，支持 epub、azw3、mobi、pdf 等多种文件格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1DIrF9fc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fangpenlin/avataaars-generator&#34;&gt;avataaars-generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的卡通头像生成器，可自定义发型、眼镜、肤色、衣着、嘴型等属性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1uhWATTJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lwch/natpass&#34;&gt;natpass&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;新一代 NAT 内网穿透工具，支持 TCP 隧道、shell 隧道&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1sUIfzv5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Morphogens/ProsePainter&#34;&gt;ProsePainter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较有意思的工具，可基于机器学习，通过文字描述来生成图像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1pblje2K&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nalgeon/sqlime&#34;&gt;SQLime&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 SQLite 在线工具，可用于调试与分享 SQL 片段，跟前端开发工具 JSFiddle 有点像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1kRs3UcQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DanielSWolf/rhubarb-lip-sync&#34;&gt;Rhubarb Lip Sync&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较有意思的开源工具，可通过真实录音，让动漫人物的嘴唇实现音画同步。开发者可将其应用于计算机游戏、动画卡通角色、视频 Vlog 等场景上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0Fq82dgy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/motor-admin/motor-admin&#34;&gt;Motor Admin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款项目管理后台搭建工具，无需编码，即可快速为应用搭建简单易用的管理后台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFQaxCXTx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/unclezs/uncle-novel&#34;&gt;Uncle 小说&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的小说下载与阅读工具目录解析与书源结合，支持有声小说与文本小说，可下载 mobi、epub、txt 格式文本小说，兼容 Windows、macOS、Linux 等操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFJux7Br9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wuchangming/spy-debugger&#34;&gt;spy-debugger&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的手机页面调试、抓包工具，无需通过 USB 连接设备，即可实现远程调试手机浏览器页面、移动端应用 WebView，支持 HTTP / HTTPS。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFnT2rkln&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mltframework/shotcut&#34;&gt;Shotcut&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源的视频编辑器，兼容 Windows、macOS、Linux 等主流操作系统。支持最新音视频格式与 4K 分辨率，可实现视频特效添加、内容剪切、时间轴校对、滤镜及色彩调整等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEZx6uCGl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://notegarden.web.app/&#34;&gt;Note Garden&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的笔记工具，可自动为个人学习笔记创建教程，利用算法助你温习笔记内容，双向链接 - 高效检索笔记内容，兼容多种数学公式，生成图片完型填空测试题等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEXaYlllf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ShareX/ShareX&#34;&gt;ShareX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能颇为强大的 Windows 截图与录屏工具，支持截图、录屏、OCR 文本识别、图像水印添加、内容上传、地址分享、颜色调整、图像编辑、视频格式转换等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEOVxskOw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/finos/perspective&#34;&gt;Perspective&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个交互式、可视化数据分析工具，可用于创建数据报告、数据面板、科研笔记及应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEMb3lcbz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mumuy/relationship&#34;&gt;亲戚关系计算器&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 开源了「亲戚关系计算器」，只需像计算器一样简单输入，即可推算出亲戚称谓。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEI3l3I8Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sqlmapproject/sqlmap&#34;&gt;SQLMap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 SQL 渗透测试工具，开发者可利用它来完成程序的自动化检测，利用 SQL 注入漏洞，获取数据库服务器的权限。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEpcl2VdW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/initml/cleanup.pictures&#34;&gt;CleanUp.pictures&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为有趣的在线工具，可通过画笔，在线擦除图像中的物品对象。此外，还支持自定义画笔大小、图片还原、素材下载等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDTbvCDdG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rawgraphs/rawgraphs-app&#34;&gt;RawGraphs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的数据可视化工具，通过粘贴或上传表格数据，即可快速生成数据可视化图形。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCFLx6yCy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SkewwG/henggeFish&#34;&gt;henggeFish&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可自动化、批量发送钓鱼邮件的开源工具，主要为了解决 &amp;ldquo;护网&amp;rdquo; 中大量目标需要发送钓鱼邮件的痛点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCA4o26Cb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhzyker/vulmap&#34;&gt;Vulmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的漏洞扫描工具，可对 Web 容器、Web 服务器、Web 中间件以及 CMS 等 Web 程序进行漏洞扫描，并且具备漏洞利用功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCmYA1urL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BornToBeRoot/NETworkManager&#34;&gt;NETworkManager&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Windows 网络管理工具，拥有 IP 扫描、端口扫描、路由跟踪、DNS 查询等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KC5eBip2F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wimpysworld/quickemu&#34;&gt;Quickemu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由国外 Linux 开发者 Martin 在 GitHub 开源的一款虚拟机安装工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBUD2hdWP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/louislam/uptime-kuma&#34;&gt;Uptime Kuma&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的网站监控工具，功能类似「Uptime Robot」，可用于监控当前网站的运行状态。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBMnBn7dH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kimlimjustin/xplorer&#34;&gt;Xplorer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;印尼高中生 Kimlim 开发的一款可定制、现代化的跨平台文件管理器，支持 Windows、Linux、macOS 等主流桌面系统，允许直接预览图片、文档、视频，免费开放，基于 Apache-2.0 许可开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAqIdiN4Z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Mayandev/notion-avatar&#34;&gt;Notion Avatar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者提供了一系列组件，可让你在线定制类似 Notion 风格的个人头像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAmMFaikA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://everydayanchovies.github.io/mplg/mplg&#34;&gt;MPLG&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Matplotlib 客户端，支持可视化设计并绘制图形，并将图形导出成 PNG、PDF、SVG 等文件格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAdm9oUKo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antfu/iroiro&#34;&gt;iroiro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在终端运行的色彩查询工具，提供了不少简洁优雅的色系供开发者选择，其数据引用自日本传统色系。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KA6G8wdmP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.goodannotations.com/tools/draw-on-pdf&#34;&gt;Draw on PDF&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 PDF 在线标注工具，可在线对 PDF 文件进行标注、绘制图案。完成后可通过链接分享给其他人，支持 PC 及移动端设备。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzXfE3Cfi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luin/wechat-export&#34;&gt;WeChat Export&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的微信消息导出工具，可将聊天记录导出成 HTML 文件、支持文本、语音、图片、视频、消息等资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzuY9q5zG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aristocratos/btop&#34;&gt;btop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Linux / OSX / FreeBSD 资源监控工具，支持显示处理器、内存、硬盘存储、网络与进程使用状态等信息，拥有多款可定制主题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kzo5X4KcG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Richasy/Bili.Uwp&#34;&gt;Bili.Uwp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 B 站第三方应用，支持 Windows 10/11 系统，主打设计和易用性，自发布后收到不少用户好评。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzmIJEBuF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/darlinghq/darling&#34;&gt;darling&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可让你在 Linux 上无缝运行 macOS 系统软件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyL0K0n0n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mviereck/x11docker&#34;&gt;x11docker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源工具，可让开发者在 Docker 上跑图形界面程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyApaBRmN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jely2002/youtube-dl-gui&#34;&gt;youtube-dl-gui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你平时有下载 YouTube 视频的需求，又不习惯使用命令行，那么可以试下 youtube-dl-gui 这款下载工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kyze72gdn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/speechbrain/speechbrain/&#34;&gt;SpeechBrain&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个功能齐全的语音工具包，提供语音识别（支持普通话）、语音增强、语音处理、多麦克风信号处理、模块化定制等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KypNCdq4w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/armosec/kubescape&#34;&gt;Kubescape&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;第一款可用于测试 Kubernetes 是否已安全部署的开源工具。测试结果将以 NSA 发布的《Kubernetes 加固指南》为标准。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kygn81kal&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codeimg.io/&#34;&gt;Code IMG&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费在线把源代码生成高逼格的图片工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxpxuA9vU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FiloSottile/age&#34;&gt;Age&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用的现代化安全加密工具，可基于非对称加密算法，快速给私密文件进行加密。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxmZctYRL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xfangfang/Macast&#34;&gt;Macast&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可将手机视频、图片、音乐等资源快速推送到电脑端的开源应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxlO9pcfg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cutefishos&#34;&gt;CutefishOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Linux 开源的桌面系统，由国内团队开发，注重简洁、美观和实用性，整体 UI 风格跟 macOS 颇为相似。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxaOetqme&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orhun/git-cliff&#34;&gt;git-cliff&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的命令行工具，可从日常 Git 提交记录中提取关键信息，自动生成项目更新日志，减少重复性工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kx48dAJz9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/screego/server&#34;&gt;Screego&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的屏幕共享工具，可选择分享电脑全屏、窗口、浏览器标签页等三种分享模式，并拥有更低延迟、更高质量的屏幕共享体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwVSMp1Ue&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kaiyiwing/qwerty-learner&#34;&gt;Qwerty Learner&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的单词记忆与英语肌肉记忆锻炼软件，主要将英语单词的记忆与键盘输入的肌肉记忆相结合，可在背诵单词的同时巩固肌肉记忆。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwUHIdNhq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/airbytehq/airbyte&#34;&gt;Airbyte&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的数据集成平台，可通过 API、应用、命令行工具等方式，在短短几分钟内完成数据集成，以便后续使用与管理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwsqdFLi2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eip-work/kuboard-press&#34;&gt;Kuboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专为 Kubernetes 设计的开源管理界面。具备多集群管理、权限管理、监控套件、日志套件等丰富功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwpFKrQxw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/varbhat/exatorrent&#34;&gt;exatorrent&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 BitTorrent 种子客户端，具备自托管、简单易用、功能丰富、轻量级等特性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwhOFvCwZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/didi/sharingan&#34;&gt;Sharingan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的项目流量录制工具，可录制线上真实请求流量，并进行回放测试。适合项目重构、回归测试等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvIEYisMy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xgenecloud/xgenecloud&#34;&gt;XgeneCloud&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款较为实用的数据库开源神器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvxRfoMox&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/heartexlabs/label-studio&#34;&gt;Label Studio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的数据标注神器，可用于标注音视频、文本、图像、时间序列等数据类型，并导出为多种模型格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kv6KPqpsl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/glushchenko/fsnotes&#34;&gt;FSNotes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 macOS / iOS 笔记软件，支持语法高亮、在线图像、标签组织、跨笔记链接、暗黑模式、Git 版本控制等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kv5zLe5b2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pascalw/kindle-dash&#34;&gt;Low-power Kindle dashboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将越狱的 Kindle 设备打造为节能仪表面板，面板显示内容为服务器返回的 PNG 图像，因此开发者可自行定制。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuXkjBKQF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/holynova/gushi_namer&#34;&gt;gushi_namer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源工具：「你的名字」，可用诗经、楚辞、唐诗、宋词来随机起名字。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuNTP4IW8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GuidoBartoli/sherloq&#34;&gt;Sherloq&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的图像取证工具，可对图像具体信息进行提取、分析、比对，并以此检测图像是否被篡改或伪造，功能颇为强大。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuCjn8RwZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Canop/rhit&#34;&gt;Rhit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Nginx 日志浏览工具，可将日志文件按照日期、响应状态、存储路径等进行筛选分类，让你更为直观且高效的阅读 Nginx 日志。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KulCl8ldH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Enter-tainer/cxx2flow&#34;&gt;cxx2flow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者在 GitHub 上开源的一款工具，可将 C/C++ 代码快速转换为流程图，便于增强图表复用率与团队协作效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kukrior9u&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/docmirror/dev-sidecar&#34;&gt;dev-sidecar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的开发者辅助工具，提供 GitHub、Stack Overflow、NPM 等开发者工具的访问加速功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuhGNtywK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/honzaap/Systemizer&#34;&gt;Systemizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的系统设计工具，可用于创建、模拟大规模分布式系统数据流。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtgrOcaFc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nodes-io/nodes-io&#34;&gt;Nodes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的可视化编程工具，该工具支持快速创建实时 3D 图形、可交互的 Web 应用、自定义和共享工具参数、可视化数据分析、构建复杂应用等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsYLRwGdM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/excalidraw/excalidraw&#34;&gt;Excalidraw&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的笔记手绘工具，支持 Excel 表格导入、内容翻译、图形绘制、加密协作等功能，微博附图为该工具的绘图示例。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsDyKBRzr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RPCS3/rpcs3&#34;&gt;RPCS3&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的索尼 PS3 模拟器与调试工具，支持在 Windows、Linux 及 BSD 系统上运行 PS3 游戏。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsBZl2bNh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lazy-luo/smarGate&#34;&gt;smarGate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的内网穿透工具，基于 C++ 实现，无需公网 IP，拥有小巧，易用，快速，安全，多链路聚合等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ksu8g4R5K&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/susam/muboard&#34;&gt;Muboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的数学白板工具，可通过编写 Markdown + LaTeX，在 Web 页面上进行展示，方便用于教学、演讲、会议等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ksn3Sprya&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antfu/icones&#34;&gt;icones&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的图标库搜索工具，拥有数量丰富的图标库，支持模糊搜索、图标字体打包、SVG 下载、类别过滤、脚本复制等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KslSOtCKp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kingyiusuen/image-to-latex&#34;&gt;Image to LaTeX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的开源工具，可将 LaTeX 公式图片，快速转换为可复制的 LaTeX 代码公式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsdDnyoW6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/clouDr-f2e/rubick&#34;&gt;Rubick&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源桌面工具箱，支持快速搜索当前系统应用、截屏、取色、锁屏、右键增强等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kscskc0SJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/mapus&#34;&gt;Mapus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款具有实时协作功能的地图工具，开发者可通过绘制、标记等方式，与同伴一起规划行程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ks31P4shw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KuangDD/ttskit&#34;&gt;TTSkit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的语音合成工具箱，支持文本转语音，可在线配置参数，并拥有多种音色选择。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KrTBkgIu1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0x727/ShuiZe_0x727&#34;&gt;水泽&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的信息收集自动化工具，只需输入根域名，即可全方位收集相关资产，并检测漏洞。也可以输入多个域名、C 段 IP 等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KrLlTjjpr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/toger5/TheBoard&#34;&gt;TheBoard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的白板协作工具，支持用户在 Web 页面上，绘制、涂改、标记并分享白板上的内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KrKaPlh7S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dataease/dataease&#34;&gt;DataEase&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的数据可视化分析工具，可帮助用户快速分析数据并洞察业务趋势，从而实现业务的改进与优化。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kr9DU9SPE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/myspaghetti/macos-virtualbox&#34;&gt;macOS Virtualbox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可在 VirtualBox 上快速安装 macOS 系统的开源脚本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KqoHBg1xI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vanila-io/wireflow&#34;&gt;Wireflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的在线流程图绘制工具，支持使用 100 多种自定义图形、可进行多人协作、权限分配、实时聊天等功能、并拥有丰富的功能组件库。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kq1ITc3rH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sdushantha/tmpmail&#34;&gt;tmpmail&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的命令行工具，可用于快速生成临时电子邮箱。当你需要注册某些不太重要的网站，接收某些临时电子邮件，规避垃圾邮件轰炸时能派上大用场，并且能帮你进一步提升隐私安全性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpTROrWeZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CopyTranslator/CopyTranslator&#34;&gt;CopyTranslator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的翻译神器，你只需将文本复制到剪贴板，即可快速查看翻译结果，享受所见即所得的快感。在对翻译结果的处理上，还会帮你解决多余的断句和换行所带来的乱码问题，使其更符合阅读习惯。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpDmWepOO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ventoy/Ventoy&#34;&gt;Ventoy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能用于制作可启动 U 盘的装机神器，有了它之后，今后装机无需再反复格式化 U 盘，只需将 ISO/WIM/IMG/EFI 文件拷贝到 U 盘即可启动，无需其他操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KptWsydn6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bndw/wifi-card&#34;&gt;WiFi Card&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的开源工具，作者是来自西雅图的开发者 Ben Woodward，这款工具的作用，是能将 WiFi 名称和密码，快速转化为二维码。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoINY1PYU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/filebrowser/filebrowser&#34;&gt;File Browser&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你考虑搭建一个私人网盘，在线管理各种文件资源，那么这个开源项目应该能派上用场。该工具内置登录系统，可在线删除、编辑、创建文件，允许分配多个用户权限，在 Web 浏览器上执行自定义命令行。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ko4W1jCW1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/digitalocean/nginxconfig.io&#34;&gt;nginxconfig.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;知名云服务器厂商 Digital Ocean 开源的一款后端开发工具。通过更为人性化的可视化界面，帮你快速设置并生成 Nginx 配置文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnXFx1XTZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ArchiveBox/ArchiveBox&#34;&gt;ArchiveBox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的互联网资源存档工具，可离线保存你浏览过网页内容，其中包括 HTML 页面、PDF 文件、图像视频等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnLSRd95c&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.cs.usfca.edu/~galles/visualization/Algorithms.html&#34;&gt;Mathpix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你经常用 LaTeX 编写文档，可以试下 Mathpix。这款工具能将带数学公式的截图一键转成 LaTeX 代码，堪称神器！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnEOv1vM1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/audacity/audacity&#34;&gt;Audacity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能颇为强大的多轨音频编辑及录制工具，可导入导出多种音频格式，通过可视化界面，快速分析音频信号。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnB5hfOfL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Keldos-Li/typora-latex-theme&#34;&gt;Typora LaTeX theme&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了方便本科生撰写小型论文或实践报告，浙大一名学生在 GitHub 开源了一个仿 LaTeX 主题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnrwPefEv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SigNoz/signoz&#34;&gt;SigNoz&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的开源工具，作为 DataDog、NewRelic 的开源替代品，可帮助开发者实时监控并分析项目问题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KmysSDwdM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mumble-voip/mumble&#34;&gt;mumble&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的语音聊天软件，具备低延迟、通信质量高、安全私密性强等特点，适合用于通话或游戏交流。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KmnsYvvmB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rcmaehl/WhyNotWin11&#34;&gt;WhyNotWin11&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款脚本工具，可用于快速检测电脑是否适用于 Windows 11，其中包括主机整体基础架构、CPU 兼容性、硬盘分区类型、RAM、存储空间等属性。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Km8JGBcrW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nocodb/nocodb&#34;&gt;NocoDB&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的在线表格工具，可将各类主流 SQL 数据库转为智能电子表格，作为 Airtable 的开源替代方案，功能颇为强大。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlNkqdpVd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/files-community/Files&#34;&gt;Files&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在 GitHub 开源的 Windows 文件管理神器，发现该软件的诸多特性挺适合开发者日常处理工作的。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlGQyzo0Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cookieY/Yearning&#34;&gt;Yearning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于 SQL 审核的开源神器，该工具致力于帮助开发者快速完成 SQL 语句的审核、检测、执行、回滚等操作，使日常的 SQL 变动得以更加规范化、标准化。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Klx1HtXSV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liupan1890/xiaobaiyang2&#34;&gt;小白羊&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一名开发者 GitHub 上开源了一款网盘工具，该工具支持多账号管理、文件在线预览、批量管理、队列上传与下载、任务脚本回调、远程操作访问等核心功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlbCH6Thy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wgpsec/ENScan&#34;&gt;ENScan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的企业信息查询工具，可用于更加快速的获取企业信息，减少收集的工作量。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KkCgyxPNT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/narakeet/examples&#34;&gt;Narakeet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的工具，可将 Markdown 或 PPT 文档快速转换为视频，便于应用到项目教程、Demo 或者 Vlog 等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KjGwIAFGP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rustdesk/rustdesk/&#34;&gt;RustDesk&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的远程桌面控制程序，开箱即用，无需配置，可充当 TeamViewer 和 AnyDesk 的替代品。软件数据可自行托管到私有服务器，确保数据安全。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KjvUXb2tt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fmeringdal/nettu-meet&#34;&gt;Nettu Meet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的视频会议系统，为交互式在线辅导而生。该系统主要支持实时视频会议，屏幕、白板、文件共享，文字消息聊天，数学图形绘画等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KjoQB1B7p&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orchest/orchest&#34;&gt;Orchest&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的开发工具，里面集成了各类常用的数据科学工具，开箱即用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kjd3Y4ADs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cloudreve/Cloudreve&#34;&gt;Cloudreve&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的公有云文件系统，支持多家云存储驱动，客户端直传、下载限速、文件管理、用户权限分配等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KjbuxAkG6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/schappim/macOCR&#34;&gt;macOCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款适用于 Mac 的 OCR 命令行工具，开发者可以用它将电脑屏幕上的文本信息转换为剪贴板上的文本，目前已支持多个不同语言文字的识别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KikSk81Ji&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cs01/termpair&#34;&gt;termpair&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个挺有趣的开发工具，开发者可通过浏览器实时访问、使用电脑上的命令行终端，整个访问过程将基于端对端加密&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KijG2AyyZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/irevenko/what-anime-cli&#34;&gt;what-anime-cli&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个挺有意思的命令行工具，可在命令行中通过动漫图片，快速检索出其作品信息，支持多种图片格式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pavlobu/deskreen&#34;&gt;deskreen&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将电脑屏幕共享到任意带有浏览器的设备上，使之成为电脑的第二块屏幕。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JELGkBbAV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;插件&#34;&gt;插件&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.jetbrains.com/code-with-me/&#34;&gt;Code With Me&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;因为疫情，国外有不少程序员需要在家远程办公。为此，JetBrains 发布了一款插件，提供了多项功能，以便打造更好的协作开发与结对编程体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7Z70ygon&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tuchg/ChinesePinyin-CodeCompletionHelper&#34;&gt;ChinesePinyin-CodeCompletionHelper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者做的一款 IDEA 骚插件，支持用中文来编写代码，享受和英文环境一致的中文智能编码体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L60yz3KmQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vict0rsch/PaperMemory&#34;&gt;PaperMemory&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可自动管理论文的浏览器插件，可自动存储、标记、搜索、下载曾经阅读过的论文，支持 Arxiv、BioRxiv、OpenReview 等论文平台。插件管理数据均存储在本地，可下载导出为 JSON 文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4206fmke&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mqycn/huile8&#34;&gt;huile8&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能帮你背单词的 VSCode 插件，可将代码变量、注释、文档中的陌生英文单词，添加进 VSCode 单词库中，让你在 VSCode 上也能背单词&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1jue4zPT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kholid060/automa&#34;&gt;Automa&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的 Chrome 神器，可通过连接不同的任务区块，来自定义浏览器工作流。工作流可执行表单填写、屏幕截图、网站数据抓取等各种重复性工作。不仅于此，你还可以设置任务的执行时间，以满足多种不同场景的使用需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0Nhd0CWn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/codetour&#34;&gt;Code Tour&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 VSCode 插件，由微软技术团队开源。其主要功能，是能用于录制与回放项目代码浏览过程。在浏览代码的过程中，可用该插件插入浏览步骤、文本注释，并且还能设置跳转的代码区块，嵌入能运行的命令行等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzW4BgppD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://projectnaptha.com/&#34;&gt;Project Naptha&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的 Chrome 插件，可选中、复制、编辑、翻译图片中的内嵌文字。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxeJLtgM1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/visualpython/visualpython&#34;&gt;Visual Python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较有趣的 Jupyter Notebook 插件，实现了Python 可视化编程，可作为面向程序员或非程序员的数据分析解决方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kox1lF6Dz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gamedilong/anes-repository&#34;&gt;anes-repository&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有个开发者搞了个 VSCode 小霸王插件，里面提供了超级马里奥、魂斗罗、彩虹岛、雪人兄弟、坦克大战等经典游戏供玩家体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnN3Vomur&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://copilot.github.com/&#34;&gt;GitHub Copilot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 与 OpenAI 联手发布了一款开发神器，旨在借助 AI 的力量，帮助开发者快速完成代码编写，大幅提升开发效率。开发者在 VSCode 上安装后，便可使用 Copilot，实现智能代码补全的操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KmAP0qNan&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YXL76/cloudmusic-vscode&#34;&gt;Netease Music for VS Code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 VSCode 扩展，开发者可直接使用 VSCode 来播放网易云音乐的歌曲。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlvP1bNh8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wuyr/intellij-media-player&#34;&gt;intellij-media-player&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者为了上班能用代码编辑器看视频，撸了个 IDE 插件，并适配了 JetBrains 全家桶。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KkjpzwSTV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amitness/papers-with-video&#34;&gt;papers-with-video&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Chrome 扩展，用户在使用 arXiv 查看论文时，可自动链接到论文相关的视频页面上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JFgJo3nsu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;资料集合&#34;&gt;资料集合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/XINCGer/Unity3DTraining&#34;&gt;Unity3DTraining&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理了一些 Unity 游戏相关的开源项目、开发者工具、技术教程等内容，方便新手用于日常实践与学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8C032977&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ellisonleao/magictools&#34;&gt;Magic Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的游戏开发教程，整理了游戏开发相关的工具、美术素材、项目源码、计算机图形学等资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7oA5nYtT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ashishpatel26/Treasure-of-Transformers&#34;&gt;Treasure-of-Transformers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了 100 多个高质量的自然语言处理 Transformers 模型，并附有相关的论文、视频、博客、代码仓库等内容介绍。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7np2lnsT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orico/www.mlcompendium.com/&#34;&gt;The Machine &amp;amp; Deep Learning Compendium&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份颇为全面的 AI 学习资源，覆盖了数据科学、概率与统计、博弈论与信息论、数据结构与算法、深度神经网络、全栈工程师等多个领域的学习资料与开发者工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6TWv84xt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/begeekmyfriend/leetcode&#34;&gt;LeetCode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于纯 C 语言实现的 LeetCode 题解仓库，共有 200 多道题，涵盖链表、队列、堆栈、递归、动态规划、二叉搜索树等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6DrD8SBj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/louisfb01/best_AI_papers_2021&#34;&gt;《2021 年优质 AI 论文整理》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;designstripe 的首席 AI 研究科学家在 GitHub 开源的，里面摘选的论文，主要探讨图像合成、AI 未来发展方向、海洋垃圾自动检测、人脸生成的真实性、增强现实在游戏中的应用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4npnvi3C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TSiege/Tech-Interview-Cheat-Sheet&#34;&gt;Tech Interview Cheat Sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的技术面试清单速查表，主要收录了数据结构与算法的常见面试技术点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3SzB8ULf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MysteryVaibhav/leetcode_company_wise_questions&#34;&gt;LeetCode company wise&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一名卡内基梅隆大学硕士生开源的 GitHub 项目，把众多知名大厂的 LeetCode 题目整合到一起，并打包成了 PDF，便于大家学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3J96hSF2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/agavrel/42_CheatSheet&#34;&gt;42_CheatSheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的编程速查表，里面列举了新手开发者的常犯错误、软件编码指南、程序员开发工具配置、计算机编程学习资源（C 语言、算法、网络、黑客与安全）等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3jpUeswD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://swissarmydevops.com/wp-content/uploads/2020/11/Docker_Cheat_Sheet-1.pdf&#34;&gt;Docker Cheat Sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Docker 速查表，可直接下载 PDF。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2Y2EqJiv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fangzesheng/free-api&#34;&gt;free-api&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 维护的免费 API 文档，每月不定期收录互联网上开放的 API 接口。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2OA8iuo5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Mikoto10032/DeepLearning&#34;&gt;《深度学习入门学习资源》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;华南理工大学的一名硕士生整理的，里面包含各类深度学习相关的技术教程、优秀文章、视频教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2ntH4TiB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adrianscheff/useful-sed&#34;&gt;useful-sed&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Linux sed 命令行常用汇总，收集了 sed 命令行的诸多常见用法，可用于快速处理文本文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2bH52dk4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/riramar/Web-Attack-Cheat-Sheet&#34;&gt;Web Attack Cheat Sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;现任惠普的高级网络安全工程师 Ricardo，在 GitHub 开源了一份 Web 攻击速查表，里面提供了相关开发工具与实现方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1Wzr7PAG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bugaosuni59/TH-CPL&#34;&gt;TH-CPL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;清华大学计算机学科推荐学术会议和期刊列表。覆盖了高性能计算、计算机网络、网络与信息安全、理论计算机科学、系统软件与软件工程、数据库与数据挖掘、人工智能与模式识别、计算机图形学与多媒体等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1JpAbuBs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Skykai521/AndroidDeveloperAdvancedManual&#34;&gt;《Android 工程师进阶手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位 Android 开发者作者开源的，将手册按工程师能力，划分为初级、中级、高级三个阶段。在不同阶段，从技术、职场、学习等方面给出了不同建议。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0oVfuEsd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/knownsec/KCon/&#34;&gt;《KCon 黑客大会演讲 PPT》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2021 年包含了 macOS Big Sur 内核漏洞挖掘、云虚拟化安全、服务器硬件可信与安全实践等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0kZIaZUv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhaoolee/pi&#34;&gt;《树莓派防吃灰》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 开源的树莓派学习资料，主要收录了作者撰写的一些树莓派学习教程与开发技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFBf50sWL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/USTC-Hackergame/hackergame2021-writeups&#34;&gt;Hacker Game 2021&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中科大信息安全大赛团队在 GitHub 上开源的赛事题解，主要包含官方与选手们的题目描述、文件、源代码、技术解析文章等内容。包含多种解题思路与实现技巧，颇有参考价值。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFxjyeUfu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/starkblaze01/Algorithms-Cheatsheet-Resources&#34;&gt;Algorithms-Cheatsheet-Resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;印度一位小哥整理的计算机编程资源，主要包含多种编程语言的常用速查表、算法实现库、扩展学习资源等内容。覆盖机器学习、Python、Go、VSCode、JavaScript、Git 等技术领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFeEIiIYY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://the-algorithms.com/&#34;&gt;The Algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上最大的算法开源库，网站收录了 Python、Java、C++、JavaScript、Go 等多种主流编程语言的算法代码实现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEQ6CxUJb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kobaayyy/Awesome-ICCV2021-Low-Level-Vision&#34;&gt;Awesome-ICCV2021-Low-Level-Vision&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理了 2021 年 ICCV 中，图像生成与底层视觉相关的论文和代码，包括图像生成，图像编辑，图像风格迁移，图像翻译，图像修复，图像超分及其他底层视觉任务等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KElt0dXLK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mli/paper-reading&#34;&gt;《深度学习论文精读》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面选取了近 10 年在深度学习领域比较有影响力的必读文章，并为之做视频讲解。文章将覆盖 ResNet、Transformer、BERT、GPT3、GAN、AlphaGo 等深度学习领域的常用框架、算法以及实际应用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEeoBBZTT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OWASP/CheatSheetSeries&#34;&gt;CheatSheetSeries&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;OWASP（开放式 Web 程序安全项目）出品的一份技术速查表，覆盖了用户授权验证、访问控制、跨站请求伪造、Docker 安全、会话管理、SQL 注入等 Web 安全领域相关的技术速查表。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEddyBBDB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AnkerLeng/Cpp-0-1-Resource&#34;&gt;Cpp-0-1-Resource&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 C++ 入门学习资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDM78yRjG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/acm-clan/algorithm-stone&#34;&gt;《算法・进阶石》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位开发者在 GitHub 整理的 ACM / LeetCode 算法竞赛路线图，包含了红黑树、动态规划、堆栈队列、链表、二分查找、几何问题等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDJKZCWoE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md&#34;&gt;《Git 飞行规则》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Git 学习指南，其理念来自于 NASA 给宇航员的指南，主要用于指导问题出现后的应对之法。指南里面记录了某个事情发生的原因，以及怎样进行流程化处理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDE3R7XSW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jm199504/Financial-Knowledge-Graphs&#34;&gt;Financial-Knowledge-Graphs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的小型金融知识图谱构建流程，可帮助你更好的学习与理解知识图谱的使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDiEAp0ZM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Nyandwi/machine_learning_complete&#34;&gt;《A Complete Machine Learning Package》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份颇为全面的机器学习资源，覆盖 Python 编程、数据分析与可视化、计算机视觉、开发工具、最佳实践等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KD0YEk4Jp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhanwen/MathModel&#34;&gt;《数学建模学习资源》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要包含数学建模相关的竞赛优秀论文、算法、LaTeX 论文模板、算法思维导图、书籍、Matlab 教程等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCX36pSDc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Mr-xn/Penetration_Testing_POC&#34;&gt;Penetration Testing POC&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内开发者 Mr-xn 在 GitHub 发布的一份渗透测试笔记。里面汇总了渗透测试工作中常用的 POC、脚本、工具、学习资源、操作技巧等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAhhH2BJ9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/python-engineer/ml-study-plan&#34;&gt;《机器学习自学指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一名工程师为 AI 开发者定制的《机器学习自学指南》，内容覆盖线性代数、多元微积分、基础机器学习、深度学习等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAeVAq9OQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sladesha/Reflection_Summary&#34;&gt;Reflection Summary&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位 AI 工程师在 GitHub 上开放的一套算法理论基础知识，里面涵盖了数学、数据预处理、机器学习、深度学习、自然语言处理等多个技术领域的面试知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KA3VFsdtM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/secguide&#34;&gt;《代码安全指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;腾讯开发人员在 GitHub 上开源的《代码安全指南》，旨在梳理 API 层面的风险点并提供详实可行的安全编码方案。包含 C/C++、JavaScript、Node、Go、Java、Python 等多个不同编程语言版本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzGWWw61p&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/7kms/react-illustration-series&#34;&gt;《图解 React 源码系列》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者将通过大量配图，把 react 原理表述清楚。主要包含 React 基础概念、运行核心、数据管理、交互、高频算法等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyIECuHVh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orico/www.mlcompendium.com&#34;&gt;《The Machine &amp;amp; Deep Learning Compendium》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外工程师 Ori Cohen 在 GitHub 上开源了一个开放式知识共享项目，里面主要整理了其过去 4 年撰写的机器学习与深度学习纲要，共 500 个主题，覆盖机器学习算法、统计、特征选择和工程技术、深度学习、NLP、时间序列、计算机视觉等分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxkeJ2Sh4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/any86/any-rule&#34;&gt;any-rule&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;正则大全， 收录了 70+ 条常用正则表达式，支持 web /vscode/idea / Alfred Workflow 等多个平台。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kx2X9sNIp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/girliemac/a-picture-is-worth-a-1000-words&#34;&gt;《一图胜千言》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要创作了包含数据结构与算法、Web 开发、机器学习等编程领域的涂鸦作品，其中有部分被应用到了微软的开源教程，感兴趣的同学可以收藏学习一下。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kx1nJDtSF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bobeff/programming-math-science&#34;&gt;《编程、数学、科学》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一位开发者近期在 GitHub 上开源的资料仓库，里面收录了编程、数学、科学领域相关的工具、书籍、网站等内容，涵盖算法、命令行工具、数据库、设计模式、GUI 编程、操作系统、文本编辑器等分支。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kwrfa2RRb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zheng95z/fun-with-computer-graphics&#34;&gt;fun-with-computer-graphics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者整理的图形学资料，包含各大高校课程、书籍、教程、文章、开源项目、网站等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kwgfflp1n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nikitavoloboev/my-mac-os&#34;&gt;my-mac-os&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;伦敦一位开发者将自己平时常用的 Mac 软件及工具统一整理后放到 GitHub 上了，其中包括不少可提升生产力和开发效率的工具，不少也是我平时一直在用的，用 macOS 的同学可以看看。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvYXFsCRN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TurboWay/bigdata_analyse&#34;&gt;bigdata_analyse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 开源的数据分析项目库，收集了多个数据分析项目集合。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvXoileok&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cs-books/influential-cs-books&#34;&gt;Most influential books for programmers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理了多本最具影响力的计算机科学 / 编程书籍，书单源自 Stack Overflow 上的一个回答。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuW9gkQMd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eastlakeside/awesome-productivity-cn&#34;&gt;《绝妙的个人生产力》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的生产力工具清单，Awesome Productivity 中文版。收录了与生产力相关的各类书籍、网站、工具等内容，包含日常笔记、知识图谱、文件管理、任务管理、任务自动化、密码管理等类别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuMIL9ZyY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phosphor-icons/phosphor-home&#34;&gt;Phosphor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的图标库，里面共提供了 588 个图标，拥有 6 种不同线条展示风格，你可将其应用于图标、演示文稿、网站页面等任意载体上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuAJXf93Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zacharywhitley/awesome-ocr&#34;&gt;Awesome OCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;列举了一系列 OCR 相关的开发工具、开源项目、技术实现方案、数据集等诸多资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kujgd1gm6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/r0eXpeR/Online_Tools&#34;&gt;Online_Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 整理的在线情报搜集工具。包含企业信息、IP 信息及域名备案查询工具、Web 应用指纹识别、威胁情报平台、在线提权辅助等各类工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuchX8OXl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/linkedin/school-of-sre&#34;&gt;School of SRE&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 LinkedIn 在 GitHub 开源的一份企业内部 SRE 技术课程。主要包含 Linux、Git、Python、Web、MySQL、大数据、系统设计、网络安全等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtAG1AEkS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dformoso/machine-learning-mindmap&#34;&gt;machine-learning-mindmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的机器学习思维导图，整理了从数据分析到深度学习相关的开发流程、技术概念、速查清单等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtyjTvN0d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jbranchaud/til&#34;&gt;Today I Learned&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者是来自芝加哥的开发者 Josh Branchaud，该仓库的创建目的，在于收集其平日所学的一些碎片化编程知识和开发技巧。其中包括 Git、JavaScript、Linux、VSCode、Devops、Chrome 等不同技术领域的分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ktx8PyR8Z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huzecong/oi-slides&#34;&gt;oi-slides&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;位开发者将其在 2013-2018 年期间的信息学竞赛课件在 GitHub 上开源了。这份课件覆盖了 TopCoder 题目选讲、CodeChef 题目选讲、趣题选讲、网络流模型与例题、NOIp 图论、数据结构及应用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kt4gP1Sdo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SSHeRun/CS-Xmind-Note&#34;&gt;CS-Xmind-Note&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者整理的计算机科学学习笔记，其中包含计算机组成原理、数据结构、计算机网络、操作系统等技术分类。内容整理得十分详细，是份很不错的学习参考资料。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsWpKjXgJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/remram44/regex-cheatsheet&#34;&gt;Cheatsheet for regex syntaxes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的正则表达式语法速查清单。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsUQk7xrW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MintCN/linux-insides-zh&#34;&gt;《Linux 内核揭秘》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录并翻译了一系列关于 Linux 内核及其内在原理的技术帖，旨在帮助那些对 Linux 内核内在机理感兴趣的人。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsMZfqHYd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Xunzhuo/Algorithm-Guide&#34;&gt;Algorithm Guide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的中文算法指南，该仓库主要分为两大分支，主分支为算法和数据结构教程，次分支为算法竞赛、数据结构相关的课件、论文、书籍、网站、习题整理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsFUSFCIL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/growthbook/growthbook&#34;&gt;Growth Book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 A/B 测试平台，拥有贝叶斯统计引擎、测试结果分类、可视化编辑器、电子邮件警报等功能，还可 Snowflake、Redshift、BigQuery、GA 统计等平台拉取数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsEJOtjOU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/No-Github/1earn&#34;&gt;1earn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 维护的安全知识框架，内容包括但不仅限于 Web 安全、工控安全、取证、应急、蓝队设施部署、后渗透、Linux 安全、各类靶机 writup 等。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ks4cTgO6M&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sheepzh/poetry&#34;&gt;poetry&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个华语现代诗歌语料库，里面收录了 2K+ 诗人，42K+ 诗歌，8M+ 字，包括五四至今所有流派的华语现代诗歌。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KrkrDk3Er&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangyuGithub01/Machine_Learning_Resources&#34;&gt;Machine_Learning_Resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的机器学习面试资源整理，涵盖特征工程、算法基础、机器学习算法、NLP、推荐系统等知识点。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kr8t01quM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/oldratlee/useful-scripts&#34;&gt;useful-scripts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了提升工作效率，阿里一位后端工程师在 GitHub 上开源了一些比较实用的程序脚本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kqm9j4mVm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liuyubobobo/Play-Leetcode&#34;&gt;Play-Leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个Leetcode 算法题解代码仓库，重在强调算法一题多解，同时标注简明的算法思想，时间复杂度和空间复杂度。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpV2YwHbO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OWASP/wstg&#34;&gt;wstg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的《Web 安全测试指南》，可用于测试与检查 Web 项目的安全性，便于对漏洞作出及时防护。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpLCmDvgp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HuangCongQing/UCAS_Course_2019&#34;&gt;UCAS_Course_2019&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自国科大的研究生，在 GitHub 上整理了一份资源库，里面收录了中国科学院大学 2019-2020 年的部分课程 PPT，涵盖了图像处理与分析、强化学习、模式识别、自然语言处理、高级算法设计与分析等多个领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kp1EX8hd9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/EdgeSecurityTeam/Vulnerability&#34;&gt;Vulnerability&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个企业安全漏洞收集库，作者会不定期整理从棱角社区对外公布的最新安全漏洞。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoR3orZPR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tuteng/Best-websites-a-programmer-should-visit-zh&#34;&gt;Best-websites-a-programmer-should-visit-zh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个资源库，里面收录了不少程序员在日常生活工作中，经常用于查阅或学习的技术网站。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Koycpjl8S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chefyuan/algorithm-base&#34;&gt;Algorithm Base&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源算法知识库，通过动画配图及文字介绍的方式，让开发者可以更加轻松的学习并吸收算法知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KooLUcTXA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/conanhujinming/comments-for-awesome-courses&#34;&gt;comments-for-awesome-courses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;名校公开课程评价网，由多个 GitHub 开发者共同参与维护的一个开源项目，主要针对各大高校计算机课程在学习难度、课程规划、进阶资源等方面，做出整理与总结。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ko3mBoO6q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wtsxDev/reverse-engineering&#34;&gt;reverse-engineering&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一位开发者整理的逆向工程学习资源，包含书籍、课程、项目实践、开发工具等多个分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnOf07WLs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shengyp/doing_the_PhD&#34;&gt;Doing the PhD&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的读博指南，其主要目的，在于让博士生掌握更多读博相关信息，从而做出更为准确的判断。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnCsmkZ20&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SmartKeyerror/Psyduck&#34;&gt;Psyduck&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 上开源了技术思维导图，借助 Xmind，绘制并注解了关于 Linux 操作系统、计算机网络、数据库、Redis、C++、Golang 相关的基础知识，便于开发者快速吸收与复习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Knvo08gha&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jstrieb/systems-programming-cheat-sheet&#34;&gt;systems-programming-cheat-sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的系统编程速记清单。该清单是作者在 2019 年春季，在卡内基梅隆大学学习「计算机系统概论」时编写而成，主体内容基于《深入理解计算机系统》一书。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnlXup4mK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0voice/campus_recruitmen_questions&#34;&gt;campus_recruitmen_questions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的资料库，收集了 5000 道校招常用面试题，包含 leetcode，校招笔试题，面试题，算法题，语法题，目前仍在持续更新中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnkMqteiK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ffffffff0x/Digital-Privacy&#34;&gt;Digital-Privacy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了保护个人数据安全，GitHub 用户 ffffffff0x 整理了一套关于数字隐私搜集、保护、清理集一体的方案，外加开源信息收集 (OSINT) 对抗。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnjBmCUlr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rachitiitr/modern-cpp-tricks&#34;&gt;Modern CPP Tricks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软前工程师 Rachit Jain 在 GitHub 上开源的一份 C++ 知识库。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KmwTt8fqB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AkashSingh3031/The-Complete-FAANG-Preparation&#34;&gt;The Complete FAANG Preparation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个面试题解仓库，里面包含了数据结构、算法知识点讲解、Facebook、Apple、Google 等互联网公司面试题、基于主流编程语言构建的 Demo 示例等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kll2V3Z99&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/machine-learning-collection&#34;&gt;machine-learning-collection&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源了一份机器学习相关的资源列表。主要收集微软及其子公司在机器学习领域中常用的一些工具、模型、数据集等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kj5ZJAVwk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/secguide&#34;&gt;《代码安全指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该指南旨在梳理 API 层面的风险点并提供详实可行的安全编码方案。当前已包含 C/C++、JavaScript、Node、Go、Java、Python 等多个不同编程语言版本。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KibqCt5hB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;书籍教程&#34;&gt;书籍/教程&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://systemdesign.org&#34;&gt;《系统设计面试指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由来自 FAANG（Facebook、苹果、亚马逊、奈飞、谷歌）的工程师联合编写。书籍中配套有丰富的插图与面试题，以便帮助开发者更好的掌握系统设计技术，快速通过面试。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8AOZq5Ub&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.patterns.dev/&#34;&gt;《Learning Patterns》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开放的前端技术书籍，主要讲解现代 Web 应用的设计模式与组件模式，了解如何使用 vanilla JavaScript 和 React 构建强大的 Web 应用程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7mdYcl9Y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aykutkardas/regexlearn.com&#34;&gt;《从 0 到 1：学习正则表达式》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个很有趣的开源技术教程，与常规技术教程不同，该教程会基于问答的形式，通过可交互式界面与速查表，让你在互动中实践与理解正则表达式，让整个学习过程不再枯燥乏味。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7kVt485S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alexmojaki/futurecoder&#34;&gt;Future Coder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的可交互式 Python 教程，面向初学者设计，亮点是可以一边在线学习技术，一边敲代码验证结果，强化知识的吸收。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7dYwinIk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cbx33.github.io/gitt/intro.html&#34;&gt;《Git In The Trenches》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本很有趣的技术书籍，作者构建了一家名为 Tamagoyaki 的虚拟公司，通过讲故事的方式，让大家能够有代入感的学习 Git。了解在实际工作中，如何用 Git 来解决问题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L73mZmnzN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xinychen/latex-cookbook&#34;&gt;《LaTeX 论文写作指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解 LaTeX 发展历史、文本与公式编辑、表格制作、图形绘制与插入等基础用法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6WiB8SpJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PKUanonym/REKCARC-TSC-UHT&#34;&gt;《清华大学计算机系课程攻略》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;清华学生在 GitHub 上开源的一份学习资料，覆盖了计算机科学导论、数据结构、人工智能导论、计算机组成原理、操作系统、现代密码学、线性代数、微积分等多个领域的资料、课件、参考教材等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6CiHFbjo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vendasta/setup-new-computer-script&#34;&gt;《Mac 开发环境快速配置指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外工程师开源的《Mac 开发环境快速配置指南》，主要包含了命令行、代码编辑器、编程语言开发环境、系统应用等各项配置。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L67ezsvmH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/parallel101/course&#34;&gt;《C++ 高性能并行编程与优化》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;课程前半段主要介绍现代 C++，后半段主要介绍并行编程与优化。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5XO5z6my&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/https://datascienceatthecommandline.com/2e/?continueFlag=2b274beee5ac43dac12bbb279065fa2e&#34;&gt;《命令行中的数据科学》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过学习，你将掌握如何用命令行工具来获取、清理、探索和建模数据，为了帮你快速入门，作者还提供了一个内置 100 多款 Unix 工具的 Docker 镜像，在主流操作系统上均可使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5TGlu2SM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dendibakh/perf-book/&#34;&gt;《现代 CPU 性能分析与调优》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;此书是一本 170 页的指南，结合了多个不同行业的专家知识，讲解 CPU 微体系结构、性能分析技巧，以及相关的工具与建议参考等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5q3EaOwf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/d2l-ai/d2l-zh&#34;&gt;《动手学深度学习 2.0》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作为一本面向中文读者的能运行、可讨论的深度学习教科书，已被全球 55 个国家 300 所大学用于教学。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5oSEtISv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/minitorch/minitorch&#34;&gt;MiniTorch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;康奈尔科技校区（Cornell Tech）开源的机器学习 DIY 教学库，可帮助工程师更好的了解深度学习系统概念。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L57mNzVgi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://betterprogramming.pub/numpy-illustrated-the-visual-guide-to-numpy-3b1d4976de1d&#34;&gt;《图解 NumPy：可视化指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一位名为 Lev Maximov 的工程师写的，通过插图的方式，详细分析并讲解了 NumPy 向量、矩阵、3D 及高维数组的应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L56bKk7xQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/missing-semester-cn/missing-semester-cn.github.io&#34;&gt;《计算机教育中缺失的一课》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;麻省理工大学的开源技术教程，该课程主要讲授命令行、文本编辑器、Git 版本控制系统等工具的使用，以及关于元编程、安全和密码学等知识的科普。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L53f6oSRc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sysprog21/lkmpg&#34;&gt;《Linux 内核模块编程指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解 Linux 内核模块简介、模块交互、系统调用、阻塞进程和线程、调度任务、中断处理程序等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4rx7kW0J&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kelthuzadx/EffectiveModernCppChinese&#34;&gt;《Effective Modern C++ 》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作为高效 C++ 丛书之一，通过对复杂技术知识点的清晰阐释，让其成为 C++ 程序设计指南业界标杆。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L43bacj6b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shervinea/mit-15-003-data-science-tools&#34;&gt;《数据科学工具学习指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;麻省理工大学教授在 GitHub 开源的教程，主要讲解如何使用 SQL 检索数据，R 语言操作数据，Python 数据可视化，Git 代码版本控制，以及常见的 Bash 脚本使用技巧等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3TKFCQMQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LeonLi0102/spring-in-action-v6-translate&#34;&gt;《Spring 实战第六版》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本 Java 技术教程，原作者 Craig Walls 为 VMware 工程师，Spring 团队开发成员。该书主讲 Web 应用程序开发、数据处理、API 开发、REST 服务构建、数据持久化、Spring 管理与部署等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3PP7D9Xj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/logancyang/my-cs-degree&#34;&gt;《My CS Degree - Full-Stack ML Engineering》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位拥有物理学背景的软件工程师，为了让自己的 CS 专业技能得到更好的提升，设计了一整套 CS 教程，按照不同的学习阶段，教程被划为两块：通识教程（系统性的学习计算机原理知识）和项目教程（实践开发项目）。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3LHoqfeo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amitness/learning&#34;&gt;《数据科学学习指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该指南包含电子表格与数据库的数据处理、命令行工具使用、数据分析与可视化技巧、论文阅读方法，各类模型与算法讲解等知识，另外还有商业思维培养、写作与沟通技巧等非技术类内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L37t8sVfK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/google/eng-practices&#34;&gt;《Google 工程实践文档》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 在 GitHub 开源的一份工程实践文档，此文档为 Google 工程师长期累积的最佳实践，希望通过这份文档，能帮助更多开发者完成代码审查工作，为项目代码提供标准参考。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L36g3wonv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/&#34;&gt;《人工智能系统》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 开源了一个技术教程，主要讲解支持人工智能的计算机系统设计。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L34GDqA7g&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/villeheikkila/fullstackopen&#34;&gt;《深入浅出现代化Web 编程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;内容基于赫尔辛基大学的计算机课程编写而成，该课程共有 13 个章节，主要讲解 Web 开发基础知识、服务器端通信、React 项目开发、REST API 编写、单页面应用搭建、CI/CD 与容器使用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2WPA98Vn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Atcold/NYU-DLSP21&#34;&gt;《深度学习》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主讲人为 2018 年图灵奖得主，卷积网络之父杨立昆（Yann Le Cun），总课时为 14 周，主要讲解深度学习历史、循环和卷积网络、基于能量的模型、图卷积网络等知识点，并开放教程相关的幻灯片、视频、Jupyter notebook、项目代码等资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2Vga185w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wsdjeg/Learn-Vim_zh_cn&#34;&gt;《用聪明的方法学习 Vim》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书将从零开始，着重于 Vim 编辑器的重点功能，教你如何快速上手并使用 Vim。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2GkH8YWT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guanyingc/latex_paper_writing_tips&#34;&gt;《LaTeX 写作技巧》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;港中大的一名学生在 GitHub 上开源的，适用于撰写研究论文。项目里面会提供一些已发布论文作为示例，提供表格及图形方面的排版参考&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2F9Cziqd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dreamhead/patterns-of-distributed-systems&#34;&gt;《分布式系统模式》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了一系列关于分布式系统实现的文章，主要介绍像 Kafka、Zookeeper 等分布式系统在实现过程中采用的通用模式，是学习分布式系统实现的基础。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2a7FcTAx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rougier/scientific-visualization-book&#34;&gt;《科学可视化：Python + Matplotlib》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解 Matplotlib 库的介绍与基本原理、图形设计、图形布局与组织、3D 图形与动画等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L22gB5vWx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/izackwu/TeachYourselfCS-CN&#34;&gt;《现代化计算机科学自学指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中文翻译版，主要面向想自学软件的工程师、在校学生、打算转计算机行业的互联网从业人员。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L20HalQYc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ShiqiYu/CPP&#34;&gt;《C/C++ 程序设计》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者为南方科技大学计算机系于仕琪副教授，同时也是 OpenCV 中国团队负责人。教程共分为 15 个篇章，覆盖 C/C++ 基础介绍、数据类型与算术运算法、数据结构、内存指针、函数、类等多个知识点的讲解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1SQ5BIZD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/michuanhaohao/ReID_tutorial_slides&#34;&gt;《基于深度学习和行人重识别》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;浙江大学罗浩博士开放的一个技术教程，课程主要包括深度学习基础、行人重识别理论基础和行人重识别代码实践三个篇章。内容包含各类课件与视频教程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1HQby6sO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.cs.umd.edu/class/spring2021/cmsc420-0101/lectures.html&#34;&gt;《Data Structures Spring 2021》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;美国马里兰大学开放的数据结构教程，主要讲解数据结构基础、二叉树、红黑树、散列、范围树等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1CldodmK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/spring2go/cs_study_plan&#34;&gt;cs_study_plan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份硬核计算机科学 CS 自学计划，偏向软件工程和系统架构方向。旨在帮助开发者制定一个为期 3～5 年的重学 CS 目标，夯实 CS 基本功，达到美国一流大学 CS 专业本科毕业水平。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1ypG7RxL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coffe1891/frontend-hard-mode-interview/&#34;&gt;《前端内参》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的前端技术书籍，该书共有 11 章，覆盖了技术面试、JavaScript 特性解析、数据结构与算法、主流框架、开发工具、编程范式、设计原则与编程范式等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1qyCi4g3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doggy8088/Learn-Git-in-30-days&#34;&gt;《30 天精通 Git 版本管理》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Git 教程，主要介绍 Git 的一些常用操作，以及日常工作中实际应用场景讲解。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1fKRoIbm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jaredtao/DesignPattern&#34;&gt;《C++ 11 全套设计模式》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源技术资料，里面包含了工厂方法模型、单例模式、策略模式、观察者模式等 23 种模式的常见用法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0WHHg2dl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://people.scs.carleton.ca/~paulv/toolsjewels.html&#34;&gt;《计算机安全和互联网》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费开放的计算机书籍，主要讲解计算机安全概念与基本原则、身份验证协议、操作系统安全和访问控制、Web 与浏览器安全、软件漏洞利用与提权等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0zIYBx5n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/maxvfischer/DIY-CNC-machine&#34;&gt;《从零打造一台属于你的数控机床》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自瑞典的工程师 Max Fischer 在 GitHub 开源了一份技术教程，在该教程中，作者将手把手教你如何自制一台自动化数控机床，里面包含完整的物料清单、3D 打印部件、硬件及软件的安装说明等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L03I8lwfT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/foxsen/archbase&#34;&gt;《计算机体系结构基础》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源技术书籍，作者将从微处理器设计的角度出发，充分考虑计算机体系结构的学科完整性，强调体系结构、基础软件、电路和器件的融会贯通。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFGK3736o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liuxinyu95/unplugged&#34;&gt;《同构 - 编程中的数学》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主讲自然数和计算机程序、欧几里得算法、递归的形式与结构、斐波那契数列、罗素悖论、数学基础的分歧等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDjPD6IjR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pandolia/tinyc&#34;&gt;《自己动手写编译器》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;介绍如何通过实现一个简单的编译器（TinyC），并借助实例来描述基本的编译原理及过程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCGWAoyac&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://diveintosystems.org/book/index.html&#34;&gt;《深入系统》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一本计算机系统教程，作者为来自西点军校与斯沃斯莫尔学院的博士。教程将从 C 语言展开，带你了解 C 语言调试工具、二进制、冯诺依曼结构、汇编、代码优化、共享内存等相关知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCyH9q2jk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QianMo/Real-Time-Rendering-4th-Bibliography-Collection&#34;&gt;《实时渲染第四版》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该资料可作为研究实时渲染与计算机图形学技术的读物，里面收录了超过 2000 份的参考文献，主要介绍图形渲染管线、图形处理单元、纹理与阴影、图像空间效果、图形硬件等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCwl2x6BF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JoeWDavies/geoblender&#34;&gt;GeoBlender&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源教程，主要教你如何使用 QGIS 和 Blender 软件，制作带有阴影效果的浮雕地图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KC6pFsxN3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://ccdcoe.org/library/publications/malware-reverse-engineering-handbook/&#34;&gt;《恶意软件逆向工程手册》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者是来自 CCDCOE Technology Branch 的研究人员。开放这本手册的目的，在于帮助技术人员更好的利用技术手段，去合理分析 Windows 上那些恶意软件的可执行文件，以便更好的抵御恶意软件的威胁。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBWZa3oUs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/howardlau1999/server-programming-guide&#34;&gt;《服务器编程指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解服务器编程中的程序编译装载、C++ 项目构建、多线程与多进程编程范式使用、程序调试与部署等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBT3D4EwT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/Data-Science-For-Beginners&#34;&gt;《给初学者看的数据科学》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源了一份数据科学教程，课时为期 10 周，共 20 节，主讲数据科学通用定义、统计与概率导论、使用 SQL 与 NoSQL 处理数据、Python 与数据可视化等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBLcyzVAy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mml-book/mml-book.github.io&#34;&gt;《机器学习之数学》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书主要分为两大部分，一讲数学基础，二讲数学在机器学习算法中的应用。你能从该书中学到线性代数、微积分和概率论等数学基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzYqIxykt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WZMIAOMIAO/deep-learning-for-image-processing&#34;&gt;《深度学习在图像处理中的应用教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面主要整理了作者在研究生期间的学习内容，教程将以视频的内容呈现，主要介绍网络结构与创新点、基于 PyTorch / TensorFlow 搭建与训练网络。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyJPGa2el&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.practical-go-lessons.com/&#34;&gt;《Practical Go Lessons》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Go 语言技术教程，由国外一名开发者历经两年多编写而成。作者将通过这个教程，循序渐进的带你了解 Go 语言的基础知识，以及常见的计算机科学概念&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyH5cjoHV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://techdevguide.withgoogle.com&#34;&gt;《技术开发指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;想提升下编程技能，可以看下 Google 开放的这个指南，该指南在于帮助对软件专业感兴趣，或从事本专业的人员更好的掌握计算机科学。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyBAeg6zt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YatSenOS/YatSenOS-Tutorial-Volume-1&#34;&gt;《逸仙 OS 简明教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;想了解「如何从零开始编写操作系统」的同学，可以看下中山大学在 GitHub 上的这个开源项目。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyxEI3YR6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/woai3c/introduction-to-front-end-engineering&#34;&gt;《带你入门前端工程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的前端技术书籍，主要记录作者在近两年来，在前端工程师实践经验和学习心得方面的总结。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KytwYgwJE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.learnlatex.org/en/&#34;&gt;《LaTeX 入门教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个对新手友好的开源技术教程，主要讲解 LaTeX 基础知识、常见用法、文档布局、错误处理等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyeNI8HFk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/louisfb01/start-machine-learning&#34;&gt;《开始机器学习》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一名工程师在 GitHub 开源了他总结的机器学习指南，主要列举了机器学习入门必备的视频、书籍、开放教程等资源，并针对不同编程经验的人群，给出了不同的学习参考建议，有考虑学习机器学习的同学可以看下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ky87Gr9Mc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/docker/getting-started&#34;&gt;《Docker 入门教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Docker 官方在 GitHub 开源的教程，主要讲解如何创建、运行并删除容器、数据持久化处理、多容器支持、Compose 的使用等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ky5nck1yv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://docs.microsoft.com/zh-cn/learn/paths/rust-first-steps/&#34;&gt;使用 Rust 迈出第一步&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软开源的一个 Rust 入门教程，主要讲解 Rust 基础概念、错误处理、内存管理、自动测试、命令行程序编写等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxZSgjHqv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guanguans/design-patterns-for-humans-cn&#34;&gt;《Design patterns for humans》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中文版，简单解释设计模式！一份超全的设计模式指南，共包含 23 种设计模式的讲解，每一种作者都采用了通俗易懂的方式给大家做讲解，希望能帮助开发者更好的理解设计模式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxXw8dIHG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jeffgerickson/algorithms&#34;&gt;《算法》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;想学算法的同学可以看下伊利诺伊大学教授 Jeff Erickson 写的《算法》一书。这位老教授在 UIUC 教了 20 年的书，授课内容与经验都浓缩在这本书上了。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxVWI90rK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ryanmcdermott/clean-code-javascript&#34;&gt;《Clean Code JavaScript》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 工程师 Ryan McDermott 根据 《Clean Code》总结的一份适用于 JavaScript 的软件工程指导准则，希望能帮你写出易读、易复用、易重构的 JavaScript 代码。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kxoagmw6C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/andrews1022/web-development-2021-course-list&#34;&gt;Web Development In 2021&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一位开发者根据 Udemy 的热门课程，整理了一份 Web 开发者 2021 年学习指南，里面包含常用的 Web 开发工具、设计软件、主流框架、基础知识、后端 &amp;amp; DevOps 技术堆栈等分类。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kx5jgCeQP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangdoc/clang-tutorial&#34;&gt;《C 语言教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解 C 语言的发展历史及一些基础语法，如变量、运算符、指针、函数、命令行环境等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwTwFfBdS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/s-matyukevich/raspberry-pi-os&#34;&gt;Raspberry Pi OS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;想学操作系统开发的同学可以看下 GitHub 上这个开源教程，该项目将基于树莓派与 Linux 内核，手把手教你创建一个简易版的操作系统：Raspberry Pi OS。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwkaNzoGc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangdoc/bash-tutorial&#34;&gt;《Bash 脚本教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要讲解 Bash 的一些基础用法，如变量、字符串操作、算术运算、脚本入门等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwaKj3uxX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/curiousily/Getting-Things-Done-with-Pytorch&#34;&gt;《Getting Things Done with Pytorch》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开发者可从该书中学到有关 PyTorch、神经网络、图像分类、人脸检测、情感分析等基础知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvHtUr1Nj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/computervision-recipes&#34;&gt;《Computer Vision Recipes》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源的一份计算机视觉指南，提供了诸多可用于构建计算机视觉的代码示例与最佳实践准则。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kvz2j6jgc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/swaroopch/byte-of-vim&#34;&gt;《A Byte of Vim》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这本书将会教授你一些与 Vim 相关的基础知识，例如 Vim 的发展历史、安装方式、常用操作与快捷命令，以及如何通过编写脚本与安装插件来扩展更多 Vim 功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kvf0friYp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jkchao/typescript-book-chinese&#34;&gt;《深入理解 TypeScript》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书将从基础到深入，全面阐述 TypeScript 的各种魔法，并结合实际场景用例，让你更深入的理解 TypeScript。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kv2PhowAd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.nginx.com/resources/library/web-application-security&#34;&gt;《Web 应用安全》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐 Nginx 的一本开源技术书籍，该书主要讲解 Web 应用常见漏洞、Web 安全保护措施部署、应用安全性提升具体技巧、Web 应用权限管理等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuJYn7nmQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/IoT-Technology/IOT-Technical-Guide&#34;&gt;IoT Technical Guide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份高质量的 IOT 技术教程，包含从零搭建高性能物联网平台、物联网解决方案、以及 Thingsboard 源码分析等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtQYJ4RSE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dairongpeng/algorithm-note&#34;&gt;《algorithm-note》中文版&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的算法笔记，，该系列包括数组，链表，树，图，递归，DP，有序表等相关数据结构与算法的讲解及代码实现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtJUlbaZO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rootsongjc/kubernetes-hardening-guidance&#34;&gt;《Kubernetes 加固指南》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 NSA 发布，一名开发者将其译为了中文，主要包含 Kubernetes Pod 安全、网络隔离与加固、认证和授权、日志审计、应用安全实践等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtdHjyT3R&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES&#34;&gt;《计算机网络－自顶向下方法》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份经典的计算机网络书籍《计算机网络－自顶向下方法》笔记，主要有英文版书籍课后习题翻译，以及用 Python 语言解答的代码记录，包含第二章应用层、第四章网络层、Wireshark 实验部分等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ksjkvs07V&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/woai3c/nand2tetris&#34;&gt;《计算机系统要素 - 从零开始构建现代计算机》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书主要讲解了计算机原理、编译原理、操作系统相关知识。内容通俗易懂，翻译也很给力。每一章背后都有对应的练习，需要你手写代码去完成，堪称理论与实践结合的经典。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Krfxqj0ig&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cstack/db_tutorial&#34;&gt;《动手构建一个简单数据库》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源技术教程，作者将基于 C 语言，手把手构建一个类 SQLite 数据库，让你进一步了解数据库的工作原理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KqPBR9NeS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/learn/paths/pytorch-fundamentals/&#34;&gt;《PyTorch 基础》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软开放的一套技术教程，主要讲解 PyTorch 及其实际应用领域的基础内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpzrpezTO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huihongxiao/MIT6.S081&#34;&gt;MIT6.S081&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一名开发者在学习 MIT 本科课程《MIT6.S081 操作系统工程》一课时，对其进行了翻译，目前中文版已在 GitHub 开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoSeslCYn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OpenIntroStat/ims&#34;&gt;《现代统计学导论》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该书主讲数据基础、数据分析、回归建模、统计推断、推理建模等知识。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KoHCTxErh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fenixsoft/awesome-fenix&#34;&gt;《凤凰架构：构建可靠的大型分布式系统》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的后端技术书籍，以 “如何构建一套可靠的分布式大型软件系统” 为叙事主线的开源文档，也是可帮助开发人员整理现代软件架构知识点的技能地图。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KopWYkPGe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/IoT-For-Beginners&#34;&gt;《给初学者看的 IoT》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源了一份物联网教程，课时为期 12 周，共 24 节，主讲物联网通用知识、传感器数据收集、执行器响应处理、硬件联网方式、位置追踪、语音识别等基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KonAQiakP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/changkun/modern-cpp-tutorial&#34;&gt;《现代 C++ 教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本书号称『高速上手』，从内容上对二十一世纪二十年代之前产生 C++ 的相关特性做了非常相对全面的介绍，读者可以自行根据下面的目录选取感兴趣的内容进行学习，快速熟悉需要了解的内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnVjmkGRK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/snowkylin/tensorflow-handbook&#34;&gt;《简单粗暴 TensorFlow 2》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本书作为简明的 TensorFlow 2 入门指导手册，基于 Keras 和即时执行模式（Eager Execution），力图让具备一定机器学习及 Python 基础的开发者们快速上手 TensorFlow 2。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KnucVCYgN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/ML-For-Beginners&#34;&gt;《给初学者看的机器学习》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源了一份机器学习教程，课时为期 12 周，共 24 节，主要讲解机器学习简介与历史、自然语言处理、常用 NLP 任务、 语义及情感分析等基础知识，并通过开发南瓜价格预测、美食分类、酒店情感分析等多个项目，带你了解机器学习的实际使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kni1Xn1bS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Vonng/ddia&#34;&gt;《设计数据密集型应用》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本书将从底层数据结构到顶层架构设计，把数据系统设计中的精髓娓娓道来。其中的宝贵经验无论是对架构师，DBA、还是后端工程师、甚至产品经理都会有帮助。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Km7yDfTVq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/Web-Dev-For-Beginners&#34;&gt;《给初学者看的 Web 开发教程》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 开源了一份 Web 开发教程，课时为期 12 周，共 24 节，主要讲解 JavaScript、CSS、HTML 相关的基础知识，并通过开发打字游戏、浏览器扩展、太空游戏等多个项目，带你了解 Web 开发的整体流程。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlLKZ7LEg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/madebygps/self-taught-guide-to-cloud-computing&#34;&gt;《在 6 个月内掌握云计算的基础知识》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软工程师 Gwyneth 在 GitHub 上开源了一份「云计算自学指南」，该指南主要拆分为六大模块，分别对应 Linux 及计算机网络基础、脚本及代码工具、云计算、DevOps 实践、学习资源、附加资源（技术相关话题）等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlEz5wcPP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://threedots.tech/go-with-the-domain/&#34;&gt;《Go With The Domain》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本 Go 语言相关的免费电子书，主要教你如何构建一个真实的、开源的、可部署的 Web 应用程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Klnp2v0MD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/&#34;&gt;《Take your first steps with Rust》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软免费开放的一个 Rust 新手教程，该课程主要讲解 Rust 基础概念、开发工具、错误处理、内存管理、自动化测试、快速构建第一个命令行程序等内容，比较适合新手入门学习。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KldYxntmo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Charmve/computer-vision-in-action&#34;&gt;《计算机视觉实战演练：算法与应用》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者为迈微 AI 研习社创始人、CSDN 博客专家。内容有计算机视觉相关的基础知识和预备知识，计算机视觉基础理论（核心部分为神经网络模型）等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kjq1Dn553&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://designingelectronics.com/&#34;&gt;《设计可用的电子产品》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本电气工程相关的电子书，作者为 Hunter Scott，现担任 Reach Labs（硅谷科技公司）的硬件工程总监，从事电子产品设计工作十余年，曾创建两家硬件公司，具有颇为丰富的硬件研发经验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KjnIkz0sJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doodlewind/jshistory-cn&#34;&gt;《JavaScript 二十年》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本翻译质量颇高的前端开源书籍，该书自一年前启动翻译，并于前不久出版了纸质书，目前电子版在 GitHub 上已完整开源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kiqm3EfIa&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;机器学习人工智能&#34;&gt;机器学习/人工智能&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://sketch.metademolab.com/&#34;&gt;Animated Drawings&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款很有趣的 AI 工具，可以借助人工智能技术，让儿童绘画作品动起来。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7be3caHT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/joyycom/VNN&#34;&gt;VNN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;YY 开源的一款高性能、轻量级神经网络部署框架，可将真实人脸快速转换为迪士尼、3D 游戏、油画画像风格的人脸外形，并提供了适配多场景的目标检测、物品分割、对象识别等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5nHAuA4f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhm-real/MotionPlanning&#34;&gt;MotionPlanning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自华为的自动驾驶算法工程师，在 GitHub 开源了一个运动规划算法，里面实现了各类自动驾驶汽车上常用的路径规划 + 路径跟踪算法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4vsEo5PJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/NUWA&#34;&gt;「NÜWA（女娲）」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软与北京大学联手，在 GitHub 开源了一个多模态预训练模型，可实现文本/草图转图像、图像补全、文字/草图转视频等任务，功能异常强大。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3gRDcwqP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/qlib&#34;&gt;Qlib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 AI 量化交易平台，旨在寻求与挖掘 AI 技术在量化投资领域中的价值。里面包含数据处理、模型训练、回溯测试的完整 ML 管道，并且覆盖了量化投资的整个链条：Alpha 探索、风险建模、投资组合优化和交易执行等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2M24EQXi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/a-b-street/abstreet&#34;&gt;abstreet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;项目可通过软件来模拟街道和十字路口的交通流量，以规划各类车辆的运行网络，进一步改善交通状况。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2l7zjPkT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tradytics/eiten&#34;&gt;Eiten&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一家热衷于用 AI 与数据分析来做投资分析的企业 Tradytics，在 GitHub 开源的内部工具包，里面主要实现了各种统计与算法投资策略，如最小方差、最大夏普比率和基于遗传算法的投资组合，对这块技术感兴趣的同学可以看下。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L23rE86E2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Sxela/face2comics&#34;&gt;face2comics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;外国一位名为 Alex 的开发者整理的人脸转漫画数据集，数据集拥有两个版本，v1 主要为深色调（含 1 万张图片），v2 为深红色调（含 2 万张图片）。漫画风格偏欧美风，可用于训练 pix2pix 或相似网络&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1bqXcRvo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yeemachine/kalidokit&#34;&gt;KalidoKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自纽约的开发者 Richard Yee 做了一款人体运动模拟器，通过捕捉人体面部表情、眼睛、姿势、手部动作等元素后，便可自动映射到虚拟人物身上，打通真实世界与虚拟世界的连接。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0RcJeVUJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SimulaVR/Simula&#34;&gt;Simula&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了推进 VR 与 AR 技术在 Linux 系统上的应用，国外一家名为 SimulaVR 的机构打造了一款 Linux VR 桌面窗口管理器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0Q1FBNSk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bryandlee/animegan2-pytorch&#34;&gt;AnimeGANv2-PyTorc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可借助 AI 技术，快速将图像转换为漫画风格画作，提供 Demo 试用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0HMg73CA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thunlp/WantWords&#34;&gt;WantWords&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;清华大学 NLP 实验室在 GitHub 开源的 WantWords（万词王）词典还蛮有意思的。通过指定词义，便可匹配与之描述相近的词汇。比如，当你输入「开心的词」，该工具便会给出 &amp;ldquo;快乐&amp;rdquo;、&amp;ldquo;愉快&amp;rdquo;、&amp;ldquo;高兴&amp;rdquo; 等词汇。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0uqcocaP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mangdangroboticsclub/QuadrupedRobot&#34;&gt;Mini Pupper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的机器狗，带有激光雷达、相机传感器，整体成本不到 500 美元。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L0mz8F03G&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DefTruth/lite.ai.toolkit&#34;&gt;Lite.AI.ToolKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开箱即用的 C++ AI 模型工具箱，涵盖目标检测、人脸检测、人脸识别、语义分割、抠图等领域。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFRJWz2NX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/EricLee2021-72324/handpose_x&#34;&gt;HandPose X&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 上开源的手势识别项目，支持手部 21 个关键点检测、二维手势姿态、手势识别等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFIjsjDaw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guanshuicheng/invoice&#34;&gt;invoice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的增值税发票 OCR 识别项目，可通过 API 接口，快速识别发票代码、发票号码、开票日期、校验码、税后金额等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFtbPiulP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wtjiang98/PSGAN&#34;&gt;PSGAN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;北航与国科大在 2019 年与 GitHub 开源的一项技术，可通过生成对抗网络，快速实现妆容转移、一键上妆等功能。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFpsu6qUI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BlinkDL/AI-Writer&#34;&gt;AI-Writer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用 GPT 来生成中文网文小说，模型训练数据来自网文。项目内置基于 Python 运行的网页界面，并通过特殊采样方法，改善了小模型的生成质量。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFg1XrNtE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liuhuanyong/ChainKnowledgeGraph&#34;&gt;ChainKnowledgeGraph&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 开源的产业链图谱，主要包括 A 股上市公司、行业与产品共 3 类实体。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KENKtwvVc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/Lichee&#34;&gt;Lichee&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;腾讯技术团队在 GitHub 开源的一款「多模态内容理解」算法框架，框架采用分层的思想组织模型训练流程，包含了数据处理、预训练模型、常见模型以及模型加速等模块。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KECKz5MN8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/deepmind/mujoco&#34;&gt;MuJoCo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Deepmind 前不久收购了知名物理引擎 MuJoCo，未来将用于机器人、生物学、图形动画、机器学习等领域，帮助开发者提升产品开发体验。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDVxDs5Kc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saic-mdal/lama&#34;&gt;LaMa&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由莫斯科三星人工智能中心开源，可快速进行图像修复、指定对象移除等操作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDAkP8csy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhm-real/PathPlanning&#34;&gt;PathPlanning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个动画算法库，主要实现多种在机器人领域中，常用到的路径规划算法，其中也包括基于搜索与采样的方法。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KC43xtbgX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ZJU-FAST-Lab/Fast-Drone-250&#34;&gt;Fast-Drone-250&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;浙江大学 FASTLAB 实验室，在 GitHub 上开源了一套自主导航无人机的硬件组成与搭建方案。该项目可应用于无人机在未知环境中的自主飞行，集群飞行等场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KBJD7ASwc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/muzic&#34;&gt;Muzic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软最近在 GitHub 上开源了一个 AI 音乐项目，基于深度学习，可自动完成音乐创作。创作过程主要分为两步，一是音乐理解（符号分类、声音识别），二是音乐合成（歌曲歌词创作、音乐旋律生成）。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KAom4FzTk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://laion.ai/laion-400-open-dataset/&#34;&gt;LAION-400-MILLION OPEN DATASET&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一家名为 Laion 的人工智能非盈利组织，开放了全球最大的图像文本对（image-text-pair）数据集，共提供了 4 亿样本数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PeterL1n/RobustVideoMatting&#34;&gt;RobustVideoMatting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自字节跳动的工程师在 GitHub 上开源了一项视频自动抠图技术，该技术引入了一种强大、实时、高分辨率的人物视频抠图方法，使用循环神经网络，在处理视频流时有时间记忆，可在任意视频上做实时高清抠像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzEoG7ZTy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kornia/kornia&#34;&gt;Kornia&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 PyTorch 的可微分的计算机视觉库。可训练模型来执行图像变换、对极几何、深度估计和低级图像处理。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KzsdGBtxk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tangramdotdev/tangram&#34;&gt;Tangram（七巧板）&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可帮助 AI 开发者快速训练、部署与监控机器学习模型的开源工具。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kys9JFyt1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CLUEbenchmark/DataCLUE&#34;&gt;DataCLUE&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内首个以数据为中心的 AI 测评（含模型分析报告），可通过系统化改造数据来提升模型效果。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyhybxBYE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/victor369basu/Real-time-stock-market-prediction&#34;&gt;Real-time Stock-market&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者尝试基于机器学习来进行股票市场预测。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KxdyHi36a&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liuhuanyong/PersonGraphDataSet&#34;&gt;PersonGraphDataSet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的人物图谱数据集，收录了近十万的人物关系图谱事实数据库，通过人物关系抽取算法抽取 + 人工整理得出，可用于人物关系搜索、查询、人物关系多跳问答，以及人物关系推理等场景提供基础数据。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kw8obhjbN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DayBreak-u/chineseocr_lite&#34;&gt;chineseocr_lite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款超轻量级中文 OCR，支持竖排文字识别，总模型仅 4.7M。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvGiQvb5y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geekyouth/SZT-bigdata&#34;&gt;SZT-bigdata&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的深圳地铁大数据客流分析系统，主要通过分析深圳通刷卡数据，从大数据的技术角度来研究深圳地铁客运能力，探索深圳地铁优化服务的方向。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvpBOuFRz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kazuhito00/NARUTO-HandSignDetection&#34;&gt;NARUTO-HandSignDetection&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源项目，可用于识别火影忍者中的结印手势。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvnfItTfP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://datasets.bifrost.ai/&#34;&gt;BIFROST&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给从事 AI 开发的同学分享个数据集搜索神器，该网站当前共计拥有 1900 个数据集，提供人物、自动驾驶汽车、零售、无人机等六大类别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kv4oHjlCU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/graviraja/MLOps-Basics&#34;&gt;MLOps-Basics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 MLOps 基础教程，作者将通过 10 周的时间，带你了解 MLOps 的基础知识，如模型构建、监控、配置、测试、打包、部署、CI/CD（GitHub Actions）等内容。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuToMAN7b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/exadel-inc/CompreFace&#34;&gt;CompreFace&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的人脸识别与检测系统，不懂机器学习技术亦可使用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuLxIbNeV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lukas-blecher/LaTeX-OCR&#34;&gt;pix2tex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 LaTeX 代码识别系统，基于深度学习技术，快速识别数学公式的图像，并返回相应的 LaTeX 代码。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kub0Lur6c&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/babysor/Realtime-Voice-Clone-Chinese&#34;&gt;Realtime-Voice-Clone-Chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于深度学习的中文语音合成项目，通过采集分析一段具体的声音样本，可在 5 秒内生成与之类似的克隆语音。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ku8giFNOS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cbamls/AI_Tutorial&#34;&gt;AI_Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 AI 学习资料库，主要整理了人工智能、机器学习、深度学习、搜索系统、推荐系统、广告系统等领域的学习资料。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtLhAkezp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ChibaniMohamed/Polaris&#34;&gt;Polaris&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的人脸考勤系统，集成了脸部识别技术，拥有颇具未来感的设计风格，可用于尝鲜。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KtIJhvPH0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/curryandsun/neural_network_papers&#34;&gt;neural_network_papers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 AI 论文笔记，主要记录作者读过的一些论文，给出个人对论文的评分情况并简述论文 insight。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KsvjjnWZg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liucongg/NLPDataSet&#34;&gt;NLPDataSet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一名开发者在 GitHub 开源了常用数据集，主要将多个网络数据集进行整理清洗，并将格式统一化。其主要目的，在于构建一个较完善的中文片段抽取式阅读理解数据集。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ks9HQvfzg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DefTruth/lite.ai&#34;&gt;Lite.AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较丰富的 C++ 库，里面收录了 60 多个实用的 AI 模型，其中包含对象检测、人脸检测、风格迁移、人脸识别、图像分割、图像分类等类别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KrSqgjMNO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ben1234560/AiLearning-Theory-Applying&#34;&gt;AiLearning-Theory-Applying&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 AI 知识库，帮助开发者快速上手 AI 理论及应用实战：基础知识、机器学习、深度学习、自然语言处理 BERT，含大量注释及数据集，力求每一位能看懂并复现。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kq5Er9xsW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TingFree/NLPer-Arsenal&#34;&gt;NLPer-Arsenal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 NLP 开源知识库，主要收录 NLP 竞赛经验贴、通用工具、学习资料等内容，覆盖文本分类、机器翻译、语义解析、实体识别等类别。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpSiojUzt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kwai/DouZero&#34;&gt;DouZero&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 AI 斗地主项目，基于深度学习与深度蒙特卡罗（DMC）算法构建，尝试让 AI 与人类博弈。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KlmdYpi0k&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;有趣实用网站&#34;&gt;有趣/实用网站&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.species-in-pieces.com/&#34;&gt;Species in pieces&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;作者通过 CSS，实现了 30 种濒危保护动物的动画拼图，其中包括盔犀鸟、小头鼠海豚、金色毒箭蛙、克尼斯纳海马等动物。网站配有干净空灵的背景音乐，目的在于呼吁人们重视生态环境保护。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L89NOkiqA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://regexone.com/&#34;&gt;RegexOne&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐一个很不错的正则表达式学习网站：RegexOne，里面配套了完整教程、速查表、练习题等资源，帮助开发者学好正则，一步到位&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7y0AbIxu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/analysis-tools-dev/static-analysis&#34;&gt;Analysis Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐一个比较实用的开发工具网站，上面了汇总了多种编程语言的静 / 动态代码分析工具与 Linter。其主要目的，在于帮助你更好的完善 Code Review 流程，进一步提升代码质量。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3Kkat6r7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://gaugan.org/gaugan2&#34;&gt;「给我画张图（Paint Me a Picture）」&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;英伟达发布了一款蛮有意思的工具，可借助 AI 技术，将文字描述一键转换为逼真画像。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L3e79o3UM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.codingfont.com/&#34;&gt;Coding Font&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外几位开发者搭建的一个在线网站，可通过对比 27 款不同的编程字体，帮你选出编码体验最佳的那一款。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1h85Cm2v&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://pythontutor.com/&#34;&gt;Python Tutor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个颇有意思的代码可视化网站，可将代码按执行步骤，分段可视化展示，并允许将可视化代码内嵌到网站上。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KC2u7fERF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://datavizcatalogue.com/ZH/&#34;&gt;数据可视化工具目录&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集与汇总了各类数据可视化工具的详细描述、图形示例，以及可上手使用的工具集合与学习资源。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KA7Rcs3Q8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://tuzhidian.com/&#34;&gt;图之典&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给玩数据分析的同学推荐个比较实用的网站，在上面，你能轻松找到饼图、柱形图、桑基图、折线图、热力图、直方图等 22 种常用可视化图形，帮你完成日常的数据可视化工作。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KvF7MDKbm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://devhints.io&#34;&gt;Dev Hints&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个颇为实用的技术网站，里面整理了各种技术类型的速查表，其中包括 Git、Vim、Go、MySQL、Linux、VSCode、Vue 等各大常用技术的速查表清单。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kpa6zEVJP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/freeCodeCamp/LearnToCodeRPG&#34;&gt;Learn to Code RPG&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款交互式视觉小说游戏，可以让你边玩游戏、边学编程。项目里面拥有 600 多道计算机科学相关的测试题，你可以通过探索游戏菜单和解题的方式，来提升编程技巧。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7PGwl3uf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/threedle/text2mesh&#34;&gt;text2mesh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;你可以通过文字描述，让一件 3D 物体拥有不同皮肤和外观，快速生成其外表细节。比如，你可以给普通的 3D 人物模型，套上钢铁侠的衣服。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8bub5VSq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CleverRaven/Cataclysm-DDA&#34;&gt;《大灾变：劫后余生》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的回合制生存游戏，游戏背景设置在僵尸大爆发的末日之下，你需要通过探索获得食物与装备，并找到对应策略生存下来。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L8tKDxa4i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/turms-im/turms&#34;&gt;Turms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套开源的即时通讯引擎，为实时在线用户数为 100K~10M 应用而设计，配套有详细的开发文档。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L7u52fjTv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Cpp-Club/Cxx_HOPL4_zh&#34;&gt;《在拥挤和变化的世界中茁壮成长：C++ 2006–2020》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;C++ 之父此前在 HOPL 会议上发布了一篇技术论文, 该论文主要讲述了 C++ 从 2006 到 2020 年间的技术演化历史，涵盖了 C++98 之后的所有 C++ 版本，从 C++11 直到 C++20。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6kABFo8i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phith0n/conote-community&#34;&gt;CoNote&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款综合安全测试平台，可以让渗透测试过程变得更加方便，支持命令执行漏洞利用、SSRF 漏洞探测、SQL 注入、DNS 记录等功能，还可以向内网或无 HTTP 服务的平台传输数据与文件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6jpy96x1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kerwincui/wumei-smart&#34;&gt;物美智能&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套开源的软硬件智能家居系统，可用于二次开发和学习，快速搭建自己的智能家居系统。硬件工程师可以把自己的设备集成到系统；软件工程师可以使用项目中的设备熟悉软硬件交互。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6ieuuRkm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pmgl/microstudio&#34;&gt;microStudio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个非常实用的游戏开发平台，集搜索、开发、学习、体验、交流等功能于一身。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L6gF4lKIX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pit-ray/win-vind&#34;&gt;win-vind&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个颇有意思的 Windows UI 开源系统，将图形界面与命令行界面两种操作方式进行混合，让开发者可以用一些 Vim 快捷键来操作桌面程序。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L61JCkEGf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tsherif/space-shooter.c&#34;&gt;space-shooter.c&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 C 语言编写的一款 2D 太空射击游戏，已在 Windows 10 和 Ubuntu Linux 16.04 系统上跑通测试。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5ZnufMFk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jynew/jynew&#34;&gt;《金庸群侠传 3D 重制版》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源的游戏项目：《金庸群侠传 3D 重制版》，喜欢怀旧的同学可以玩一下。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5Svi8JUw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nschloe/matplotx&#34;&gt;matplotx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了多个实用的 Matplotlib 扩展，可以满足多种数据可视化的绘图需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L5RudxPlx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jingma-git/RealSkel&#34;&gt;RealSkel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;浙大一位计算机博士开源的 3D 建模工具，可基于平面草图，快速完成 3D 骨架建模。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4XWj0J7H&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/joeycastillo/The-Open-Book&#34;&gt;The Open Book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;类似于开源版的 Kindle，能帮你打造一个可灵活定制的电子书阅读设备。搭配 4.2&amp;quot; 英寸电子显示器，拥有方向键、选择、翻页等交互按钮，具备 SD 卡检测功能，充电状态 LED 灯显示，带立体音频输出和原始麦克风输入的音频组合插孔等组件。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L4kR8gV4j&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/IceWhaleTech/CasaOS&#34;&gt;CasaOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简洁易用、开源的家庭云系统，基于 Docker 生态系统打造，满足了多种家庭使用场景。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L40P21V79&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mantra-inc/open-mantra-dataset&#34;&gt;open-mantra-dataset&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;东京大学与 Mantra 公司在推进的一项技术研究，尝试使用人工智能来自动翻译日漫文稿。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2ZbG9VX0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zmister2016/MrDoc&#34;&gt;MrDoc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的在线文档系统，适合作为私有云文档、云笔记和知识管理工具，私有化在线文档部署方案。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L2PLcuPVF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hectorm/docker-qemu-win2000&#34;&gt;Windows 2000 on Docker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于运行 Windows 2000 系统的 Docker 镜像&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/L1KAEq1gv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mcdtaiwan/McDonalds_Fries_Font&#34;&gt;McDonalds Fries Font&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由麦当劳一家授权经营企业开源的字体，带有薯条和番茄酱设计风格。支持应用到 Illustrator、Photoshop、Keynote 、Sketch 等软件上。标注字体名称后，可商用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KFA41qCK2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KubeOperator/KubePi&#34;&gt;KubePi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用的开源 Kubernetes 可视化管理面板，可允许管理员导入多个 Kubernetes 集群，并通过权限控制，将不同 cluster、namespace 的权限分配给指定用户。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEFv4mFEB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DouyinFE/semi-design&#34;&gt;Semi-UI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;抖音前端技术团队开源的一个 UI 库，具备现代、全面、灵活的设计系统。可帮助开发者快速搭建简洁、美观的 React 应用。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KEyCPC92v&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nbarkhina/N64Wasm&#34;&gt;N64Wasm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外工程师 Neil 在 GitHub 上开源了任天堂 64 模拟器（N64）。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KDhtvFs5l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nihaojob/markdown-css-smartisan&#34;&gt;markdown-css-smartisan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于锤子便签的 Markdown 主题。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KCZNzw5K4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sogou/workflow&#34;&gt;Sogou C++ Workflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;搜狗在 GitHub 上开源的一款 C++ 服务器引擎，作为一款设计轻盈优雅的企业级程序引擎，可满足大多数 C++ 后端开发需求。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KyoecFH5s&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VickScarlet/lifeRestart&#34;&gt;《人生重开模拟器》&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在这款游戏里面，你可以选择不同的人生天赋与初始属性，程序将根据这些基本信息，为你生成一条完整的人生轨迹。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KwRXfjGc5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/traccar/traccar&#34;&gt;Traccar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个功能颇为丰富的 GPS 定位系统，支持 170 多种 GPS 协议以及 1500 多种 GPS 定位追踪设备。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kw6OL9ig0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/benbusby/whoogle-search&#34;&gt;Whoogle Search&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的元搜索引擎，可为用户提供一个纯净无污染、无广告的 Google 元搜索引擎，注重隐私安全性，支持托管到私有服务器。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kw08KkZWt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/anael-seghezzi/CToy&#34;&gt;C-Toy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该项目为开发者提供了可交互式的 C(99) 语言编程环境，能你让在编码过程中，实时看到比较有趣的结果反馈。无需安装编译，下载即可使用，目前已支持 Windows、macOS、Linux 等主流操作系统。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kvgbktze7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/meilisearch/MeiliSearch&#34;&gt;MeiliSearch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费、功能强大、快速、易于使用和部署的搜索引擎&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KuUYbxYwJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/erda-project/erda&#34;&gt;Erda&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 k8s 企业级云原生平台，主要提供 DevOps、微服务治理、多云管理以及快数据管理等云原生服务。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KrMwXsmhi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kizniche/Mycodo&#34;&gt;Mycodo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可运行在树莓派上的环境监测与调节系统，支持应用到种植植物，培养微生物，保持蜂蜜蜂房稳态，孵化动物和鸡蛋，维持水生系统等场景。监控收集的数据，能放在Web 界面进行可视化展示。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kq4tndHJq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhenghaoz/gorse&#34;&gt;Gorse&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由国人主导开发的一个开源推荐系统。在将项目、用户与交互数据导入后，系统便会自动训练模型，为每个用户生成推荐内容，大幅提升开发效率。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpCbSkMpV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lxgw/LxgwWenKai&#34;&gt;霞鹜文楷（LXGW WenKai）&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源中文字体，基于日本著名字体厂商 FONTWORKS 开源的 Klee 完善而成，共包含 1.3 万个简繁日汉字，个人用户或企业可免费使用，自由分享。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/KpsLo5mN8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/h4pZ/rose-pine-matplotlib&#34;&gt;rose-pine-matplotlib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款主打「优雅极简主义风」的 Matplotlib 主题样式。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Kim4l37Id&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apache/superset&#34;&gt;Superset&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;数据可视化及数据探索平台，提供了多种可视化模板及交互式仪表，用于更为清晰的展示数据；自带 SQL IDE，可让用户更好的操作数据；API 开放且灵活，可定制性高。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JFe5WqTXM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>用 Go struct 不能犯的一个低级错误！</title>
      <link>https://note.lican.site/posts/posts/go/go-empty-struct/</link>
      <pubDate>Thu, 17 Jun 2021 12:44:27 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-empty-struct/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前段时间我分享了 《手撕 Go 面试官：Go 结构体是否可以比较，为什么？》的文章，把基本 Go struct 的比较依据研究了一番。这不，最近有一位读者，遇到了一个关于 struct 的新问题，不得解。&lt;/p&gt;&#xA;&lt;p&gt;大家一起来看看，建议大家在看到代码例子后先思考一下答案，再往下看。&lt;/p&gt;&#xA;&lt;p&gt;独立思考很重要。&lt;/p&gt;&#xA;&lt;h2 id=&#34;疑惑的例子&#34;&gt;疑惑的例子&lt;/h2&gt;&#xA;&lt;p&gt;其给出的例子一如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;People&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;People&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;People&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你认为输出结果是什么呢？&lt;/p&gt;&#xA;&lt;p&gt;输出结果是：false。&lt;/p&gt;&#xA;&lt;p&gt;再稍加改造一下，例子二如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;People&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;People&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;People&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%p\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%p\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果是：true。&lt;/p&gt;&#xA;&lt;p&gt;他的问题是 &amp;ldquo;&lt;strong&gt;为什么第一个返回 false 第二个返回 true，是什么原因导致的&lt;/strong&gt;？&lt;/p&gt;&#xA;&lt;p&gt;煎鱼进一步的精简这个例子，得到最小示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; new(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; new(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;println(&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; new(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; new(&lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;println(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;// a, b; a &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0xc00005cf57 0xc00005cf57 false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;// c, d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;amp;&lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &amp;amp;&lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;// c, d, c &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;0x118c370 0x118c370 true&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;第一段代码的结果是 false，第二段的结果是 true，且可以看到内存地址指向的完全一样，也就是排除了输出后变量内存指向改变导致的原因。&lt;/p&gt;</description>
    </item>
    <item>
      <title>详解 Go 程序的启动流程，你知道 g0，m0 是什么吗？</title>
      <link>https://note.lican.site/posts/posts/go/go-bootstrap0/</link>
      <pubDate>Thu, 17 Jun 2021 12:42:42 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-bootstrap0/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;自古应用程序均从 Hello World 开始，你我所写的 Go 语言亦然：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import &amp;#34;fmt&amp;#34;&#xA;&#xA;func main() {&#xA;&#x9;fmt.Println(&amp;#34;hello world.&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这段程序的输出结果为 &lt;code&gt;hello world.&lt;/code&gt;，就是这么的简单又直接。但这时候又不禁思考了起来，这个 &lt;code&gt;hello world.&lt;/code&gt; 是怎么输出来，经历了什么过程。&lt;/p&gt;&#xA;&lt;p&gt;真是非常的好奇，今天我们就一起来探一探 Go 程序的启动流程。&#xA;其中涉及到 Go Runtime 的调度器启动，g0，m0 又是什么？&lt;/p&gt;&#xA;&lt;p&gt;车门焊死，正式开始吸鱼之路。&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-引导阶段&#34;&gt;Go 引导阶段&lt;/h2&gt;&#xA;&lt;h3 id=&#34;查找入口&#34;&gt;查找入口&lt;/h3&gt;&#xA;&lt;p&gt;首先编译上文提到的示例程序：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ GOFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-ldflags=-compressdwarf=false&amp;#34;&lt;/span&gt; go build &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在命令中指定了 GOFLAGS 参数，这是因为在 Go1.11 起，为了减少二进制文件大小，调试信息会被压缩。导致在 MacOS 上使用 gdb 时无法理解压缩的 DWARF 的含义是什么（而我恰恰就是用的 MacOS）。&lt;/p&gt;&#xA;&lt;p&gt;因此需要在本次调试中将其关闭，再使用 gdb 进行调试，以此达到观察的目的：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gdb awesomeProject &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;gdb&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; info files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Symbols from &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/Users/eddycjy/go-application/awesomeProject/awesomeProject&amp;#34;&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Local exec file:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/Users/eddycjy/go-application/awesomeProject/awesomeProject&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;, file type mach-o-x86-64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;Entry point: 0x1063c80&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;0x0000000001001000 - 0x00000000010a6aca is .text&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;gdb&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; b *0x1063c80&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Breakpoint &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; at 0x1063c80: file /usr/local/Cellar/go/1.15/libexec/src/runtime/rt0_darwin_amd64.s, line 8.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过 Entry point 的调试，可看到真正的程序入口在 runtime 包中，不同的计算机架构指向不同。例如：&lt;/p&gt;</description>
    </item>
    <item>
      <title>跟面试官聊 Goroutine 泄露的 6 种方法，真刺激！</title>
      <link>https://note.lican.site/posts/posts/go/goroutine-leak/</link>
      <pubDate>Fri, 11 Jun 2021 12:54:49 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/goroutine-leak/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天分享 Go 群友提问的文章时，有读者在朋友圈下提到，希望我能够针对 Goroutine 泄露这块进行讲解，他在面试的时候经常被问到。&lt;/p&gt;&#xA;&lt;p&gt;今天的男主角，就是 Go 语言的著名品牌标识 Goroutine，一个随随便便就能开几十万个快车进车道的大杀器。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;本文会聚焦于 Goroutine 泄露的 N 种方法，进行详解和说明。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要问&#34;&gt;为什么要问&lt;/h2&gt;&#xA;&lt;p&gt;面试官为啥会问 Goroutine（协程）泄露这种奇特的问题呢？&lt;/p&gt;&#xA;&lt;p&gt;可以猜测是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Goroutine 实在是使用门槛实在是太低了，随手就一个就能起，出现了不少滥用的情况。例如：并发 map。&lt;/li&gt;&#xA;&lt;li&gt;Goroutine 本身在 Go 语言的标准库、复合类型、底层源码中应用广泛。例如：HTTP Server 对每一个请求的处理就是一个协程去运行。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;很多 Go 工程在线上出事故时，基本 Goroutine 的关联，大家都会作为救火队长，风风火火的跑去看指标、看日志，通过 PProf 采集 Goroutine 运行情况等。&lt;/p&gt;&#xA;&lt;p&gt;自然他也就是最受瞩目的那颗 “星” 了，所以在日常面试中，被问几率也就极高了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;goroutine-泄露&#34;&gt;Goroutine 泄露&lt;/h2&gt;&#xA;&lt;p&gt;了解清楚大家爱问的原因后，我们开始对 Goroutine 泄露的 N 种方法进行研究，希望通过前人留下的 “坑”，了解其原理和避开这些问题。&lt;/p&gt;&#xA;&lt;p&gt;泄露的原因大多集中在：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Goroutine 内正在进行 channel/mutex 等读写操作，但由于逻辑问题，某些情况下会被一直阻塞。&lt;/li&gt;&#xA;&lt;li&gt;Goroutine 内的业务逻辑进入死循环，资源一直无法释放。&lt;/li&gt;&#xA;&lt;li&gt;Goroutine 内的业务逻辑进入长时间等待，有不断新增的 Goroutine 进入等待。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;接下来我会引用在网上冲浪收集到的一些 Goroutine 泄露例子（会在文末参考注明出处）。&lt;/p&gt;&#xA;&lt;h3 id=&#34;channel-使用不当&#34;&gt;channel 使用不当&lt;/h3&gt;&#xA;&lt;p&gt;Goroutine+Channel 是最经典的组合，因此不少泄露都出现于此。&lt;/p&gt;</description>
    </item>
    <item>
      <title>你知道 Go 结构体和结构体指针调用有什么区别吗？</title>
      <link>https://note.lican.site/posts/posts/go/struct-pointer/</link>
      <pubDate>Sun, 06 Jun 2021 12:21:30 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/struct-pointer/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在分享《Go 结构体是否可以比较，为什么？》时，有小伙伴提出了新的问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/a4d34c5312339b9909e482c18f0cdf4a.png&#34; alt=&#34;来自文章评论区&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;虽然大家提问题的速度已经超出了本鱼写文章的速度&amp;hellip;不过作为宠粉狂鱼，在此刻清明假期时还是写下了这篇文章。&lt;/p&gt;&#xA;&lt;p&gt;我在网上冲浪时搜索了相关问题，发现 6 年前就有 Go 开发者有一模一样的疑问，真是困扰了一代又一代的小伙伴。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/dbe910917c86e103648e314f79896a81.png&#34; alt=&#34;来自 stackoverflow.com&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;本期的男主角是《&lt;strong&gt;Go 结构体和结构体指针调用有什么区别&lt;/strong&gt;》，希望对大家有所帮助，带来一些思考。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;请在此处默念自己心目中的答案&lt;/strong&gt;，再和煎鱼一同研讨一波 Go 的技术哲学。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结构体是什么&#34;&gt;结构体是什么&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 语言中有个基本类型，开发者们称之为结构体（struct）。是 Go 语言中非常常用的，基本定义：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;struct_variable_type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;definition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;definition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;definition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;简单示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Vertex&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Name1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Name2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Vertex&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进了&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name2&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;蒸鱼&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;蒸鱼&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这部分属于基础知识，因此不再过多解释。如果看不懂，建议重学 Go 语言语法基础。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结构体和指针调用&#34;&gt;结构体和指针调用&lt;/h2&gt;&#xA;&lt;p&gt;讲解前置概要后，直接进入本文主题。如下例子：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyStruct&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MyStruct&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;SetName1&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;MyStruct&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;SetName2&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该程序声明了一个 &lt;code&gt;User&lt;/code&gt; 结构体，其包含两个结构体方法，分别是 &lt;code&gt;SetName1&lt;/code&gt; 和 &lt;code&gt;SetName2&lt;/code&gt; 方法，两者之间的差异就是&lt;strong&gt;引用的方式不同&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 面试官：单核 CPU，开两个 Goroutine，其中一个死循环，会怎么样？</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-goroutineloop/</link>
      <pubDate>Mon, 05 Apr 2021 16:17:23 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-goroutineloop/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近金三银四，是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。&lt;/p&gt;&#xA;&lt;p&gt;今天的男主角，是与 Go 工程师有调度相关的知识，那就是 “&lt;strong&gt;单核 CPU，开两个 Goroutine，其中一个死循环，会怎么样？&lt;/strong&gt;”&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;请在此处默念自己心目中的答案&lt;/strong&gt;，再往和煎鱼一起研讨一波 Go 的技术哲学。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题定义&#34;&gt;问题定义&lt;/h2&gt;&#xA;&lt;p&gt;针对这个问题，我们需要把问题剖开来看看，其具有以下几个元素：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;运行 Go 程序的计算机只有一个单核 CPU。&lt;/li&gt;&#xA;&lt;li&gt;两个 Goroutine 在运行。&lt;/li&gt;&#xA;&lt;li&gt;一个 Goroutine 死循环。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;根据这道题的题意，可大致理解其想要问的是 Go 调度相关的一些知识理解。&lt;/p&gt;&#xA;&lt;h3 id=&#34;单核-cpu&#34;&gt;单核 CPU&lt;/h3&gt;&#xA;&lt;p&gt;第一个要点，就是要明确 “计算机只有一个单核 CPU” 这一个变量定义，对 Go 程序会产生什么影响，否则很难继续展开。&lt;/p&gt;&#xA;&lt;p&gt;既然明确涉及 Goroutine，这里就会考察到你对 Go 的调度模型 GMP 的基本理解了。&lt;/p&gt;&#xA;&lt;p&gt;从单核 CPU 来看，最大的影响就是 GMP 模型中的 P，因为 P 的数量默认是与 CPU 核数（GOMAXPROCS）保持一致的。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;G：Goroutine，实际上我们每次调用 &lt;code&gt;go func&lt;/code&gt; 就是生成了一个 G。&lt;/li&gt;&#xA;&lt;li&gt;P：Processor，处理器，一般 P 的数量就是处理器的核数，可以通过 &lt;code&gt;GOMAXPROCS&lt;/code&gt; 进行修改。&lt;/li&gt;&#xA;&lt;li&gt;M：Machine，系统线程。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这三者交互实际来源于 Go 的 M: N 调度模型。也就是 M 必须与 P 进行绑定，然后不断地在 M 上循环寻找可运行的 G 来执行相应的任务。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 内存泄露之痛，这篇把 Go timer.After 问题根因讲透了！</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-timer-memory/</link>
      <pubDate>Mon, 05 Apr 2021 16:16:47 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-timer-memory/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在公众号分享了一篇 Go timer 源码解析的文章《难以驾驭的 Go timer，一文带你参透计时器的奥秘》。&lt;/p&gt;&#xA;&lt;p&gt;在评论区有小伙伴提到了经典的 &lt;code&gt;timer.After&lt;/code&gt; 泄露问题，希望我能聊聊，这是一个不能不知的一个大 “坑”。&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章煎鱼就带大家来研讨一下这个问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;timerafter&#34;&gt;timer.After&lt;/h2&gt;&#xA;&lt;p&gt;今天是男主角是Go 标准库 time 所提供的 &lt;code&gt;After&lt;/code&gt; 方法。函数签名如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;After&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Duration&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Time&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;该方法可以在一定时间（根据所传入的 Duration）后主动返回 &lt;code&gt;time.Time&lt;/code&gt; 类型的 channel 消息。&lt;/p&gt;&#xA;&lt;p&gt;在常见的场景下，我们会基于此方法做一些计时器相关的功能开发，例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;After&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼出去了，超时了！！！&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在运行 1 秒钟后，输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;煎鱼出去了，超时了！！！&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上述程序在在运行 1 秒钟后将触发 &lt;code&gt;time.After&lt;/code&gt; 方法的定时消息返回，输出了超时的结果。&lt;/p&gt;&#xA;&lt;h2 id=&#34;坑在哪里&#34;&gt;坑在哪里&lt;/h2&gt;&#xA;&lt;p&gt;从例子来看似乎非常正常，也没什么 “坑” 的样子。难道是 &lt;code&gt;timer.After&lt;/code&gt; 方法的虚晃一枪？&lt;/p&gt;&#xA;&lt;p&gt;我们再看一个不像是有问题例子，这在 Go 工程中经常能看见，只是大家都没怎么关注。&lt;/p&gt;&#xA;&lt;p&gt;代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;select&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#75715e&#34;&gt;// do something...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;After&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Minute&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;现在是：%d，我脑子进煎鱼了！&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Now&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;Unix&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上述代码中，我们构造了一个 &lt;code&gt;for+select+channel&lt;/code&gt; 的一个经典的处理模式。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 面试官：Go 结构体是否可以比较，为什么？</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-sturct/</link>
      <pubDate>Mon, 05 Apr 2021 16:16:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-sturct/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近金三银四，是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。&lt;/p&gt;&#xA;&lt;p&gt;今天的男主角，是 Go 工程师的必修技能，也是极容易踩坑的地方，就是 “&lt;strong&gt;Go 面试题：Go 结构体（struct）是否可以比较？&lt;/strong&gt;”&lt;/p&gt;&#xA;&lt;p&gt;如果可以比较，是为什么？如果不可以比较，又是为什么？&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;请在此处默念自己心目中的答案&lt;/strong&gt;，再往和煎鱼一起研讨一波 Go 的技术哲学。&lt;/p&gt;&#xA;&lt;h2 id=&#34;结构体是什么&#34;&gt;结构体是什么&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 语言中有个基本类型，开发者们称之为结构体（struct）。是 Go 语言中非常常用的，基本定义：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;struct_variable_type&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;definition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;definition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;member&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;definition&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;简单示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Vertex&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Name1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Name2&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Vertex&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进了&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name2&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;蒸鱼&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Name2&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;蒸鱼&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这部分属于基础知识，因此不再过多解释。如果看不懂，建议重学 Go 语言语法基础。&lt;/p&gt;&#xA;&lt;h2 id=&#34;比较两下&#34;&gt;比较两下&lt;/h2&gt;&#xA;&lt;h3 id=&#34;例子一&#34;&gt;例子一&lt;/h3&gt;&#xA;&lt;p&gt;接下来正式开始研讨 Go 结构体比较的问题，第一个例子如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Value&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Gender&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Value&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Gender&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;男&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Value&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Gender&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;男&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v2&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子进煎鱼了&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;脑子没进煎鱼&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们声明了两个变量，分别是 v1 和 v2。其都是 &lt;code&gt;Value&lt;/code&gt; 结构体的实例化，是同一个结构体的两个实例。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 面试官：GMP 模型，为什么要有 P？</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-gmp-p/</link>
      <pubDate>Mon, 05 Apr 2021 16:15:20 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-gmp-p/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近金三银四，是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。&lt;/p&gt;&#xA;&lt;p&gt;今天的主角，是 Go 面试的万能题 GMP 模型的延伸题（疑问），那就是 ”&lt;strong&gt;GMP 模型，为什么要有 P&lt;/strong&gt;？“&lt;/p&gt;&#xA;&lt;p&gt;进一步推敲问题的背后，其实这个面试题本质是想问：”&lt;strong&gt;GMP 模型，为什么不是 G 和 M 直接绑定就完了，还要搞多一个 P 出来，那么麻烦，为的是什么，是要解决什么问题吗&lt;/strong&gt;？“&lt;/p&gt;&#xA;&lt;p&gt;这篇文章煎鱼就带你一同探索，GM、GMP 模型的变迁是因为什么原因。&lt;/p&gt;&#xA;&lt;h2 id=&#34;gm-模型&#34;&gt;GM 模型&lt;/h2&gt;&#xA;&lt;p&gt;在 Go1.1 之前 Go 的调度模型其实就是 GM 模型，也就是没有 P。&lt;/p&gt;&#xA;&lt;p&gt;今天带大家一起回顾过去的设计。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解密-go10-源码&#34;&gt;解密 Go1.0 源码&lt;/h3&gt;&#xA;&lt;p&gt;我们了解一个东西的办法之一就是看源码，和煎鱼一起看看 Go1.0.1 的&lt;a href=&#34;https://github.com/golang/go/blob/go1.0.1/src/pkg/runtime/proc.c&#34;&gt;调度器源码&lt;/a&gt;的核心关键步骤：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;schedule&lt;/span&gt;(G &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;gp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;schedlock&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(gp &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; nil) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt;(gp&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;status){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Grunnable:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Gdead:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// Shouldn&amp;#39;t have been running!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;runtime&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;·&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;throw&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bad gp-&amp;gt;status in sched&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; Grunning:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;gp&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;status &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Grunnable;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;gput&lt;/span&gt;(gp);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;gp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nextgandunlock&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;gp&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;readyonstop &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;gp&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;status &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Grunning;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;m&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;curg &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; gp;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;gp&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;m &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; m;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;runtime&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;·&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gogo&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;gp&lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt;sched, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;schedlock&lt;/code&gt; 方法来获取全局锁。&lt;/li&gt;&#xA;&lt;li&gt;获取全局锁成功后，将当前 Goroutine 状态从 Running（正在被调度） 状态修改为 Runnable（可以被调度）状态。&lt;/li&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;gput&lt;/code&gt; 方法来保存当前 Goroutine 的运行状态等信息，以便于后续的使用；&lt;/li&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;nextgandunlock&lt;/code&gt; 方法来寻找下一个可运行 Goroutine，并且释放全局锁给其他调度使用。&lt;/li&gt;&#xA;&lt;li&gt;获取到下一个待运行的 Goroutine 后，将其的运行状态修改为 Running。&lt;/li&gt;&#xA;&lt;li&gt;调用 &lt;code&gt;runtime·gogo&lt;/code&gt; 方法，将刚刚所获取到的下一个待执行的 Goroutine 运行起来。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;思考-gm-模型&#34;&gt;思考 GM 模型&lt;/h3&gt;&#xA;&lt;p&gt;通过对 Go1.0.1 的调度器源码剖析，我们可以发现一个比较有趣的点。那就是调度器本身（schedule 方法），在正常流程下，是不会返回的，也就是不会结束主流程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 群友提问：进程、线程都有 ID，为什么 Goroutine 没有 ID？</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-goroutineid/</link>
      <pubDate>Mon, 05 Apr 2021 16:14:14 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-goroutineid/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近金三银四，是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。&lt;/p&gt;&#xA;&lt;p&gt;今天的主角，是大家在既有语言基础的情况下，学 Goroutine 时会容易纠结的一点。就是 “&lt;strong&gt;进程、线程都有 ID，为什么 Goroutine 没有 GoroutineID？&lt;/strong&gt;”。&lt;/p&gt;&#xA;&lt;p&gt;这是为什么呢，怎么做那些跨协程处理呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;goroutineid-是什么&#34;&gt;GoroutineID 是什么&lt;/h2&gt;&#xA;&lt;p&gt;我们要知道，为什么大家会下意识的想去要 GoroutineID，下面引用 Go 语言圣经中的表述：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;在大多数支持多线程的操作系统和程序语言中，当前的线程都有一个独特的身份（ID），并且这个身份信息可以以一个普通值的形式被很容易地获取到，典型的可以是一个 integer 或者指针值。这种情况下我们做一个抽象化的 thread-local storage（线程本地存储，多线程编程中不希望其它线程访问的内容）就很容易，只需要以线程的 ID 作为 key 的一个 map 就可以解决问题，每一个线程以其 ID 就能从中获取到值，且和其它线程互不冲突。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;也就在常规的进程、线程中都有其 ID 的概念，我们可以在程序中通过 ID 来获取其他进程、线程中的数据，甚至是传输数据。就像一把钥匙一样，有了他干啥都可以。&lt;/p&gt;&#xA;&lt;p&gt;GoroutineID 的概念也是类似的，也就是协程的 ID。我们下意识的就期望通过协程 ID 来进行跨协程的操作。&lt;/p&gt;&#xA;&lt;p&gt;但，在 Go 语言中 GoroutineID 并没有显式获取的办法，这就要打个大大的疑惑了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么没有-goroutineid&#34;&gt;为什么没有 GoroutineID&lt;/h2&gt;&#xA;&lt;p&gt;为什么在 Go 语言中没有 GoroutineID 呢，是从一开始就没有的，还是，这样子设计的原因是什么呢？&lt;/p&gt;&#xA;&lt;p&gt;其实 Go 语言在以前是有暴露方法去获取 GoroutineID 的，但在 Go1.4 后就把该方法给隐藏起来了，不建议大家使用。&lt;/p&gt;&#xA;&lt;p&gt;也就是明面上没有 GoroutineID，是一个有意而为之的行为。原因是：&lt;strong&gt;根据以往的经验，认为 thread-local storage 存在被滥用的可能性，且带来许多不必要的复杂度&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，Andrew Gerrand 的回答是 ”&lt;strong&gt;thread-local storage 的成本远远超过了它们的收益。它们只是不适合 Go 语言&lt;/strong&gt;。”&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 面试官：Go interface 的一个 “坑” 及原理分析</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-interface/</link>
      <pubDate>Mon, 05 Apr 2021 16:12:59 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-interface/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在读者交流群里看到一位小伙伴，针对 interface 的使用有了比较大的疑惑。&lt;/p&gt;&#xA;&lt;p&gt;无独有偶，我也在网上看到有小伙伴在 Go 面试的时候被问到了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/36d7ecb0da9e4b32a493dedce6ebc691~tplv-k3u1fbpfcp-watermark.image&#34; alt=&#34;来自网上博客的截图&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天特意分享出来让大家避开这个坑。&lt;/p&gt;&#xA;&lt;h2 id=&#34;例子一&#34;&gt;例子一&lt;/h2&gt;&#xA;&lt;p&gt;第一个例子，如下代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; = (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;)(&lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你觉得输出结果是什么呢？&lt;/p&gt;&#xA;&lt;p&gt;答案是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;为什么不是 &lt;code&gt;true&lt;/code&gt;。明明都已经强行置为 &lt;code&gt;nil&lt;/code&gt; 了。是不是 Go 编译器有问题？&lt;/p&gt;&#xA;&lt;h2 id=&#34;例子二&#34;&gt;例子二&lt;/h2&gt;&#xA;&lt;p&gt;第二个例子，如下代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-golang&#34; data-lang=&#34;golang&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;in&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;你觉得输出结果是什么呢？&lt;/p&gt;&#xA;&lt;p&gt;答案是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;nil&amp;gt; true&#xA;&amp;lt;nil&amp;gt; true&#xA;&amp;lt;nil&amp;gt; false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这可就更奇怪了，为什么刚刚声明出来的 &lt;code&gt;data&lt;/code&gt; 和 &lt;code&gt;in&lt;/code&gt; 变量，确实是输出结果是 &lt;code&gt;nil&lt;/code&gt;，判断结果也是 &lt;code&gt;true&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;怎么把变量 &lt;code&gt;data&lt;/code&gt; 一赋予给变量 &lt;code&gt;in&lt;/code&gt;，世界就变了？输出结果依然是 &lt;code&gt;nil&lt;/code&gt;，但判定却变成了 &lt;code&gt;false&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;和上面的第一个例子结果类似，真是神奇。&lt;/p&gt;&#xA;&lt;h2 id=&#34;原因&#34;&gt;原因&lt;/h2&gt;&#xA;&lt;p&gt;interface 判断与想象中不一样的根本原因是，interface 并不是一个指针类型，虽然他看起来很像，以至于误导了不少人。&lt;/p&gt;&#xA;&lt;p&gt;我们钻下去 interface，interface 共有两类数据结构：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/560dcab5-e436-4a2c-bfee-6eba6faee1d2.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=HF1wka8F9MTc%252FVCTrMjhASpeeE4%253D&amp;amp;Expires=1615900476&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 群友提问：学习 defer 时很懵逼，这道不会做！</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-defer/</link>
      <pubDate>Mon, 05 Apr 2021 16:10:51 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-defer/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在读者交流群里看到一位小伙伴，在向大家咨询 Go 相关的技术问题。&#xA;疑问是：“&lt;strong&gt;各位大佬，我在学习 defer 遇到闭包的时候很懵逼，谁比较明白，能指点？&lt;/strong&gt;”&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/36e2b86b536909f265b84db24dcd80c6.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;疑问&#34;&gt;疑问&lt;/h2&gt;&#xA;&lt;p&gt;他的疑问是下面这道 Go 语言的 defer 题目，大家一起看看：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;&#x9;var whatever [6]struct{}&#xA;&#x9;for i := range whatever {&#xA;&#x9;&#x9;defer func() {&#xA;&#x9;&#x9;&#x9;fmt.Println(i)&#xA;&#x9;&#x9;}()&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;请自己先想一下输出的结果答案是什么。&lt;/p&gt;&#xA;&lt;p&gt;这位小伙伴按自己的理解后，认为应当输出 xx。但最终的输出结果，可能与其思考的有所偏差，一时想不通。&lt;/p&gt;&#xA;&lt;h3 id=&#34;解惑&#34;&gt;解惑&lt;/h3&gt;&#xA;&lt;p&gt;这段程序的输出结果是：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;5&#xA;5&#xA;5&#xA;5&#xA;5&#xA;5&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;为什么全是 5，为什么不是 0, 1, 2, 3, 4, 5 这样的输出结果呢？&lt;/p&gt;&#xA;&lt;p&gt;其根本原因是&lt;strong&gt;闭包&lt;/strong&gt;所导致的，有两点原因：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在 &lt;code&gt;for&lt;/code&gt; 循环结束后，局部变量 &lt;code&gt;i&lt;/code&gt; 的值已经是 5 了，并且 &lt;code&gt;defer &lt;/code&gt;的闭包是直接引用变量的 i。&lt;/li&gt;&#xA;&lt;li&gt;结合&lt;code&gt;defer&lt;/code&gt; 关键字的特性，可得知会在 &lt;code&gt;main&lt;/code&gt; 方法主体结束后再执行。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;结合上述，最终输出的结果是已经自增完毕的 5。&lt;/p&gt;&#xA;&lt;h3 id=&#34;进一步思考&#34;&gt;进一步思考&lt;/h3&gt;&#xA;&lt;p&gt;既然了解了为什么，我们再变形一下。再看看另外一种情况，代码如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>问个 Go 问题，字符串 len 为 0 和 字符串为空 ，有啥区别？</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-lenstr/</link>
      <pubDate>Mon, 05 Apr 2021 16:09:14 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-lenstr/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在微信群看到几位大佬在讨论一个问题： ”&lt;strong&gt;字符串 len == 0 和 字符串 == &amp;quot;&amp;quot; ，有啥区别&lt;/strong&gt;？“&lt;/p&gt;&#xA;&lt;p&gt;这是一个比较小的细节点，同时也勾起了我的好奇心，因此今天这篇文章就和大家一起研究一下他们两者有没有区别，谁的性能更好一些？&lt;/p&gt;&#xA;&lt;h2 id=&#34;测试方法&#34;&gt;测试方法&lt;/h2&gt;&#xA;&lt;p&gt;在测试的方法中，我们分别声明了 &lt;code&gt;Test1&lt;/code&gt; 和 &lt;code&gt;Test2&lt;/code&gt; 方法：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func Test1() bool {&#xA;&#x9;var v string&#xA;&#x9;if v == &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;return true&#xA;&#x9;}&#xA;&#x9;return false&#xA;}&#xA;&#xA;func Test2() bool {&#xA;&#x9;var v string&#xA;&#x9;if len(v) == 0 {&#xA;&#x9;&#x9;return true&#xA;&#x9;}&#xA;&#x9;return false&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在方法内部仅做了简单的变量类型声明，分别以 字符串 == &amp;quot;&amp;quot; 和 字符串 len == 0 为判断依据。&lt;/p&gt;&#xA;&lt;h2 id=&#34;测试用例&#34;&gt;测试用例&lt;/h2&gt;&#xA;&lt;p&gt;编写两个方法的 Benchmark，用于后续的性能测试：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func BenchmarkTest1(b *testing.B) {&#xA;&#x9;for i := 0; i &amp;lt; b.N; i++ {&#xA;&#x9;&#x9;Test1()&#xA;&#x9;}&#xA;}&#xA;&#xA;func BenchmarkTest2(b *testing.B) {&#xA;&#x9;for i := 0; i &amp;lt; b.N; i++ {&#xA;&#x9;&#x9;Test2()&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;结果分析&#34;&gt;结果分析&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go test --bench=. -benchmem&#xA;goos: darwin&#xA;goarch: amd64&#xA;BenchmarkTest1-4   &#x9;1000000000&#x9;         0.305 ns/op&#x9;       0 B/op&#x9;       0 allocs/op&#xA;BenchmarkTest2-4   &#x9;1000000000&#x9;         0.305 ns/op&#x9;       0 B/op&#x9;       0 allocs/op&#xA;PASS&#xA;ok  &#x9;_/Users/eddycjy/go-application/awesomeProject/tests&#x9;0.688s&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从多次测试的结果来看，两者比较：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 群友提问：Goroutine 数量控制在多少合适，会影响 GC 和调度？</title>
      <link>https://note.lican.site/posts/posts/go/go-tips-goroutinenums/</link>
      <pubDate>Mon, 05 Apr 2021 16:08:18 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-tips-goroutinenums/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天在读者交流群里看到一位小伙伴，发出了一个致命提问，那就是：“&lt;strong&gt;单机的 goroutine 数量控制在多少比较合适？&lt;/strong&gt;”。&lt;/p&gt;&#xA;&lt;p&gt;也许你和群内小伙伴第一反应一样，会答复 “控制多少，我觉得没有定论”。&lt;/p&gt;&#xA;&lt;p&gt;紧接着延伸出了更进一步的疑惑：“&lt;strong&gt;goroutine 太多了会影响 gc 和调度吧，主要是怎么预算这个数是合理的呢？&lt;/strong&gt;”&lt;/p&gt;&#xA;&lt;p&gt;这是本文要进行探讨的主体，因此本文的结构会是先探索基础知识，再一步步揭开，深入理解这个问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;goroutine-是什么&#34;&gt;Goroutine 是什么&lt;/h2&gt;&#xA;&lt;p&gt;Go 语言作为一个新生编程语言，其令人喜爱的特性之一就是 goroutine。Goroutine 是一个由 Go 运行时管理的轻量级线程，一般称其为 “协程”。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go f(x, y, z)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;操作系统本身是无法明确感知到 Goroutine 的存在的，Goroutine 的操作和切换归属于 “用户态” 中。&lt;/p&gt;&#xA;&lt;p&gt;Goroutine 由特定的调度模式来控制，以 “多路复用” 的形式运行在操作系统为 Go 程序分配的几个系统线程上。&lt;/p&gt;&#xA;&lt;p&gt;同时创建 Goroutine 的开销很小，初始只需要 2-4k 的栈空间。Goroutine 本身会根据实际使用情况进行自伸缩，非常轻量。&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func say(s string) {&#xA;&#x9;for i := 0; i &amp;lt; 9999999; i++ {&#xA;&#x9;&#x9;time.Sleep(100 * time.Millisecond)&#xA;&#x9;&#x9;fmt.Println(s)&#xA;&#x9;}&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;go say(&amp;#34;煎鱼&amp;#34;)&#xA;&#x9;say(&amp;#34;你好&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;人称可以开几百几千万个的协程小霸王，是 Go 语言的得意之作之一。&lt;/p&gt;&#xA;&lt;h2 id=&#34;调度是什么&#34;&gt;调度是什么&lt;/h2&gt;&#xA;&lt;p&gt;既然有了用户态的代表 Goroutine，操作系统又看不到他。必然需要有某个东西去管理他，才能更好的运作起来。&lt;/p&gt;</description>
    </item>
    <item>
      <title>令人激动！Go 泛型代码合入 master（附尝鲜方法）</title>
      <link>https://note.lican.site/posts/posts/go/go-typeparams-master/</link>
      <pubDate>Mon, 05 Apr 2021 16:06:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-typeparams-master/</guid>
      <description>&lt;p&gt;大家好，我是慢一拍的后方记者煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;按照先前官方和文章的说法，Go 泛型预计是在 Go1.18 正式释出。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/8971e01e-75f8-47c2-b9d3-f6b0ebd85d0d.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=8eKquOL0aM7GzJXegZUzGkOmLPg%253D&amp;amp;Expires=1614491040&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在 GopherCon 2020 Go Team AMA 时，要在今年底要能有生产环境的试用版上线，这是 rsc 所提出的一个管理目标。&lt;/p&gt;&#xA;&lt;h2 id=&#34;转折点&#34;&gt;转折点&lt;/h2&gt;&#xA;&lt;p&gt;近期出现了一个新的转折点，能够让大家在主干分支（master）上就能享受到泛型的功能。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/3acc09a4-d5a2-49e7-b272-b2fa1571f589.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=zXcEIWPbc%252BUFBDmTyYrRVywwKuI%253D&amp;amp;Expires=1614491656&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;而 master 分支对应了 Go1.17 的版本。因此未来将可以在 Go1.17 使用到泛型，这是一个比较惊喜的事情。&lt;/p&gt;&#xA;&lt;h2 id=&#34;原因&#34;&gt;原因&lt;/h2&gt;&#xA;&lt;p&gt;这件事情为什么会突然发生呢？一切都得从背景说起。原本 Go 泛型是一直在 &lt;a href=&#34;https://github.com/golang/go/tree/dev.typeparams&#34;&gt;dev.typeparams&lt;/a&gt; 分支上进行研讨和开发。&lt;/p&gt;&#xA;&lt;p&gt;由于泛型不是简单的一两个模块的代码变更，而是涉及大量的代码变更。&lt;/p&gt;&#xA;&lt;p&gt;因此需要经常保持与 master 分支的代码同步（近两个月共 20+ 次），会涉及代码冲突/合并的处理，且对于一些冲突的模块他们也不熟悉，所以期望迁移到 master 分支上进行开发。&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何不影响既有功能&#34;&gt;如何不影响既有功能&lt;/h2&gt;&#xA;&lt;p&gt;这类提前放入主版本的操作，在 Go 语言中并不少见。像是现在所见的 &lt;code&gt;GO111MODULE&lt;/code&gt;，早期的 &lt;code&gt;GO15VENDOREXPERIMENT&lt;/code&gt; 都有些这么个味道。都是逐步入场，分阶段使用，等确定成熟、完善后再渐渐去掉。&lt;/p&gt;&#xA;&lt;p&gt;因此本次泛型也采取了这种方法，按照提案，目前使用的是 &lt;code&gt;-G&lt;/code&gt; 标识做为泛型的开关。&lt;/p&gt;&#xA;&lt;p&gt;计划如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;-G=0&lt;/code&gt;：继续使用传统的类型检查器。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-G=1&lt;/code&gt;：使用 type2，但不支持泛型。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-G=2&lt;/code&gt;：使用 type2，支持泛型。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在完成 types2 的错误和现有的错误的开发协调后，计划在 Go 1.17 将 &lt;code&gt;-G=1&lt;/code&gt; 设置为默认值。&lt;/p&gt;&#xA;&lt;p&gt;未来也许可以在 Go 1.18 中放弃对 &lt;code&gt;-G=0&lt;/code&gt; 的支持，这样后续在默认启用 &lt;code&gt;-G=2&lt;/code&gt; 上会变得更容易。&lt;/p&gt;</description>
    </item>
    <item>
      <title>意见征集：Go1 要不要移除 GOPATH？</title>
      <link>https://note.lican.site/posts/posts/go/go-why-path/</link>
      <pubDate>Mon, 05 Apr 2021 16:02:34 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-why-path/</guid>
      <description>&lt;p&gt;大家好，我是在打自己脸的后方记者煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天我发表了文章《意见征集：Go1 要不要移除 GOPATH？》。&#xA;本次投票共有 592 人参与了投票。&#xA;结果如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static01.imgkr.com/temp/d10e1354bc9d43c68439fb71d8935270.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;绝大部分人支持移除 GOPATH，但建议保留的人依然占相当一部分。&lt;/p&gt;&#xA;&lt;h2 id=&#34;最新进展&#34;&gt;最新进展&lt;/h2&gt;&#xA;&lt;p&gt;在近几天，在 go issues 上有人提出了新的提案：《proposal: cmd/go: maintain &amp;lsquo;classic&amp;rsquo; vendor behaviour》。&lt;/p&gt;&#xA;&lt;p&gt;该提案正式向 Go 官方提出了我们上一篇文章有提到的两点：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go 历史项目的维护问题。&lt;/li&gt;&#xA;&lt;li&gt;Go1 兼容性保证的许诺。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;摘选一部分核心观点给大家看看。&lt;/p&gt;&#xA;&lt;h2 id=&#34;新的提案&#34;&gt;新的提案&lt;/h2&gt;&#xA;&lt;p&gt;从 Go1.17 开始，Go1.17 就将 GOPATH 从编译器工具链中移除 &lt;code&gt;GO111MODULE&lt;/code&gt; 标识。&lt;/p&gt;&#xA;&lt;p&gt;其依据如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://static01.imgkr.com/temp/bf314e0979b7481681c6293ee60715c3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;重点在于执行 &lt;code&gt;-mod=vendor&lt;/code&gt; 命令时，其会忽略主模块根目录以外位置的软件目录，&lt;strong&gt;这意味着在 go mod 之前设计和编写的应用程序不能再编译（指的历史项目问题）&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;提案本身并不是要求要保持 GOPATH 代码解析 1:1 的说法，而是希望能够允许项目代码通过其他的方式在移除 GOPATH 后也能正常运行，有其他方式能够导入（不需要转成 Go mod）。&lt;/p&gt;&#xA;&lt;p&gt;另外最后提到删除 GOPATH 这样的代码解析能力，&lt;strong&gt;与下面这段摘自 go1compat 文档的精神不一致&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It is intended that programs written to the Go 1 specification will continue to compile and run correctly, unchanged, over the lifetime of that specification. At some indefinite point, a Go 2 specification may arise, but until that time, Go programs that work today should continue to work even as future &amp;ldquo;point&amp;rdquo; releases of Go 1 arise (Go 1.1, Go 1.2, etc.).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.16 新特性：Go mod 的后悔药，仅需这一招</title>
      <link>https://note.lican.site/posts/posts/go/go1.16-mod/</link>
      <pubDate>Mon, 05 Apr 2021 16:00:13 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go1.16-mod/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;前几天 Go 官方正式发布了 1.16 版本。&lt;strong&gt;从这个版本起，环境变量 GO111MODULE 的默认值正式修改为 on&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/64ac411e-6361-4b23-b437-78123e16ae5a.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=NWVlX2CGAsMjMs%252BJH54ZKW1s1fM%253D&amp;amp;Expires=1613623986&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这也意味着 Go modules 将更进一步推进其业务覆盖面，有新老项目共存的小伙伴建议手动将 GO111MODULE 调整为 auto。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Go1.16 针对 Go modules 放出了一个新特性，能够让维护 Go mod 库的开发者拥有反复吃 “后悔药” 的权力，提醒开发者已发布的 “脏” 版本存在问题&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;这个新特性，对于许多维护和使用公共库（开源、企业等）的小伙伴简直是一个小福音，建议大家都应该要了解这个知识点。&lt;/p&gt;&#xA;&lt;p&gt;在接下来文章中将进行详细说明和介绍。&lt;/p&gt;&#xA;&lt;h2 id=&#34;后悔药go-mod-retract&#34;&gt;后悔药：Go mod retract&lt;/h2&gt;&#xA;&lt;p&gt;Go1.16 起可以在 go.mod 文件中使用 &lt;code&gt;retract&lt;/code&gt; 指令来声明该第三方模块的某些发行版本不能被其他模块使用。&lt;/p&gt;&#xA;&lt;p&gt;在使用场景上：在发现严重问题或无意发布某些版本后，模块的维护作者可以撤回该版本，支持撤回单个或多个版本。&lt;/p&gt;&#xA;&lt;p&gt;以前没有办法解决，因此一旦出现就非常麻烦。对应两者的操作如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;维护者：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;删除有问题版本的 tag。&lt;/li&gt;&#xA;&lt;li&gt;重新打一个新版本的 tag。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;使用者：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;发现有问题的版本 tag 丢失，需手动介入。&lt;/li&gt;&#xA;&lt;li&gt;不知道有问题，由于其他库依赖，因此被动升级而踩坑。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;因此在本次 Go1.16 发布后，就拥有了一个&lt;strong&gt;半止损&lt;/strong&gt;的新手段了，也可以作为 Go mod 自动更新的大坑的补全办法之一。&lt;/p&gt;&#xA;&lt;h2 id=&#34;实战演练&#34;&gt;实战演练&lt;/h2&gt;&#xA;&lt;p&gt;为了方便演示，首先创建一个 Demo 项目（github.com/eddycjy/go-retract-demo），其含有一个基础方法：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package go_retract_demo&#xA;&#xA;func HelloWorld() string {&#xA;&#x9;return &amp;#34;001：脑子进煎鱼了！&amp;#34;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;另外有一个应用工程依赖了该第三方库，代码如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.16 新特性：详解内存管理机制的变更，你需要了解</title>
      <link>https://note.lican.site/posts/posts/go/go1.16-3/</link>
      <pubDate>Thu, 11 Feb 2021 16:13:20 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go1.16-3/</guid>
      <description>&lt;p&gt;大家好，我是正在学习如何蒸鱼的煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在前面 Go1.16 特性介绍的文章中我们有提到，从 v1.16 起，Go 在 Linux 下的默认内存管理策略会从&lt;code&gt;MADV_FREE&lt;/code&gt; 改回 &lt;code&gt;MADV_DONTNEED&lt;/code&gt; 策略。&lt;/p&gt;&#xA;&lt;p&gt;这时候可能至少分两拨小伙伴，分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;知道是什么，被这个问题 “折磨“ 过的，瞬间眼前一亮。&lt;/li&gt;&#xA;&lt;li&gt;不知道是什么，出现了各种疑惑了，这说的都是些什么。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;灵魂拷问&#34;&gt;灵魂拷问&lt;/h2&gt;&#xA;&lt;p&gt;你有没有以下的疑问，或者是否清楚：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;文中所说的 &lt;code&gt;MADV_FREE&lt;/code&gt; 是什么？&lt;/li&gt;&#xA;&lt;li&gt;文中所说的 &lt;code&gt;MADV_DONTNEED&lt;/code&gt; 是什么？&lt;/li&gt;&#xA;&lt;li&gt;为什么特指 Go 语言的 Linux 环境？&lt;/li&gt;&#xA;&lt;li&gt;为什么是说从 &lt;code&gt;MADV_FREE&lt;/code&gt;改回 &lt;code&gt;MADV_DONTNEED&lt;/code&gt;？&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在今天这篇文章中我们都将进一步的展开和说明，让我们一同来了解这个改来改去的内存机制到底是何物。&lt;/p&gt;&#xA;&lt;h2 id=&#34;madvise-爱与恨&#34;&gt;madvise 爱与恨&lt;/h2&gt;&#xA;&lt;p&gt;在 Linux 系统中，在 Go Runtime 中通过系统调用 &lt;code&gt;madvise(addr, length, advise)&lt;/code&gt; 方法，能够告诉内核如何处理从 addr 开始的 length 字节。&lt;/p&gt;&#xA;&lt;p&gt;重点之一就是 ”如何处理“，在 Linux 下 Go 语言中目前支持两种策略，分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MADV_FREE：内核会在进程的页表中将这些页标记为“未分配”，从而进程的 RSS 就会变小。OS 后续可以将对应的物理页分配给其他进程。&lt;/li&gt;&#xA;&lt;li&gt;MADV_DONTNEED：内核只会在页表中将这些进程页面标记为可回收，在需要的时候才回收这些页面。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;所带来的影响&#34;&gt;所带来的影响&lt;/h2&gt;&#xA;&lt;p&gt;Go 语言官方恰好就在 2019 年的 Go1.12 做了如下调整。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go1.12 以前。&lt;/li&gt;&#xA;&lt;li&gt;Go.12-Go1.15.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;go112-以前&#34;&gt;Go1.12 以前&lt;/h3&gt;&#xA;&lt;p&gt;Go Runtime 在 Linux 上默认使用的是 &lt;code&gt;MADV_DONTNEED&lt;/code&gt; 策略。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.16 新特性：快速上手 Go embed</title>
      <link>https://note.lican.site/posts/posts/go/go1.16-2/</link>
      <pubDate>Thu, 11 Feb 2021 16:13:19 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go1.16-2/</guid>
      <description>&lt;p&gt;在以前，很多从其他语言转过来 Go 语言的同学会问到，或是踩到一个坑。就是以为 Go 语言所打包的二进制文件中会包含配置文件的联同编译和打包。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/f59a06c7-2fa1-41f4-901c-990f7dd7d715.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=werBc5OkLhKUh0JhpYpcAtl3etA%253D&amp;amp;Expires=1612147306&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;结果往往一把二进制文件挪来挪去，就无法把应用程序运行起来了。因为无法读取到静态文件的资源。&lt;/p&gt;&#xA;&lt;p&gt;无法将静态资源编译打包进二进制文件的话，通常会有两种解决方法：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;第一种是识别这类静态资源，是否需要跟着程序走。&lt;/li&gt;&#xA;&lt;li&gt;第二种就是考虑将其打包进二进制文件中。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;第二种情况的话，Go 以前是不支持的，大家就会去借助各种花式的开源库，例如：go-bindata/go-bindata 来实现。&lt;/p&gt;&#xA;&lt;p&gt;但从在 Go1.16 起，Go 语言自身正式支持了该项特性，今天我们将通过这篇文章快速了解和学习这项特性。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本使用&#34;&gt;基本使用&lt;/h2&gt;&#xA;&lt;p&gt;演示代码：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import _ &amp;#34;embed&amp;#34;&#xA;&#xA;//go:embed hello.txt&#xA;var s string&#xA;&#xA;func main() {&#xA;&#x9;print(s)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我们首先在对应的目录下创建了 &lt;code&gt;hello.txt&lt;/code&gt; 文件，并且写入文本内容 “吃煎鱼”。&lt;/p&gt;&#xA;&lt;p&gt;在代码中编写了最为核心的 &lt;code&gt;//go:embed hello.txt&lt;/code&gt; 注解。注解的格式很简单，就是 &lt;code&gt;go:embed&lt;/code&gt; 指令声明，外加读取的内容的地址，可支持相对和绝对路径。&lt;/p&gt;&#xA;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;吃煎鱼&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;读取到静态文件中的内容后自动赋值给了变量 &lt;code&gt;s&lt;/code&gt;，并且在主函数中成功输出。&lt;/p&gt;&#xA;&lt;p&gt;而针对其他的基础类型，Go embed 也是支持的：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//go:embed hello.txt&#xA;var s string&#xA;&#xA;//go:embed hello.txt&#xA;var b []byte&#xA;&#xA;//go:embed hello.txt&#xA;var f embed.FS&#xA;&#xA;func main() {&#xA;&#x9;print(s)&#xA;&#x9;print(string(b))&#xA;&#xA;&#x9;data, _ := f.ReadFile(&amp;#34;hello.txt&amp;#34;)&#xA;&#x9;print(string(data))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.16 即将正式发布，以下变更你需要知道</title>
      <link>https://note.lican.site/posts/posts/go/go1.16-1/</link>
      <pubDate>Thu, 11 Feb 2021 16:13:15 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go1.16-1/</guid>
      <description>&lt;p&gt;大家好，我是正在努力学习的煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在前几天，Go1.16rc1 抢先发布了。结合常规的 28 发布规律，其将会在 2021.02 月份左右发布正式版本。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/417219ea-578e-48f0-8a83-84544000a698.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=mbLHd49lXRyOoY%252FlyamD5YnGagw%253D&amp;amp;Expires=1612064951&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这次 Go1.16 也带来了一些新特性或变更。那么作为一个 Gopher，想必不能错过这次的更新。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://imgkr2.cn-bj.ufileos.com/4161e3cd-9f66-4f3f-8f68-91f3ba496c18.png?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&amp;amp;Signature=CwpOhSJnk70gEkTF8ITIxC58PoM%253D&amp;amp;Expires=1612074386&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天这篇文章将会带大家了解一下 Go1.16 的几个需要关注的特性。&lt;/p&gt;&#xA;&lt;h3 id=&#34;废弃-ioioutil&#34;&gt;废弃 io/ioutil&lt;/h3&gt;&#xA;&lt;p&gt;Go 官方认为 io/ioutil 这个包的定义不明确且难以理解。所以 Russ Cox 在 2020.10.17 提出了废弃 io/ioutil 的提案。&lt;/p&gt;&#xA;&lt;p&gt;大致变更如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Discard =&amp;gt; io.Discard&lt;/li&gt;&#xA;&lt;li&gt;NopCloser =&amp;gt; io.NopCloser&lt;/li&gt;&#xA;&lt;li&gt;ReadAll =&amp;gt; io.ReadAll&lt;/li&gt;&#xA;&lt;li&gt;ReadDir =&amp;gt; os.ReadDir&lt;/li&gt;&#xA;&lt;li&gt;ReadFile =&amp;gt; os.ReadFile&lt;/li&gt;&#xA;&lt;li&gt;TempDir =&amp;gt; os.MkdirTemp&lt;/li&gt;&#xA;&lt;li&gt;TempFile =&amp;gt; os.CreateTemp&lt;/li&gt;&#xA;&lt;li&gt;WriteFile =&amp;gt; os.WriteFile&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;与此同时大家也不需要担心存在破坏性变更，因为有 Go1 兼容性的保证，在 Go1 中 io/ioutil 还会存在，只变更内部的方法调用：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func ReadAll(r io.Reader) ([]byte, error) {&#xA;    return io.ReadAll(r)&#xA;}&#xA;&#xA;func ReadFile(filename string) ([]byte, error) {&#xA;    return os.ReadFile(filename)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;大家在后续也可以改改调用习惯。&lt;/p&gt;</description>
    </item>
    <item>
      <title>快报：正式提案将泛型特性加入 Go 语言</title>
      <link>https://note.lican.site/posts/posts/go/generics-proposal/</link>
      <pubDate>Wed, 13 Jan 2021 21:11:44 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/generics-proposal/</guid>
      <description>&lt;p&gt;经历九九八十一难，多年的不断探讨和 Go 语言爱好者们在社区中的强烈关注，且 Go 官方在 2020 年不断放出消息。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/1d0e5a264c65e37659f142bc2ee55805.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;总算在 2021 年 1 月 12 日。官方正式提出将泛型特性加入 Go 语言的 proposal 了，且最新的草案设计已经更新。&lt;/p&gt;&#xA;&lt;p&gt;基本语法如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func Print[T any](s []T) {&#xA;&#x9;// same as above&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;其大体的概述如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;函数可以具有使用方括号的其他类型参数列表，但其他情况下看起来像普通的参数列表：&lt;code&gt;func F[T any](p T) { ... }&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;类型也可以具有类型参数列表：&lt;code&gt;type MySlice[T any] []T&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;每个类型参数都有一个类型约束，就像每个普通参数都有一个类型：&lt;code&gt;func F[T Constraint](p T) { ... }&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;类型约束是接口类型。&lt;/li&gt;&#xA;&lt;li&gt;新的预声明名称 &lt;code&gt;any&lt;/code&gt; 是允许任何类型的类型约束。&lt;/li&gt;&#xA;&lt;li&gt;用作类型约束的接口类型可以具有预先声明的类型的列表。只有与那些类型之一匹配的类型参数才能满足约束条件。&lt;/li&gt;&#xA;&lt;li&gt;泛型函数只能使用其类型约束所允许的操作。&lt;/li&gt;&#xA;&lt;li&gt;使用泛型函数或类型需要传递类型实参。&lt;/li&gt;&#xA;&lt;li&gt;在通常情况下，类型推断允许省略函数调用的类型参数。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;根据官方博客的消息，如果该提案被正式接受。那么将会在 2021 年底之前完成一个基本可用的泛型特性使用，又或是会作为 Go1.18beta 的一部分。&lt;/p&gt;&#xA;&lt;p&gt;这是 Go 泛型特性的又一步前进。若大家有兴趣进一步了解或想提出意见，可查看下述传送门：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A Proposal for Adding Generics to Go：https://blog.golang.org/generics-proposal。&lt;/li&gt;&#xA;&lt;li&gt;proposal: spec: add generic programming using type parameters：https://github.com/golang/go/issues/43651。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;今年年底或 Go1.18beta 到底能不能看到泛型的正式完整可用版本呢，值得期待。&lt;/p&gt;</description>
    </item>
    <item>
      <title>推荐一个牛逼的技术社区！</title>
      <link>https://note.lican.site/posts/posts/2021-ecug/</link>
      <pubDate>Tue, 05 Jan 2021 21:26:50 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/2021-ecug/</guid>
      <description>&lt;p&gt;相信我的读者中不少是 Go 语言的爱好者，又或是正在伺机而动。&lt;/p&gt;&#xA;&lt;p&gt;今天要给大家所介绍的这个技术社区，就是由与 Go 语言有很浓厚的缘分的人所创办的。&lt;/p&gt;&#xA;&lt;p&gt;他有如下几个业界标签：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;早期的国内 Go 语言布道师。&lt;/li&gt;&#xA;&lt;li&gt;早期在公司内大规模的推广和使用 Go 语言。&lt;/li&gt;&#xA;&lt;li&gt;早期编写了一本 Go 语言图书：《Go 语言编程》。&lt;/li&gt;&#xA;&lt;li&gt;现在是一家公司的 CEO。&lt;/li&gt;&#xA;&lt;li&gt;近期在大力推广 Go+。&lt;/li&gt;&#xA;&lt;li&gt;&amp;hellip;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;他还有非常多的标签，通过上述这几点，你是否猜到是谁了呢？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/0c8ac8602cca4e19c8caca30ac991305.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;没错，他就是七牛云的 CEO 许式伟。&lt;/p&gt;&#xA;&lt;h2 id=&#34;与-go-语言的渊源&#34;&gt;与 Go 语言的渊源&lt;/h2&gt;&#xA;&lt;p&gt;许式伟在早年离开盛大创新院。创办七牛云的时候，选择了 Go 这门还未发布正式版的语言。因为小众，许式伟开始有意识地培养 Go 中国社区。&lt;/p&gt;&#xA;&lt;p&gt;他们做了很多工作。具体有：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2012 年 2 月，许式伟首次在公开场合说：Go 会超过 C、Java，成为最流行的语言。讲得最多的一个 PPT 是《Go，Next C》这篇。&lt;/li&gt;&#xA;&lt;li&gt;2012 年 8 月，正式出版 Go 图书，书名为《Go 语言编程》。&lt;/li&gt;&#xA;&lt;li&gt;2020 年下半年，正式对 Go+ 进行了宣传和推广，对大数据科学的领域进行了增强。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;神秘的技术社区&#34;&gt;神秘的技术社区&lt;/h2&gt;&#xA;&lt;p&gt;虽然许式伟已经是七牛云 CEO，但依然在技术领域和咱们的 Go 领域发光发热，并没有因此而停下脚步。许式伟早在 2007 年就成立了一个技术社区。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/f04e24b25f48c3d2293e64390d22888f.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个社区名字叫 ECUG，ECUG 全称为 Effective Cloud User Group（实效云计算用户组）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>拖更的 2020 年不一样</title>
      <link>https://note.lican.site/posts/posts/2020-summary/</link>
      <pubDate>Thu, 31 Dec 2020 21:29:55 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/2020-summary/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;万万没想到&amp;hellip;想着写 2020 年总结，结果就到了 2021 年，不愧是只有 7s 记忆的博主 😂。&lt;/p&gt;&#xA;&lt;p&gt;2020 年并不简单，这也是第一次在公开场合写个人向，并且还是年终总结，感慨颇多。&lt;/p&gt;&#xA;&lt;h2 id=&#34;出书&#34;&gt;出书&lt;/h2&gt;&#xA;&lt;p&gt;今年（2020年）上半年几乎没有更新博客文章，当时还一口气退了一大堆技术交流的微信群。当时有不少朋友来咨询我怎么了，后面的事大家也就知道了。&lt;/p&gt;&#xA;&lt;p&gt;蛰伏了将近 9 个月，出了人生第一本图书（简体+繁体）：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/56c805ff0e8c6134e845d5da99d4ab0b.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;本书已印刷三次，和编辑沟通了几次，现在 Go 语言还算小众（与 Java、Python 相比较），销量算是挺不错的了。&lt;/p&gt;&#xA;&lt;p&gt;有一块比较遗憾，在初印有几个比较致命的印刷问题。后续在第二次印刷中解决了。此次只能说第一次写书经验不足，编辑也是，下次一定。&lt;/p&gt;&#xA;&lt;p&gt;另外当时出书时与曹大聊过几次，他提到的出书后会遇到的所有烦恼我大多都遇到了，现实太真实，出书很理想。&lt;/p&gt;&#xA;&lt;p&gt;其次写书并不赚钱，不要见面就问。更没有因此改变我的初心，依然是热爱分享知识的煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;未曾想过的第一个里程碑完成。&lt;/p&gt;&#xA;&lt;h2 id=&#34;博客公众号&#34;&gt;博客/公众号&lt;/h2&gt;&#xA;&lt;p&gt;后半年就开始陆续恢复博客的写作了，2020 年博客上共有 32 篇技术文章，加上图书的稿子一年总共写了 70+ 篇文章。&lt;/p&gt;&#xA;&lt;p&gt;2019 年只写了 19 篇。相比较而言，总产出还算可以：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/4be8f0069f8b79388c1fe0853ab9a534.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;但理论上还可以更高，因为在写完书后，由于之前过于高度集中，导致下半年出现了几个月的真空休息期。更深刻的认识到了劳逸结合，适当调节非常重要。&lt;/p&gt;&#xA;&lt;p&gt;同时公众号也在年尾终于往前走了一步，开始接了一些推广，虽然钱不多。但更多的还是激励自己，倒逼自己更多的输入和输出。&lt;/p&gt;&#xA;&lt;p&gt;最近有很多小伙伴也发现了我公众号的更新频率变高了，这是相辅相成的。&lt;/p&gt;&#xA;&lt;p&gt;知识吸到就是你的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;社区&#34;&gt;社区&lt;/h2&gt;&#xA;&lt;p&gt;今年因为分享知识接触到了很多人，又因此认识到了更多的人。其中不乏各行各领域的优秀小伙伴们，间接的给我人生发展上提供了极大的建议和反馈，影响了我做许多事情的决策和思考方向。&lt;/p&gt;&#xA;&lt;p&gt;同时在 Gopher China 2020 中拿到了 GOP（Go 领域最具观点专家）的荣誉：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/6106728f2f69a19d5584623326c97363.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;很可惜的是，当时正在在准备公司内答辩的 PPT 和生病中，因此没能去现场，很遗憾。&lt;/p&gt;&#xA;&lt;p&gt;不过在线下依然感受到了各路 Gopher 们的反馈和关注，很感谢 GoCN 的认可。&lt;/p&gt;&#xA;&lt;p&gt;未曾想过的第二个里程碑完成。&lt;/p&gt;&#xA;&lt;h2 id=&#34;工作&#34;&gt;工作&lt;/h2&gt;&#xA;&lt;p&gt;感觉自己变化太大了，发现今年思考事情的角度、广度、深度以及关联性已然和上一年不一样。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/82d6bd939ce594c3ad219722380f5957.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;经提醒也发现已入职三年半，已经到了传统定义的 “职业倦怠期” 的时间阶段，如何更好的保持自己的好奇和发展是一个要考虑的大命题。&lt;/p&gt;&#xA;&lt;p&gt;自己评判自己的工作是很难的，继续努力是大方向。&lt;/p&gt;&#xA;&lt;h2 id=&#34;读书&#34;&gt;读书&lt;/h2&gt;&#xA;&lt;p&gt;今年看的书挺多，涉及了计算机、产品设计、用户增长、金融理财等各个领域。&lt;/p&gt;</description>
    </item>
    <item>
      <title>吐血整理 | 快速了解全球软件案例（Top100）</title>
      <link>https://note.lican.site/posts/posts/2020-top100/</link>
      <pubDate>Tue, 22 Dec 2020 21:26:44 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/2020-top100/</guid>
      <description>&lt;p&gt;前几天，煎鱼去了趟北京，参加了为期三天的全球软件案例研究峰会（TOP 100）。&lt;/p&gt;&#xA;&lt;p&gt;同时记了一些笔记，整理后分享出来，希望对大家有所帮助，拓展眼界非常重要。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/a1be9ee345e57e1299f74a3d9e336d13.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;内容比较多（已经精简过），大家可以挑自己感兴趣的学习，建议三连。&lt;/p&gt;&#xA;&lt;p&gt;一级目录如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;百度内部业务 ServieMesh 实践。&lt;/li&gt;&#xA;&lt;li&gt;云原生开发平台在腾讯游戏运营中的实践。&lt;/li&gt;&#xA;&lt;li&gt;快狗打车可持续交付实践。&lt;/li&gt;&#xA;&lt;li&gt;网易数帆从微服务框架到服务网格架构平滑演进及最佳实践。&lt;/li&gt;&#xA;&lt;li&gt;不破不立：企业级研发效能提升的创新实践。&lt;/li&gt;&#xA;&lt;li&gt;自如云原生落地最佳实践。&lt;/li&gt;&#xA;&lt;li&gt;研发效能度量的误区、体系化实践和效能提升案例。&lt;/li&gt;&#xA;&lt;li&gt;京东 BDP 的全域监控、管控平台搭建实践。&lt;/li&gt;&#xA;&lt;li&gt;构建发布效率从10分钟到秒级的提升 - 云原生下编程方式的探索和实践。&lt;/li&gt;&#xA;&lt;li&gt;全面监控体系建设及智能监控的探索实践。&lt;/li&gt;&#xA;&lt;li&gt;低代码技术在贝壳的实践。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;百度内部业务-serviemesh-实践&#34;&gt;百度内部业务 ServieMesh 实践&lt;/h2&gt;&#xA;&lt;p&gt;本场演讲内容主要为微服务到服务网格的过程。其中涉及百度在异构场景下的一系列演进和适配操作。&lt;/p&gt;&#xA;&lt;p&gt;同时也能得知百度也是自己做了个 bmesh，自此概括几乎全一线互联网大厂，均为自研（或结合）ServieMesh。&lt;/p&gt;&#xA;&lt;h3 id=&#34;整体演进&#34;&gt;整体演进&lt;/h3&gt;&#xA;&lt;h4 id=&#34;10-时代&#34;&gt;1.0 时代&lt;/h4&gt;&#xA;&lt;p&gt;第一代微服务架构（1.0时代），主体是基于 SDK/开发框架的微服务治理体系。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/83b5009e040969ee7b60362ad7426573.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;主要存在以下问题：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;开发成本高：异构语言的问题，每个语言都要重新开发。&lt;/li&gt;&#xA;&lt;li&gt;升级成本高：框架上线以来业务。&lt;/li&gt;&#xA;&lt;li&gt;管理成本高：服务拓扑和治理没有统一管理（需要治理）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;20时代&#34;&gt;2.0时代&lt;/h4&gt;&#xA;&lt;p&gt;第二代微服务架构（2.0时代），主体是基于微服务框架到服务网格，也就是把服务治理能力抽取出来，作为一个进程（sidecar），与业务逻辑解耦。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/ea571676ce9b75b0730a5d56350ae93e.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从概念上来讲，主要分为以下两类：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;数据平面&#xA;&lt;ul&gt;&#xA;&lt;li&gt;与业务无关。&lt;/li&gt;&#xA;&lt;li&gt;与语言无关。&lt;/li&gt;&#xA;&lt;li&gt;独立的升级（直接升级 sidecar 的进程），能够解耦。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;控制平面&#xA;&lt;ul&gt;&#xA;&lt;li&gt;能够统一的管控。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;百度现状&#34;&gt;百度现状&lt;/h3&gt;&#xA;&lt;p&gt;各语言在内部平分秋色，没有谁强谁弱。各自都有框架，且有可能有多个框架，可自行脑补一下在公司内部一种语言有 N 种框架，且多种协议（含私有协议）的情况：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/182845aceb39c9e413e28fd549058cf8.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;存在以下问题：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多个语言开发。&lt;/li&gt;&#xA;&lt;li&gt;多个框架改造。&lt;/li&gt;&#xA;&lt;li&gt;多个通讯协议。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;简单来讲就是 “异构系统”，传统的微服务框架无法满足了，成本非常高，甚至不可行。只能通过服务网关的方式来实现微服务治理。&lt;/p&gt;&#xA;&lt;h3 id=&#34;上服务网格的困难&#34;&gt;上服务网格的困难&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;改造成本：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;各种内部框架的支持。&lt;/li&gt;&#xA;&lt;li&gt;各种通讯协议的支持。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;性能问题：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通讯延迟，有些敏感业务无法接受，例如：搜索。&lt;/li&gt;&#xA;&lt;li&gt;资源开源，数十万机器，每个服务都加边车，成本极大。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;规模问题：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;随着接入的节点越多，规模越大，控制平面下发配置的速度越慢，甚至无法工作。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;百度的解决方案整体架构&#34;&gt;百度的解决方案（整体架构）&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/9679ccb5a92f650b83fcf29e0a6a6775.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 错误处理：用 panic 取代 err != nil 的模式</title>
      <link>https://note.lican.site/posts/posts/go/go-error2panic/</link>
      <pubDate>Sat, 12 Dec 2020 17:21:42 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-error2panic/</guid>
      <description>&lt;p&gt;前段时间我分享了文章 《先睹为快，Go2 Error 的挣扎之路》后，和一位朋友进行了一次深度交流，他给我分享了他们项目组对于 Go 错误处理的方式调整。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，就是在业务代码中使用 &lt;code&gt;panic&lt;/code&gt; 的方式来替代 “永无止境” 的 &lt;code&gt;if err != nil&lt;/code&gt;。这就是今天本文的重点内容，我们一起来看看是怎么做，又有什么优缺点。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么想替换&#34;&gt;为什么想替换&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 语言中 &lt;code&gt;if err != nil&lt;/code&gt; 写的太多，还要管方法声明各种，嫌麻烦又不方便：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;err := foo()&#xA;if err != nil {&#xA;     //do something..&#xA;     return err&#xA;}&#xA;&#xA;err := foo()&#xA;if err != nil {&#xA;     //do something..&#xA;     return err&#xA;}&#xA;&#xA;err := foo()&#xA;if err != nil {&#xA;     //do something..&#xA;     return err&#xA;}&#xA;&#xA;err := foo()&#xA;if err != nil {&#xA;     //do something..&#xA;     return err&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;上述还是示例代码，比较直面。若是在工程实践，还得各种 package 跳来跳去加 &lt;code&gt;if err != nil&lt;/code&gt;，总的来讲比较繁琐，要去关心整体的上下游。更具体的就不赘述了，可以翻看我先前的文章。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 并发：一些有趣的现象和要避开的 “坑”</title>
      <link>https://note.lican.site/posts/posts/go/go-concurrent-lock/</link>
      <pubDate>Thu, 10 Dec 2020 00:25:59 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-concurrent-lock/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;最近在看 Go 并发相关的内容，发现还是有不少细节容易让人迷迷糊糊的，一个不小心就踏入深坑里，且指不定要在上线跑了一些数据后才能发现，那可真是太人崩溃了。&lt;/p&gt;&#xA;&lt;p&gt;今天来分享几个案例，希望大家在编码时能够避开这几个 “坑”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;案例一&#34;&gt;案例一&lt;/h2&gt;&#xA;&lt;h3 id=&#34;演示代码&#34;&gt;演示代码&lt;/h3&gt;&#xA;&lt;p&gt;第一个案例来自 @鸟窝 大佬在极客时间的分享，代码如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;&#x9;count := 0&#xA;&#x9;wg := sync.WaitGroup{}&#xA;&#x9;wg.Add(10)&#xA;&#x9;for i := 0; i &amp;lt; 10; i++ {&#xA;&#x9;&#x9;go func() {&#xA;&#x9;&#x9;&#x9;defer wg.Done()&#xA;&#x9;&#x9;&#x9;for j := 0; j &amp;lt; 100000; j++ {&#xA;&#x9;&#x9;&#x9;&#x9;count++&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}()&#xA;&#x9;}&#xA;&#x9;wg.Wait()&#xA;&#xA;&#x9;fmt.Println(count)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;思考一下，最后输出的 &lt;code&gt;count&lt;/code&gt; 变量的值是多少？是不是一百万？&lt;/p&gt;&#xA;&lt;h3 id=&#34;输出结果&#34;&gt;输出结果&lt;/h3&gt;&#xA;&lt;p&gt;在上述代码中，我们通过 &lt;code&gt;for-loop &lt;/code&gt; 循环起 &lt;code&gt;goroutine&lt;/code&gt; 进行自增，并使用了 &lt;code&gt;sync.WaitGroup&lt;/code&gt; 来保证所有的 goroutine 都执行完毕才输出最终的结果值。&lt;/p&gt;&#xA;&lt;p&gt;最终的输出结果如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 第一次执行&#xA;638853&#xA;&#xA;// 第二次执行&#xA;654473&#xA;&#xA;// 第三次执行&#xA;786193&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出的结果值不是恒定的，也就是每次输出的都不一样，且基本不会达到想象中的一百万。&lt;/p&gt;</description>
    </item>
    <item>
      <title>先睹为快，Go2 Error 的挣扎之路</title>
      <link>https://note.lican.site/posts/posts/go/go2-errors/</link>
      <pubDate>Thu, 03 Dec 2020 20:56:47 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go2-errors/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;自从 Go 语言在国内火热以来，除去泛型，其次最具槽点的就是 Go 对错误的处理方式，一句经典的 &lt;code&gt;if err != nil&lt;/code&gt;  暗号就能认出你是一个 Go 语言爱好者。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/381fcb5e85923479666f5be14de3782c.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;自然，大家对 Go error 的关注度更是高涨，Go team 也是，因此在 &lt;a href=&#34;https://github.com/golang/proposal/blob/master/design/go2draft.md&#34;&gt;Go 2 Draft Designs&lt;/a&gt; 中正式提到了 error handling（错误处理）的相关草案，希望能够在未来正式的解决这个问题。&lt;/p&gt;&#xA;&lt;p&gt;在今天这篇文章中，我们将一同跟踪 Go2 error，看看他是怎么 “挣扎” 的，能不能破局？&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要吐槽-go1&#34;&gt;为什么要吐槽 Go1&lt;/h2&gt;&#xA;&lt;p&gt;要吐槽 Go1 error，就得先知道为什么大家到底是在喷 Error 哪里处理的不好。在 Go 语言中，error 其实本质上只是个 Error 的 &lt;code&gt;interface&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type error interface {&#xA;    Error() string&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;实际的应用场景如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;&#x9;x, err := foo()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9; // handle error&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;单纯的看这个例子似乎没什么问题，但工程大了后呢？显然 &lt;code&gt;if err != nil&lt;/code&gt; 的逻辑是会堆积在工程代码中，Go 代码里的 &lt;code&gt;if err != nil&lt;/code&gt; 甚至会达到工程代码量的 30% 以上：&lt;/p&gt;</description>
    </item>
    <item>
      <title>重磅：Go errors 将不会有任何进一步的改进计划</title>
      <link>https://note.lican.site/posts/posts/go/gophercon2020-errors/</link>
      <pubDate>Sat, 14 Nov 2020 16:48:33 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gophercon2020-errors/</guid>
      <description>&lt;p&gt;今天在 Gophercon2020 上，&lt;strong&gt;Go 1.13 错误提案的作者事后提及他对目前错误格式化的缺失表示遗憾，而且在未来很长的好几年内都不会有任何进一步改进计划&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;对此他本人给出的原因之一是：对于错误处理这一领域特定的问题，在他的能力范围内实在是无法给出一个令所有人都满意的方案。&lt;/p&gt;&#xA;&lt;p&gt;尽管如此，在他演讲的最后，还是给出了一些关于错误嵌套的建议，即实现 &lt;code&gt;fmt.Formatter&lt;/code&gt;，图中给出了一个简单的例子，大家可以参考如下代码：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type DetailError struct {&#xA;&#x9;msg, detail string&#xA;&#x9;err         error&#xA;}&#xA;&#xA;func (e *DetailError) Unwrap() error { return e.err }&#xA;&#xA;func (e *DetailError) Error() string {&#xA;&#x9;if e.err == nil {&#xA;&#x9;&#x9;return e.msg&#xA;&#x9;}&#xA;&#x9;return e.msg + &amp;#34;: &amp;#34; + e.err.Error()&#xA;}&#xA;&#xA;func (e *DetailError) Format(s fmt.State, c rune) {&#xA;&#x9;if s.Flag(&amp;#39;#&amp;#39;) &amp;amp;&amp;amp; c == &amp;#39;v&amp;#39; {&#xA;&#x9;&#x9;type nomethod DetailError&#xA;&#x9;&#x9;fmt.Fprintf(s, &amp;#34;%#v&amp;#34;, (*nomethod)(e))&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;if !s.Flag(&amp;#39;+&amp;#39;) || c != &amp;#39;v&amp;#39; {&#xA;&#x9;&#x9;fmt.Fprintf(s, spec(s, c), e.Error())&#xA;&#x9;&#x9;return&#xA;&#x9;}&#xA;&#x9;fmt.Fprintln(s, e.msg)&#xA;&#x9;if e.detail != &amp;#34;&amp;#34; {&#xA;&#x9;&#x9;io.WriteString(s, &amp;#34;\t&amp;#34;)&#xA;&#x9;&#x9;fmt.Fprintln(s, e.detail)&#xA;&#x9;}&#xA;&#x9;if e.err != nil {&#xA;&#x9;&#x9;if ferr, ok := e.err.(fmt.Formatter); ok {&#xA;&#x9;&#x9;&#x9;ferr.Format(s, c)&#xA;&#x9;&#x9;} else {&#xA;&#x9;&#x9;&#x9;fmt.Fprintf(s, spec(s, c), e.err)&#xA;&#x9;&#x9;&#x9;io.WriteString(s, &amp;#34;\n&amp;#34;)&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&#xA;func spec(s fmt.State, c rune) string {&#xA;&#x9;buf := []byte{&amp;#39;%&amp;#39;}&#xA;&#x9;for _, f := range []int{&amp;#39;+&amp;#39;, &amp;#39;-&amp;#39;, &amp;#39;#&amp;#39;, &amp;#39; &amp;#39;, &amp;#39;0&amp;#39;} {&#xA;&#x9;&#x9;if s.Flag(f) {&#xA;&#x9;&#x9;&#x9;buf = append(buf, byte(f))&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;&#x9;if w, ok := s.Width(); ok {&#xA;&#x9;&#x9;buf = strconv.AppendInt(buf, int64(w), 10)&#xA;&#x9;}&#xA;&#x9;if p, ok := s.Precision(); ok {&#xA;&#x9;&#x9;buf = append(buf, &amp;#39;.&amp;#39;)&#xA;&#x9;&#x9;buf = strconv.AppendInt(buf, int64(p), 10)&#xA;&#x9;}&#xA;&#x9;buf = append(buf, byte(c))&#xA;&#x9;return string(buf)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;此处的内容来源于欧神（@changkun）在知识星球里的线上分享，作为 Go 夜读 SIG 成员的一员，借此也安利下咱们《Go 夜读》的星球，欢迎大家一起来学习和分享：&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么 Go 的泛型一拖再拖？</title>
      <link>https://note.lican.site/posts/posts/go/go16-preview/</link>
      <pubDate>Thu, 12 Nov 2020 23:47:16 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go16-preview/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。前段时间 Go 语言的泛型讨论频频出现在各微信群，且又冲上了国内外各大文章的 “头条”：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/c9c48e9479c7036f7d5a33b6ab49e855.jpg&#34; alt=&#34;来自 p 神公众号的截图&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;信息汇总来看，Go 泛型这几年会出，但大体来讲现在 Go 泛型又又又推迟了，好家伙。我最早了解到时是考虑 Go1.16 释出，后面又推到了 Go1.17，接着现在又延期到了 Go1.18 了（2021 年底）。&lt;/p&gt;&#xA;&lt;p&gt;看到了信息的表象后，再想想为什么泛型 “这件事情” 突然醒目起来了，其原因之一是由官方 &lt;a href=&#34;https://blog.golang.org/11years&#34;&gt;Go，11 岁&lt;/a&gt; 的博文所引爆的。&lt;/p&gt;&#xA;&lt;p&gt;同时近日举办的 GopherCon2020 大会，Robert Griesemer 分享的 Typing [Generic] Go。更正式的让 Go 泛型更面向了大众，也侧面的说明官方认为其已经到达了一个新的阶段了，进入最终实现阶段。&lt;/p&gt;&#xA;&lt;p&gt;事不宜迟，既然官方都已经摩拳擦掌了，我们的学习之路也得跟上，因此本文将会介绍 Go 泛型现在的情况，并通过在介绍过程中不断思考最后得出一个为什么。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是泛型&#34;&gt;什么是泛型&lt;/h2&gt;&#xA;&lt;p&gt;泛型程序设计（generic programming）是程序设计语言的一种风格或范式。泛型允许程序员在强类型语言中编写代码时，使用一些以后才确定的类型，其在真正实例化时才会为这些参数指确定类型。另外各语言和其编译器、运行环境对泛型的支持均不一样，因此需要针对来辩证。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，泛型就是参数化多态。其可根据实参类型生成不同的版本，支持任意数量的调用：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func F(a, b T) T{ return a+b }&#xA;&#xA;// T 为 int&#xA;F(1, 2)&#xA;&#xA;// T 为 string&#xA;F(&amp;#34;1&amp;#34;, &amp;#34;2&amp;#34;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在编译时期编译器便确定其 T 的入参类型。这也是 Go 泛型实现的要求之一 “编译时类型安全”。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么需要泛型&#34;&gt;为什么需要泛型&lt;/h2&gt;&#xA;&lt;p&gt;这时候可能会有人说，没有泛型也可以啊&amp;hellip;感觉写业务代码没什么影响，与其搞泛型不如搞好 errors（具体新消息可参见：重磅：Go errors 将不会有任何进一步的改进计划）。&lt;/p&gt;&#xA;&lt;p&gt;但泛型是有其所需的场景，最常见的是像基础库在处理获取配置中心数据时，就要处理类型，时常遇到下述场景：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 语言今年 11 岁，何去何从，现状到底如何？</title>
      <link>https://note.lican.site/posts/posts/go/go11/</link>
      <pubDate>Wed, 11 Nov 2020 21:21:58 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go11/</guid>
      <description>&lt;p&gt;不说不知道，一说下一跳。Go 语言已经开源 11 周年了，感觉是一路高歌，Release History （polarisxu 整理）如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2011 年 3 月 16 日，Go 语言的第一个稳定版本 r56 发布；&lt;/li&gt;&#xA;&lt;li&gt;2012 年 3 月  28 日，Go 语言的第一个正式版本 Go1 发布，并承诺 1.x 的 兼容性；&lt;/li&gt;&#xA;&lt;li&gt;2013 年  5 月 13 日，Go1.1 正式版才发布。&lt;/li&gt;&#xA;&lt;li&gt;2013 年 12 月 1 日，Go1.2 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2014 年 6 月 18 日，Go1.3 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2014 年 12 月 10 日，Go1.4 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2015 年 8 月 19 日，Go1.5 正式发布。该版本实现了自举，即移除了 C 代码，使用 Go 开发 Go 语言；&lt;/li&gt;&#xA;&lt;li&gt;2016 年 2 月 17 日，Go1.6 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2016 年 8 月 15 日，Go1.7 正式发布；引入 context 包；&lt;/li&gt;&#xA;&lt;li&gt;2017 年 2 月 17 日，Go1.8 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2017 年 8 月 24 日，Go1.9 正式发布；引入别名；&lt;/li&gt;&#xA;&lt;li&gt;2018 年 2 月 16 日，Go1.10 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2018 年 8 月 25 日，Go1.11 正式发布。开始强势支持 Go modules；&lt;/li&gt;&#xA;&lt;li&gt;2019 年 3 月 1 日，Go1.12 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2019 年 9 月 3 日，Go1.13 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2020 年 2 月 25 日，Go1.14 正式发布；goroutine 支持异步抢占调度；&lt;/li&gt;&#xA;&lt;li&gt;2020 年 8 月 11 日，Go1.15 正式发布；&lt;/li&gt;&#xA;&lt;li&gt;2021 年 2 月，预计 Go1.16 正式发布；将包含新的文件系统接口和支持在构建时的静态文件嵌入，以及链接器的重写，且正式对 Apple Silicon（GOARCH=arm64）Mac 进行支持。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;目视现在&#34;&gt;目视现在&lt;/h2&gt;&#xA;&lt;p&gt;现在的 Go 语言在国内已经掀起了一浪又一浪的热潮，炒的非常火热。各大平台极客时间、拉勾教育、掘金小册、慕课网等纷纷出现了大量 Go 语言相关的付费专栏/视频。&lt;/p&gt;</description>
    </item>
    <item>
      <title>解密 Go 语言之反射 reflect</title>
      <link>https://note.lican.site/posts/posts/go/reflect/</link>
      <pubDate>Sat, 07 Nov 2020 15:01:51 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/reflect/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;在所有的语言中，反射这一功能基本属于必不可少的模块。虽说 “反射” 这个词让人根深蒂固，但更多的还是 WHY。反射到底是什么，反射又是基于什么法则实现的？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/47976eb32b9cb5bdbe1869123fefb92b.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;今天我们通过这篇文章来一一揭晓，以 Go 语言为例，了解反射到底为何物，其底层又是如何实现的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;反射是什么&#34;&gt;反射是什么&lt;/h2&gt;&#xA;&lt;p&gt;在计算机学中，反射是指计算机程序在运行时（runtime）可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说，反射就是程序在运行的时候能够 “观察” 并且修改自己的行为（来自维基百科）。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/96394a2bb7b1dd964b5197837781e348.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;简单来讲就是，应用程序能够在运行时观察到变量的值，并且能够修改他。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一个例子&#34;&gt;一个例子&lt;/h2&gt;&#xA;&lt;p&gt;最常见的 reflect 标准库例子，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;&#x9;&amp;#34;reflect&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;rv := []interface{}{&amp;#34;hi&amp;#34;, 42, func() {}}&#xA;&#x9;for _, v := range rv {&#xA;&#x9;&#x9;switch v := reflect.ValueOf(v); v.Kind() {&#xA;&#x9;&#x9;case reflect.String:&#xA;&#x9;&#x9;&#x9;fmt.Println(v.String())&#xA;&#x9;&#x9;case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:&#xA;&#x9;&#x9;&#x9;fmt.Println(v.Int())&#xA;&#x9;&#x9;default:&#xA;&#x9;&#x9;&#x9;fmt.Printf(&amp;#34;unhandled kind %s&amp;#34;, v.Kind())&#xA;&#x9;&#x9;}&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;hi&#xA;42&#xA;unhandled kind func&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在程序中主要是声明了 rv 变量，变量类型为 &lt;code&gt;interface{}&lt;/code&gt;，其包含 3 个不同类型的值，分别是字符串、数字、闭包。一般 &lt;code&gt;interface{}&lt;/code&gt; 的使用常见于不知道入参者具体的基本类型是什么，那么就会用 &lt;code&gt;interface{}&lt;/code&gt; 类型来做一个伪 “泛型”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>应用编译，计算机中那些一定要掌握的知识细节</title>
      <link>https://note.lican.site/posts/posts/reading/programmer-compile-link/</link>
      <pubDate>Wed, 28 Oct 2020 20:52:52 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/reading/programmer-compile-link/</guid>
      <description>&lt;p&gt;”Hello World“ 程序几乎是每个程序员入门和开发环境测试的基本标准。代码如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#inclue &amp;lt;stdio.h&amp;gt;&#xA;&#xA;int main()&#xA;{&#xA;&#x9;printf(&amp;#34;Hello Wolrd\n&amp;#34;);&#xA;&#x9;return 0;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;编译该程序，再运行，就基本完成了所有新手的第一个程序。表面看起来轻轻松松，毫无悬念。但是实际上单纯这几下操作，就已经包含了不少暗操作。本着追根溯源的目的，我们将进一步对其流程进行分析。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/a8040c0fc18257d2891d4b570b02c44d.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;其内部主要包含 4 个步骤，分别是：预处理、编译、汇编以及链接。由于篇幅问题本文主要涉及前三部分，链接部分将会放到下一篇文章来讲解。&lt;/p&gt;&#xA;&lt;h2 id=&#34;预编译&#34;&gt;预编译&lt;/h2&gt;&#xA;&lt;p&gt;程序编译的第一步是 “预编译” 环境。主要作用是处理源代码文件中以 ”#“ 开始的预编译指令，例如：&lt;code&gt;#include&lt;/code&gt;、&lt;code&gt;#define&lt;/code&gt; 等。&lt;/p&gt;&#xA;&lt;p&gt;常见的处理规则是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;将所有 &lt;code&gt;#define&lt;/code&gt; 删除，并且展开所有的宏定义。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;处理所有条件预编译指令，比如 &lt;code&gt;if&lt;/code&gt;、&lt;code&gt;ifdef&lt;/code&gt;、&lt;code&gt;elif&lt;/code&gt;、&lt;code&gt;else&lt;/code&gt;、&lt;code&gt;endif&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;处理 &lt;code&gt;#include&lt;/code&gt; 预编译指令，将所包含的文件插入到该预编译指令的位置（可递归处理子级引入）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;删除所有的注释。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;添加行号和文件名标识，以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时显示行号。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;保留所有的 &lt;code&gt;#pragma&lt;/code&gt; 编译器指令，后续编译器将会使用。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在预编译后，文件中将不包含宏定义或引入。因为在预编译后将会全部展开，相应的代码段均已被插入文件中。像 Go 语言中的话，主要是 &lt;code&gt;go generate&lt;/code&gt; 命令会涉及到相关的预编译处理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;编译&#34;&gt;编译&lt;/h2&gt;&#xA;&lt;p&gt;第二步正式进入到 &amp;ldquo;编译&amp;rdquo; 环境。主要作用是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。该部分通常是整个程序构建的核心部分，也是最复杂的部分之一。&lt;/p&gt;&#xA;&lt;p&gt;执行编译操作的工具，一般称其为 “编译器”。编译器是将高级语言翻译成机器语言的一个工具。例如我们平时用 Go 语言写的程序，编译器就可以将其编译成机器可以执行的指令及数据。那么我们就不需要再去关心相关的底层细节，因为使用机器指令或汇编语言编写程序是一件十分费时及乏味的事情。&lt;/p&gt;&#xA;&lt;p&gt;且高级语言能够使得程序员更关注程序逻辑的本身，不再需要过多的关注计算机本身的限制，具有更高的平台可移植性，能够在多种计算机架构下运行。&lt;/p&gt;&#xA;&lt;h3 id=&#34;编译过程&#34;&gt;编译过程&lt;/h3&gt;&#xA;&lt;p&gt;编译过程一般分为 6 步：扫描、语法分析、语义分析、源代码优化、代码生成和目标代码优化。整个过程如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/c1e4902df20b68df654229d9618b9d58.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们结合上图的源代码（Source Code）到最终目标代码（Final Target Code）的过程，以一段最简单的 Go 语言程序的代理例子来复现和讲述整个过程，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;fmt.Println(&amp;#34;Hello World.&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;词法分析&#34;&gt;词法分析&lt;/h3&gt;&#xA;&lt;p&gt;首先 Go 程序会被输入到扫描器中，可以理解为所有解析程序的第一步，都是读取源代码。而扫描器的任务很简单，就是利用有限状态机对源代码的字符序列进行分割，最终变成一系列的记号（Token）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>快速了解 2020 Gopher Meetup 深圳站</title>
      <link>https://note.lican.site/posts/posts/go-meetup1017/</link>
      <pubDate>Sun, 18 Oct 2020 01:03:25 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go-meetup1017/</guid>
      <description>&lt;p&gt;昨天（20201017）很有幸的参加了 GoCN 的 2020 Gopher Meetup 深圳站，在台下听各位大佬分享各自的知识和案例。恰好也是我第一次参加这类 Meetup。因此希望也能够让没来的小伙伴对本次分享内容有一定的了解。&lt;/p&gt;&#xA;&lt;p&gt;按过往对其观察的惯例，一般在下周后官方就会陆续释出 Meetup PPT 和推文，在此引个主线。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/08910eccd6b1b0c16c0f60571cd7745a.jpeg&#34; alt=&#34;会场外的展板，图来自 GoCN&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;本次 Meetup 主要的方向是云原生，包含四位讲师分享，分享的主题如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;华为云的 go 语言云原生实践。&lt;/li&gt;&#xA;&lt;li&gt;go 云上微服务模式解构。&lt;/li&gt;&#xA;&lt;li&gt;服务网格在边缘计算领域的实践与探索。&lt;/li&gt;&#xA;&lt;li&gt;腾讯大规模 etcd 集群治理与优化实践。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;华为云的-go-语言云原生实践&#34;&gt;华为云的 go 语言云原生实践&lt;/h2&gt;&#xA;&lt;p&gt;讲述华为云在早起使用 Go 语言时，当时 Go 语言的整体生态圈还比较薄弱，因此很多第三方基础/工具库并不全：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/4adaf1b0b465a3197a9ba9d714dda51d.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;围绕此整体做一系列的东西，主要从统一框架开始做，提供各种插件，组件，基本涵盖了常用的所有组件。其所带来的的价值/效益：能够直接提高研发效能，让其他业务能够简单使用，不需要太重复造轮子：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/8c0afff2cb0bb6d2901d1e4d7f8296f2.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;再往后就介绍了其使用了 Mesh 去做整块的流量标识，金丝雀等流量控制方案。同时还支持了市面上常见的框架和协议。是一个比较完整很常见的整体解决方案，有真实的参考意义。&lt;/p&gt;&#xA;&lt;p&gt;若在企业内部有建设过这类基础应用可能会感触比较深，且各家多多少少都有类似的东西，需要必需品。社区的小伙伴可以多看看，结合自己的实际情况进行选型或融合。&lt;/p&gt;&#xA;&lt;p&gt;同时该类基础规范，最难的可能还是如何在企业内部达到大一统，做推广，拿规范，遵守则。&lt;/p&gt;&#xA;&lt;h2 id=&#34;go-云上微服务模式解构&#34;&gt;go 云上微服务模式解构&lt;/h2&gt;&#xA;&lt;p&gt;详细介绍了云原生的定义，主体讲解了 k8s 的基本网络模型，核心在于传统微服务模式和云原生模式下的各类优缺点和对比。&lt;/p&gt;&#xA;&lt;h3 id=&#34;edge-proxy&#34;&gt;Edge Proxy&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/0275954e8196ac7c687a1c58e1b4be23.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;servicemesh&#34;&gt;ServiceMesh&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/794182e59306fec93128765f1854a353.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;需要听讲者有一定的基础，整体语速相当快，口述内容也比较多，因此这块没有过多详细记述。&lt;/p&gt;&#xA;&lt;p&gt;演讲内容主体对应云原生下的几种部署模式，线上的话在网上查阅资料学习即可，可能会更高效些。&lt;/p&gt;&#xA;&lt;p&gt;印象比较深的是，讲师表述目前也没用 ServiceMesh，四年前也预演过，但问题不少，近期打算重新启动。这块我司也多次尝试，多多少少都有些问题，期待 Istio 更稳定成熟的一天。&lt;/p&gt;&#xA;&lt;h2 id=&#34;服务网格在边缘计算领域的实践与探索&#34;&gt;服务网格在边缘计算领域的实践与探索&lt;/h2&gt;&#xA;&lt;p&gt;主体介绍边缘计算相关的 KubeEdge、IEF 等技术体系：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/ddab54efbf97b478c4ea06c8a602dcef.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这块不是我的技术领域内，隔壁的小哥也没听懂，稍微有些乱，因此不过多的介绍。&lt;/p&gt;&#xA;&lt;p&gt;但发现讲师刚毕业一年多，年轻有为，潜力无限。&lt;/p&gt;&#xA;&lt;h2 id=&#34;腾讯大规模-etcd-集群治理与优化实践&#34;&gt;腾讯大规模 etcd 集群治理与优化实践&lt;/h2&gt;&#xA;&lt;p&gt;腾讯云近期推出了 etcd 的云服务，先前关注了一番。恰好这次的分享者就是相关人士。&lt;/p&gt;</description>
    </item>
    <item>
      <title>必知必会！计算机里一些基本又重要的概念</title>
      <link>https://note.lican.site/posts/posts/reading/programmer-accom-base/</link>
      <pubDate>Sat, 17 Oct 2020 00:25:59 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/reading/programmer-accom-base/</guid>
      <description>&lt;p&gt;最近在翻阅文章时，看到全成推荐的《程序员的自我修养》，这是一本讲链接、装载与库的计算机图书，看了下目录后觉得挺有意思。&lt;/p&gt;&#xA;&lt;p&gt;因此决定每读一章就将其读书笔记整理记录下来，分享给大家。&lt;/p&gt;&#xA;&lt;p&gt;目录：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/bf202dccad8c3f8efb3726854b72e850.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;不要让-cpu-打盹&#34;&gt;不要让 CPU 打盹&lt;/h2&gt;&#xA;&lt;p&gt;在计算机发展早期，CPU 资源十分昂贵。如果一个 CPU 只能运行一个程序，那么当程序在读写磁盘（进行 I/O 操作）时，CPU 就空闲下来了。这在当时简直就是巨大的浪费。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/df419c04c95fc7d58cc6f6f34a2fb7fd.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;CPU 只能和一个程序A “聊天“，其他来再多的程序BCD，都没有任何操作的空间。就像早年的手机，打电话和上网（语音/数据）只能二选一，作为 CPU 的你，并不能多线程操作。&lt;/p&gt;&#xA;&lt;p&gt;因此机智的人们很快就编写了一些监控程序，希望来解决这个问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;多道程序multiprogramming&#34;&gt;多道程序（Multiprogramming）&lt;/h3&gt;&#xA;&lt;p&gt;多道程序起，操作系统正式具有同时运行多个程序的能力。&lt;/p&gt;&#xA;&lt;p&gt;其是让 CPU 一次读取多个程序放入内存中。当某个程序暂时无须使用 CPU 时，监控程序就把另外的正在等待 CPU 资源的程序启动，以此使得 CPU 能够充分地利用起来。这种策略的确大大的提高了 CPU 资源的利用率。&lt;/p&gt;&#xA;&lt;h4 id=&#34;真实场景&#34;&gt;真实场景&lt;/h4&gt;&#xA;&lt;p&gt;你在 Windows 上点击鼠标 10 分钟以后系统才有反应，那是多么无奈的事情。因为没有优先级区分，自然一路排下来也就不知道要等到什么时候了，相当于半饿死。&lt;/p&gt;&#xA;&lt;h4 id=&#34;存在的问题&#34;&gt;存在的问题&lt;/h4&gt;&#xA;&lt;p&gt;核心问题在于程序之间的调度策略太粗糙。对于多道程序来删，程序之间部分轻重缓急，也就是说不存在优先级的区分。因此如果有些程序急需使用 CPU 来完成一些任务，那么很有可能会很长时间后才有机会被分配到 CPU，才得以继续往下运行。&lt;/p&gt;&#xA;&lt;h3 id=&#34;分时系统time-sharing-system&#34;&gt;分时系统（Time-Sharing System）&lt;/h3&gt;&#xA;&lt;p&gt;程序运行模式改为协作的模式，在原有的多道程序继续升级改造，即每个程序运行一段时间以后都主动让出 CPU 给其他程序，使得一段时间内每个程序都有机会运行一小段。&lt;/p&gt;&#xA;&lt;h4 id=&#34;真实场景-1&#34;&gt;真实场景&lt;/h4&gt;&#xA;&lt;p&gt;比如你点击一下鼠标或按下一个键盘按键后，他会相较前者能够更快的得到响应，因为他好歹是存在切换的可能性。&lt;/p&gt;&#xA;&lt;h4 id=&#34;存在问题&#34;&gt;存在问题&lt;/h4&gt;&#xA;&lt;p&gt;这时候的监控程序已经比原有多道程序的模式已经复杂了不少，完整的操作系统雏形已经基本形成，很早期的 Windows（Windows 95 和 Windows NT 之前），MacOS X 之前的 MacOS 版本都是采用这种分时系统的方式来进行程序调度。&lt;/p&gt;&#xA;&lt;p&gt;其仍然存在问题，核心在于若一个程序一直在进行一个耗时计算，便会一直霸占着 CPU 不放，那么操作系统也没有不放，就会导致其他程序都只能无限等待，相当于就是系统假死了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;多任务系统multi-tasking&#34;&gt;多任务系统（Multi-tasking）&lt;/h3&gt;&#xA;&lt;h4 id=&#34;背景&#34;&gt;背景&lt;/h4&gt;&#xA;&lt;p&gt;在分时系统中，一个程序死循环就会导致系统假死，并且其运行效率并不高，只能解决当时的交互式环境。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 应用程序是怎么运行起来的？</title>
      <link>https://note.lican.site/posts/posts/go/go-bootstrap/</link>
      <pubDate>Thu, 08 Oct 2020 15:57:18 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-bootstrap/</guid>
      <description>&lt;p&gt;自古应用程序均从 Hello World 开始，你我所写的 Go 语言亦然：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import &amp;#34;fmt&amp;#34;&#xA;&#xA;func main() {&#xA;&#x9;fmt.Println(&amp;#34;hello world.&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这段程序的输出结果为 &lt;code&gt;hello world.&lt;/code&gt;，就是这么的简单又直接。但这时候又不禁思考了起来，这个 &lt;code&gt;hello world.&lt;/code&gt; 是怎么输出来，经历了什么过程。&lt;/p&gt;&#xA;&lt;p&gt;真是非常的好奇，今天我们就通过这篇文章来一探究竟。&lt;/p&gt;&#xA;&lt;h2 id=&#34;引导阶段&#34;&gt;引导阶段&lt;/h2&gt;&#xA;&lt;h3 id=&#34;查找入口&#34;&gt;查找入口&lt;/h3&gt;&#xA;&lt;p&gt;开始剖析之路，首先编译上文提到的示例程序：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ GOFLAGS&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;-ldflags=-compressdwarf=false&amp;#34;&lt;/span&gt; go build &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在命令中指定了 GOFLAGS 参数，这是因为在 Go1.11 起，为了减少二进制文件大小，调试信息会被压缩。导致在 MacOS 上使用 gdb 时无法理解压缩的 DWARF 的含义是什么（而我恰恰就是用的 MacOS）。&lt;/p&gt;&#xA;&lt;p&gt;因此需要在本次调试中将其关闭，再使用 gdb 进行调试，以此达到观察的目的：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ gdb awesomeProject &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;gdb&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; info files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Symbols from &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/Users/eddycjy/go-application/awesomeProject/awesomeProject&amp;#34;&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Local exec file:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;`&lt;/span&gt;/Users/eddycjy/go-application/awesomeProject/awesomeProject&lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;&amp;#39;&lt;/span&gt;, file type mach-o-x86-64.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;Entry point: 0x1063c80&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;0x0000000001001000 - 0x00000000010a6aca is .text&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;gdb&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; b *0x1063c80&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Breakpoint &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt; at 0x1063c80: file /usr/local/Cellar/go/1.15/libexec/src/runtime/rt0_darwin_amd64.s, line 8.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;通过 Entry point 的调试，可看到真正的程序入口在 runtime 包中，不同的计算机架构指向不同，例如：MacOS 在 &lt;code&gt;src/runtime/rt0_darwin_amd64.s&lt;/code&gt;，Linux 在 &lt;code&gt;src/runtime/rt0_linux_amd64.s&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>带你快速了解：限流中的漏桶和令牌桶算法</title>
      <link>https://note.lican.site/posts/posts/microservice/leaky-token-buckets/</link>
      <pubDate>Tue, 06 Oct 2020 12:44:10 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/leaky-token-buckets/</guid>
      <description>&lt;p&gt;在前文 《限流熔断是什么，怎么做，不做行不行？》中针对 “限流” 动作，有提到流量控制其内部对应着两种常用的限流算法，分别是漏桶算法和令牌桶算法。因此会有的读者会好奇，这都是些啥？&lt;/p&gt;&#xA;&lt;p&gt;为了更进一步的了解 WHY，本文来快速探索一下，看看限流下的一些 “算法” 们到底有何作用，是为何成为流量控制的基石的？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/815f7524b5367149cc9c6725ee28cd12.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;理论上每一个对外/内提供功能的资源点，都需要进行一定的流量控制，否则在业务的持续迭代中，是有可能出现突发性流量的场景（就像年初所带来的一些行业突发转变，导致业务流量突然暴增）：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/c29272e53f9e125dbbfba133b3eea7c4.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;若没有进行限流，就会出现一些奇奇怪怪的问题点，实则就是系统无法承受这波流量，逐渐崩溃，走向系统假死。&lt;/p&gt;&#xA;&lt;h2 id=&#34;现实场景&#34;&gt;现实场景&lt;/h2&gt;&#xA;&lt;p&gt;最常见的现实场景就是日常随处可见的排插、插座，其内置的保险丝，也被称为电流保险丝，其主要是起过载保护作用，保险丝会在电流异常升高到一定的高度和热度的时候，自身熔断切断电流，从而起到保护电路安全运行的作用。&lt;/p&gt;&#xA;&lt;p&gt;因此真实世界中有许多与软件工程中的限流熔断的场景有异曲同工之处，也是为了控制量，超量就切断。你也可以想想现实生活中是否有遇到其他类似的例子呢？&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/23af65486fc991e1bd976c37626ccf18.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;漏桶算法leaky-bucket&#34;&gt;漏桶算法（Leaky Bucket）&lt;/h2&gt;&#xA;&lt;p&gt;漏桶算法（Leaky Bucket）是网络中流量整形（Traffic Shaping）或速率限制（Rate Limiting）时常用的一种算法，它的主要目的是控制数据注入到网络的速率，平滑网络上的突发流量。&lt;/p&gt;&#xA;&lt;p&gt;漏桶算法通过其算法调控了流量访问，使得突发流量可以被整形，去毛刺，变成一个相对缓和，以便为网络提供一个稳定的流量。&lt;/p&gt;&#xA;&lt;p&gt;漏桶算法的存储桶主要由三个参数定义，分别是：桶的容量、水从桶中流出的速率、桶的初始充满度。&lt;/p&gt;&#xA;&lt;p&gt;其核心理念就如字面意思：一个会漏水的桶。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/386bdd6a907a2130f5bfa74696817221.jpg&#34; alt=&#34;图片来自 geeksforgeeks&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;bursty-flow&#34;&gt;Bursty Flow&lt;/h3&gt;&#xA;&lt;p&gt;在上图中，水龙头代表着突发流量（Bursty Flow）。当网络中存在突发流量，且无任何调控时，就会出现像 Bursty Data 处类似的场景。主机以 12 Mbps 的速率发送数据，时间持续 2s，总计 24 Mbits 数据。随后主机暂停发送 5s，然后再以 2 Mbps 的速率发送数据 3s，最终总共发送了 6 Mbits 的数据。&lt;/p&gt;&#xA;&lt;p&gt;因此主机在 10s 内总共发送了 30 Mbits 的数据。但这里存在一个问题，就是数据的发送并不是平滑的，存在一个较大的波峰。若所有流量都是如此的传输方式，将会 “旱的旱死涝的涝死”，对系统并不是特别的友好。&lt;/p&gt;&#xA;&lt;h3 id=&#34;fixed-flow&#34;&gt;Fixed Flow&lt;/h3&gt;&#xA;&lt;p&gt;为了解决 Bursty Flow 场景的问题。漏桶（Leaky Bucket）出现了，漏桶具有固定的流出速率、固定的容量大小。&lt;/p&gt;&#xA;&lt;p&gt;在上图中，漏桶在相同的 10s 内以 3 Mbps 的速率持续发送数据来平滑流量。若水（流量）来的过猛，但水流（漏水）不够快时，其最终结果就是导致水直接溢出，呈现出来就是拒绝请求/排队等待的表现。另外当 Buckets 空时，是会出现一次性倒入达到 Bucket 容量限制的水的可能性，此时也可能会出现波峰。&lt;/p&gt;</description>
    </item>
    <item>
      <title>限流熔断是什么，怎么做，不做行不行？</title>
      <link>https://note.lican.site/posts/posts/microservice/flowcontrol-circuitbreaker/</link>
      <pubDate>Mon, 05 Oct 2020 13:24:16 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/flowcontrol-circuitbreaker/</guid>
      <description>&lt;p&gt;“在分布式应用中，最常见的问题是什么呢？”&lt;/p&gt;&#xA;&lt;p&gt;“一个分布式应用部署上去后，还要关注什么？”&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/8c42e87dd4f7f1c59431c6185f608699.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“这服务的远程调用依赖似乎有点多&amp;hellip;”&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在 &lt;a href=&#34;https://eddycjy.com/posts/microservice/linkage/&#34;&gt;《微服务的战争：级联故障和雪崩》&lt;/a&gt;中有提到，在一个分布式应用中，最常见，最有危险性之一的点就是级联故障所造成的雪崩，而其对应的解决方案为&lt;strong&gt;根据特定的规则/规律进行流量控制和熔断降级&lt;/strong&gt;，避免请求发生堆积，保护自身应用，也防止服务提供方进一步过载。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/79a7f8870edffd331432272cf5db2c46.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;简单来讲就是，要控制访问量的流量，要防各类调用的强/弱依赖，才能保护好应用程序的底线。&lt;/p&gt;&#xA;&lt;h2 id=&#34;诉求期望&#34;&gt;诉求，期望&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;诉求：作为一个业务，肯定是希望自家的应用程序，能够全年无休，最低限度也要有个 4 个 9，一出突发性大流量，在资源贫乏的窗口期，就马上能够自动恢复。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;期望：万丈高楼平地起，我们需要对应用程序进行流量控制、熔断降级。确保在特定的规则下，系统能够进行容错，只处理自己力所能及的请求。若有更一步诉求，再自动扩缩容，提高系统资源上限。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;解决方案&lt;/h2&gt;&#xA;&lt;p&gt;要如何解决这个问题呢，可以关注到问题的核心点是 “系统没有任何的保护的情况下”，因此核心就是让系统，让你的应用程序有流量控制的保护。一般含以下几个方面：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;来自端控制：在业务/流量网关处内置流量控制、熔断降级的外部插件，起到端控制的效果。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;来自集群/节点控制：在统一框架中内建流量控制、熔断降级的处理逻辑，起到集群/节点控制的效果。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;来自 Mesh 控制：通过 ServiceMesh 来实现流量控制、熔断降级。侵入性小，能带来多种控制模式，但有利有弊。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;以上的多种方式均可与内部的治理平台打通，且流量控制、熔断降级是不止面试应用程序的，就看资源埋点上如何设计、注入。常见有如下几种角度：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;资源的调用关系：例如远程调用，像是面向 HTTP、SQL、Redis、RPC 等调用均，另外针对文件句柄控制也可以。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;运行指标：例如 QPS、线程池、系统负载等。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;流量控制&#34;&gt;流量控制&lt;/h2&gt;&#xA;&lt;p&gt;在资源不变的情况下，系统所能提供的处理能力是有限的。而系统所面对的请求所到来的时间和量级往往是随机且不可控的。因此就会存在可能出现突发性流量，而在系统没有任何的保护的情况下，系统就会在数分钟内无法提供正常服务，常见过程为先是出现调用延迟，接着持续出现饱和度上升，最终假死。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/6a58406bb7c90355c82c5cb50f417f9a.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;流量控制一般常见的有两种方式，分别是：基于 QPS、基于并发隔离。&lt;/p&gt;&#xA;&lt;h3 id=&#34;基于-qps&#34;&gt;基于 QPS&lt;/h3&gt;&#xA;&lt;p&gt;最常用的流量控制场景，就是基于 QPS 来做流控，在一定的时间窗口内按照特定的规则达到所设定的阈值则进行调控：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/58f0d6fe0043963f6e40c1d73c8e019e.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;案例&#34;&gt;案例&lt;/h4&gt;&#xA;&lt;p&gt;在本文中借助 &lt;a href=&#34;https://github.com/alibaba/sentinel-golang&#34;&gt;sentinel-golang&lt;/a&gt; 来实现案例所需的诉求，代码如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import (&#xA;&#x9;...&#xA;&#x9;sentinel &amp;#34;github.com/alibaba/sentinel-golang/api&amp;#34;&#xA;&#x9;&amp;#34;github.com/alibaba/sentinel-golang/core/base&amp;#34;&#xA;&#x9;&amp;#34;github.com/alibaba/sentinel-golang/core/flow&amp;#34;&#xA;&#x9;&amp;#34;github.com/alibaba/sentinel-golang/util&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;_ = sentinel.InitDefault()&#xA;&#x9;_, _ = flow.LoadRules([]*flow.Rule{&#xA;&#x9;&#x9;{&#xA;&#x9;&#x9;&#x9;Resource:               &amp;#34;控制吃煎鱼的速度&amp;#34;,&#xA;&#x9;&#x9;&#x9;Threshold:              60,&#xA;&#x9;&#x9;&#x9;ControlBehavior:        flow.Reject,&#xA;&#x9;&#x9;},&#xA;&#x9;})&#xA;&#xA;&#x9;...&#xA;&#x9;e, b := sentinel.Entry(&amp;#34;控制吃煎鱼的速度&amp;#34;, sentinel.WithTrafficType(base.Inbound))&#xA;&#x9;if b != nil {&#xA;&#x9;    // Blocked&#xA;&#x9;} else {&#xA;&#x9;    // Passed&#xA;&#x9;    e.Exit()&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;总的来讲，上述规则结果就是 1s 内允许通过 60 个请求，超出的请求的处理策略为直接拒绝（Reject）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>想要4个9？本文告诉你监控告警如何做</title>
      <link>https://note.lican.site/posts/posts/microservice/monitor-alarm/</link>
      <pubDate>Sun, 13 Sep 2020 18:42:17 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/monitor-alarm/</guid>
      <description>&lt;p&gt;“你说说，没有仪表盘的车，你敢开吗？”&lt;/p&gt;&#xA;&lt;p&gt;“没有仪表盘的车开在路上，你怎么知道现在是什么情况？”&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/6e2774d84ddcdb2d73918e06575a07b7.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“客户说你这车又崩了，咋知道什么时候好的？​啥时候出的问题？”&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;将思考转换到现实的软件系统中，可想而知没有监控系统的情况下，也就是没有 ”仪表盘“ 的情况下实在是太可怕了。&lt;/p&gt;&#xA;&lt;p&gt;你的故障永远都是你的客户告诉你的，而&amp;hellip;在什么时候发生的，你也无法确定，只能通过客户的反馈倒推时间节点，最后从错误日志中得到相对完整的日志信息。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;p&gt;更要命的是你无法掌握主动权，错误日志有可能会有人漏记录，平均修复时间（MTTR）更不用想了，需要从 0.1 开始定位，先看 APP 是哪个模块报错，再猜测是哪个服务导致，再打开链路追踪系统，或是日志平台等。&lt;/p&gt;&#xA;&lt;p&gt;稍微复杂些的，排查来来往往基本都是半小时、一小时以上，那 4 个 9 肯定是达不到的了，以此几次 P0 几小时怕不是业务绩效也凉凉，因为故障修复的速度实在是太慢了。&lt;/p&gt;&#xA;&lt;p&gt;那归根到底，想破局怎么办，核心第一步就是要把监控告警的整个生态圈给建设好。&lt;/p&gt;&#xA;&lt;h2 id=&#34;监控定义&#34;&gt;监控定义&lt;/h2&gt;&#xA;&lt;p&gt;常说监控监控，监控的定义就是监测和控制，检测某些事物的变化，以便于进行控制。在常见的软件系统中，大多分为三大观察类别：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/b567a71921b7e54d703d9e47f491d6c0.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;业务逻辑：项目所对应的服务其承担的业务逻辑，通常需要对其进行度量。例如：每秒的下单数等。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;应用程序：应用程序。例如：统一的基础框架。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;硬件资源：服务器资源情况等。例如：Kubernetes 中的 Cadvisor 组件便会提供大量的资源指标。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;从软件系统来讲，监控的定义就是收集、处理、汇总，显示关于某个系统的实时量化数据，例如：请求的数量和类型，错误的数量和类型，以及各类调用/处理的耗时，应用服务的存活时间等。&lt;/p&gt;&#xA;&lt;h2 id=&#34;监控目标&#34;&gt;监控目标&lt;/h2&gt;&#xA;&lt;p&gt;知道了监控的定义，了解了监控的作用和具体的实施指标后。我们需要明确的知道，做监控的目标是什么：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/bab6275c4b7c73deec2d9f9919f967c7.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;从现实层面出发，做监控的初衷，就是希望能够及时的发现线上环境的各种各样奇奇怪怪的问题，为业务的正常运转保驾护航。因此整体分为上图四项：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;预测故障：故障还没出现，但存在异常。监控系统根据流量模型、数据分析、度量趋势来推算应用程序的异常趋势，推算可能出现故障的问题点。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;发现故障：故障已经出现，客户还没反馈到一线人员。监控系统根据真实的度量趋势来计算既有的告警规则，发现已经出现故障的问题点。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;定位故障：故障已经出现，需要监控系统协助快速定位问题，也就是根因定位（root cause）。此时是需要协调公司内生态圈的多个组件的，例如：链路追踪系统、日志平台、监控系统、治理平台（限流熔断等），根据监控系统所告警出来的问题作为起始锚点，对其进行有特定方向的分析，再形成 ”线索“ 报告，就可以大力的协助开发人员快速的定位问题，发现故障点。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;故障恢复：故障已经出现，但自动恢复了，又或是通过自动化自愈了。这种情况大多出现在告警规则的阈值配置的不够妥当，又或是第三方依赖恰好恢复了的场景。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;而更值得探讨的的是监控告警的后半段闭环，故障自愈，通过上述三点 “预测故障、发现故障、定位故障”，已经定位到故障了，就可以配合内部组件，实现自动化的 ”自愈“，减少人工介入，提高 MTTR。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/437e9d859ee86916f5d2d0bc409ab9f5.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;因此做监控系统的目标很明确，就是发现问题，解决问题，最好自愈，达到愉快休假，业务安心的目的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;4-个黄金指标&#34;&gt;4 个黄金指标&lt;/h2&gt;&#xA;&lt;p&gt;有定义，有目标，那指导呢。实际上 “业务逻辑、应用程序、硬件资源” 已经成为了一个监控系统所要监控构建的首要目标，绝大部分的监控场景都可以归类进来。且针对这三大项，《Google SRE 运维解密》 也总结出了 4 个黄金指标，在业界广为流传和借鉴：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;延迟：服务处理某个请求所需要的时间。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;区分成功和失败请求很重要，例如：某个由于数据库连接丢失或者其他后端问题造成的 HTTP 500 错误可能延迟很低。因此在计算整体延迟时，如果将 500 回复的延迟也计算在内，可能会产生误导性的结果。&lt;/li&gt;&#xA;&lt;li&gt;“慢” 错误要比 “快” 错误更糟糕。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;流量：使用系统中的某个高层次的指标针对系统负载需求所进行的度量。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go: A Documentary 发布！</title>
      <link>https://note.lican.site/posts/posts/reading/documentary-of-go/</link>
      <pubDate>Fri, 11 Sep 2020 20:46:38 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/reading/documentary-of-go/</guid>
      <description>&lt;p&gt;以前经常有读者问我，哪儿可以找到 Go 语言的前世今生，这种时候我们往往会告诉他去看 issues 和 proposals。但资料有点分散，且没有索引体系。因此不少人新入门的读者读着读着就跑偏了，又或是在第一步找资料上就被拦住了。&lt;/p&gt;&#xA;&lt;p&gt;最近欧神（@changkun）低调的发布了 《Go: A Documentary》，这个文档收集了 Go 开发过程中许多有趣（公开可见的）的问题，讨论，提案，CL 和演讲，其目的是为 Go 历史提供全面的参考。&lt;/p&gt;&#xA;&lt;p&gt;个人认为这份资料非常的有价值，相当于欧神把资料索引整理好了，强烈推荐对 Go 语言感兴趣的读者进行阅读：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/0643ae29cdb8fb99d5a83bf67b443a9a.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;内容索引主要分为：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Sources&lt;/li&gt;&#xA;&lt;li&gt;Committers&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Core Authors&lt;/li&gt;&#xA;&lt;li&gt;Compiler/Runtime Team&lt;/li&gt;&#xA;&lt;li&gt;Library/Tools/Security/Community&lt;/li&gt;&#xA;&lt;li&gt;Group Interviews&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Timeline&lt;/li&gt;&#xA;&lt;li&gt;Language Design&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Misc&lt;/li&gt;&#xA;&lt;li&gt;Slice&lt;/li&gt;&#xA;&lt;li&gt;Package Management (1.4, 1.5, 1.7)&lt;/li&gt;&#xA;&lt;li&gt;Type alias (1.9)&lt;/li&gt;&#xA;&lt;li&gt;Defer (1.13)&lt;/li&gt;&#xA;&lt;li&gt;Error values (1.13)&lt;/li&gt;&#xA;&lt;li&gt;Channel/Select&lt;/li&gt;&#xA;&lt;li&gt;Generics&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Compiler Toolchain&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Compiler&lt;/li&gt;&#xA;&lt;li&gt;Linker&lt;/li&gt;&#xA;&lt;li&gt;Debugger&lt;/li&gt;&#xA;&lt;li&gt;Tracer&lt;/li&gt;&#xA;&lt;li&gt;Builder&lt;/li&gt;&#xA;&lt;li&gt;Modules&lt;/li&gt;&#xA;&lt;li&gt;gopls&lt;/li&gt;&#xA;&lt;li&gt;Testing&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Runtime Core&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Statistics&lt;/li&gt;&#xA;&lt;li&gt;Scheduler&lt;/li&gt;&#xA;&lt;li&gt;Execution Stack&lt;/li&gt;&#xA;&lt;li&gt;Memory Allocator&lt;/li&gt;&#xA;&lt;li&gt;Garbage Collector&lt;/li&gt;&#xA;&lt;li&gt;Memory model&lt;/li&gt;&#xA;&lt;li&gt;ABI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Standard Library&#xA;&lt;ul&gt;&#xA;&lt;li&gt;syscall&lt;/li&gt;&#xA;&lt;li&gt;io&lt;/li&gt;&#xA;&lt;li&gt;go/*&lt;/li&gt;&#xA;&lt;li&gt;sync&lt;/li&gt;&#xA;&lt;li&gt;Pool&lt;/li&gt;&#xA;&lt;li&gt;Mutex&lt;/li&gt;&#xA;&lt;li&gt;atomic&lt;/li&gt;&#xA;&lt;li&gt;time&lt;/li&gt;&#xA;&lt;li&gt;context&lt;/li&gt;&#xA;&lt;li&gt;encoding&lt;/li&gt;&#xA;&lt;li&gt;image, x/image&lt;/li&gt;&#xA;&lt;li&gt;misc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Unclassified But Relevant Links&lt;/li&gt;&#xA;&lt;li&gt;Fun Facts&lt;/li&gt;&#xA;&lt;li&gt;Acknowledgements&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;《Go: A Documentary》 的访问地址是 &lt;code&gt;https://golang.design/history/&lt;/code&gt;，GitHub 仓库地址：&lt;code&gt;https://github.com/golang-design/history&lt;/code&gt;，大家也可以通过 “阅读原文” 进入。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微服务的灾难：端到端测试的痛苦</title>
      <link>https://note.lican.site/posts/posts/microservice/tests/</link>
      <pubDate>Thu, 10 Sep 2020 19:54:59 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/tests/</guid>
      <description>&lt;p&gt;大家好，我是煎鱼。&lt;/p&gt;&#xA;&lt;p&gt;小咸鱼经过前文所提到的折磨人的 “微服务拆分、微服务环境” 问题后，终于顺顺利利的上到了测试环境进行测试。&lt;/p&gt;&#xA;&lt;p&gt;这时候开发、测试同学又闹新的头疼了，测了一轮下来。发现好好的。结果发现一上生产就有一些地方有问题，发现没测到。&lt;/p&gt;&#xA;&lt;p&gt;这到底是为什么呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在以往，小咸鱼他们团队都是传统的大单体应用。也就是一体化应用，包含了前端、后端等模块，具备天然的协调性：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;测试同学能够很方便的就直接测到前后端接口。&lt;/li&gt;&#xA;&lt;li&gt;测试能够直接对系统本身进行集成测试。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;但现在，做了微服务化（雏形）后，小咸鱼他们就翻车了，为什么呢？&lt;/p&gt;&#xA;&lt;p&gt;因为考虑到微服务，微服务就是向往单拎一个服务出来，都可以独立修改，独立发布。于是小咸鱼提交了一个迭代的几个服务变更，想着实现一把 “敏捷” 发布。&lt;/p&gt;&#xA;&lt;p&gt;结果一上线就炸了，一大堆的 BUG，光荣加班到晚上 12 点。&lt;/p&gt;&#xA;&lt;p&gt;这实质上是缺乏端到端测试的一个问题，单服务，无法明确系统正在正常运行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;端到端测试&#34;&gt;端到端测试&lt;/h2&gt;&#xA;&lt;p&gt;在测试的质量保障上，我们要站在用户视角去验证这个系统，保障整体的系统可用性，而不是单纯的前端 BFF，又或是后端 Server 的某些接口能够正常运行。&lt;/p&gt;&#xA;&lt;p&gt;在定义上&lt;strong&gt;端到端测试（End-to-end Test）是一种用于测试整个应用程序的流程是否符合预期的测试技术&lt;/strong&gt;。测试同学会模拟用户真实的使用场景，通过用户界面测试应用程序。&lt;/p&gt;&#xA;&lt;p&gt;如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/5ca5b971d8e25cf41c648401489d47b4.jpg&#34; alt=&#34;端到端测试&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;与小咸鱼团队那种单纯只测接口的方式不同，端到端测试是面向业务的。&lt;/p&gt;&#xA;&lt;p&gt;其目的是&lt;strong&gt;验证应用程序系统整体上是否符合业务诉求&lt;/strong&gt;，主要通过 GUI 测试，也会有人称其为集成测试、系统测试，黑盒测试。不少公司会将这几种混在一起。&lt;/p&gt;&#xA;&lt;p&gt;实则在细节定义上各有不同：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://files.mdnice.com/user/3610/820d7fbb-e3aa-4e99-8898-d69fa242887b.png&#34; alt=&#34;图来自网络&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;本文不是测试方向文章，因此不深究。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题症结&#34;&gt;问题症结&lt;/h2&gt;&#xA;&lt;p&gt;那么小咸鱼他们团队主要是缺乏端到端的这类集成测试的校验。直接在迭代中，把几个微服务一改，接口跑几下，以为就是合理通过的了。&lt;/p&gt;&#xA;&lt;p&gt;真实情况：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;一上到生产，发现压根不是这么回事。因为多个变更结合在一起，很有可能会导致系统原有的行为发生改变。&lt;/li&gt;&#xA;&lt;li&gt;即使是你单个服务接口没违背，也不一定能保证其他在同个时段上的服务没问题。&lt;/li&gt;&#xA;&lt;li&gt;在业内执行情况来看，业务迭代的非常快，接口自动化大多比较缺乏。又或是以请外包人员的方式来做，大多是面向存量补接口。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我们可以知道单纯验证接口，不走端到端类别的集成测试，是非常风骚的。设身处地的想想如下场景：&lt;/p&gt;&#xA;&lt;p&gt;有没有见过一些开发，他在本地测好接口后，一和前端集成上到测试环境。测试人员，一点一个报错，正向流程压根跑不通。测试同学苦不堪言，开发同学一下身背数十 BUG，齐齐加班。&lt;/p&gt;&#xA;&lt;p&gt;但开发同学大呼我在本地的接口测试的完全没问题。归根结底，小咸鱼团队的问题，还是因为缺乏端到端测试，缺乏齐全的接口自动化用例导致的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决思路&#34;&gt;解决思路&lt;/h2&gt;&#xA;&lt;p&gt;在每个迭代中，实际上每个团队都会专注于系统中所使用的所有服务中的某个服务。&lt;/p&gt;&#xA;&lt;p&gt;系统中存在的大量微服务和子系统的功能和较窄的测试空间，有可能会导致没有发现系统或服务中存在的隐患。&lt;/p&gt;&#xA;&lt;p&gt;这样测试，问题的出现，甚至是必然的。&lt;/p&gt;&#xA;&lt;p&gt;在解决思路上常见于：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;新增预发布环境，做类似端到端测试的集成测试，确保系统集成后会是可用的。&lt;/li&gt;&#xA;&lt;li&gt;尝试更高覆盖率的接口自动化测试，大多数公司会针对新的，做增量或存量的自动化测试用例的补全。&lt;/li&gt;&#xA;&lt;li&gt;借助线上、线下数据在 CI/CD 时进行自动化测试，实现更全面真实的测试用例。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;业内基本是数种思路齐头并进，最常见的是第一种方式。最有效，但开销也是最大的，并且会导致预发布环境的一定阻塞。&lt;/p&gt;&#xA;&lt;p&gt;随后第二第三种大多都会紧接着跟进，具体程度会根据公司的软硬实力（例如：行政手段、基础设施等）不同而做的深度不同。&lt;/p&gt;&#xA;&lt;p&gt;甚至前几天听小咸鱼说，面试时还听到不少公司延伸了外包岗位专门做一块的内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;虽说这个问题并不是 “微服务” 架构所独有的。但是显然微服务化后放大了测试的深坑问题。&lt;/p&gt;&#xA;&lt;p&gt;很多公司的流程和措施都是为了保障一些东西，像小咸鱼团队这样，被网上布道师例举的优点遮蔽了双眼，后面又被迫把端到端测试加回来的不在少数。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;你们的团队又是如何高效解决这个问题的呢，欢迎在评论区留言和交流&lt;/strong&gt;！&lt;/p&gt;</description>
    </item>
    <item>
      <title>微服务的战争：选型？分布式链路追踪</title>
      <link>https://note.lican.site/posts/posts/microservice/tracing/</link>
      <pubDate>Thu, 10 Sep 2020 19:53:59 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/tracing/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;“微服务的战争” 是一个关于微服务设计思考的系列题材，主要是针对在微服务化后所出现的一些矛盾/冲突点，不涉及具体某一个知识点深入。如果你有任何问题或建议，欢迎随时交流。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;在经历 &lt;a href=&#34;https://eddycjy.com/posts/microservice/linkage/&#34;&gt;微服务的战争：级联故障和雪崩&lt;/a&gt; 的 P0 级别事件后，你小手一摊便葛优躺了。开始进行自我复盘，想起这次排查经历，由于现在什么基础设施都还没有，因此在接收到客户反馈后，你是通过错误日志进行问题检查的。&lt;/p&gt;&#xA;&lt;p&gt;但在级联错误中，错误日志产生的实在是太多了，不同的服务不同的链路几乎都挤在一起，修复时间都主要用在了翻日志上，翻了好几页才找到了相对有效的错误信息。&lt;/p&gt;&#xA;&lt;p&gt;如果下一次在出现类似的问题，可不得了，MTTR 太久了，4 个 9 很快就会用完。这时候你想到了业界里经常被提起的一个利器，那就是 “分布式链路追踪系统”。粗略来讲，能够看到各种应用的调用依赖：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/e233f218a90b7a00b94b7f533a98c0a2.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;其中最著名的是 &lt;a href=&#34;https://storage.googleapis.com/pub-tools-public-publication-data/pdf/36356.pdf&#34;&gt;Google Dapper&lt;/a&gt; 论文所介绍的 Dapper。源于 Google 为了解决可能由不同团队，不同语言，不同模块，部署在不同服务器，不同数据中心的所带来的软件复杂性（很难去分析，无法做定位），构建了一个的分布式跟踪系统：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/64214cb247989300859b98b61a844c2e.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;自此就开启了业界在分布式链路的启发/启蒙之路，很多现在出名的分布式链路追踪系统都是基于 Google Dapper 论文发展而来，基本原理和架构都大同小异。若对此有兴趣的可具体查看 &lt;a href=&#34;https://storage.googleapis.com/pub-tools-public-publication-data/pdf/36356.pdf&#34;&gt;Google Dapper&lt;/a&gt;，非常有意思。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/65bd2c9b931f057d7307dfaaa8d5c433.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;（Google Dapper 中存在跟踪树和 Span 的概念）&lt;/p&gt;&#xA;&lt;h2 id=&#34;选型有哪些&#34;&gt;选型？有哪些&lt;/h2&gt;&#xA;&lt;p&gt;想做链路追踪，那必然要挑选一款开源产品作为你的分布式链路追踪系统，不大可能再造一个全新的，先实现业务目的最重要。因此在网上一搜，发现如下大量产品：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Twitter：Zipkin。&lt;/li&gt;&#xA;&lt;li&gt;Uber：Jaeger。&lt;/li&gt;&#xA;&lt;li&gt;Elastic Stack：Elastic APM。&lt;/li&gt;&#xA;&lt;li&gt;Apache：SkyWalking（国内开源爱好者吴晟开源）。&lt;/li&gt;&#xA;&lt;li&gt;Naver：Pinpoint（韩国公司开发）。&lt;/li&gt;&#xA;&lt;li&gt;阿里：鹰眼。&lt;/li&gt;&#xA;&lt;li&gt;大众点评：Cat。&lt;/li&gt;&#xA;&lt;li&gt;京东：Hydra。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;随手一搜就发现这类产品特别的多，并且据闻各大公司都有自己的一套内部链路追踪系统，这下你可犯了大难。他们之间都是基于 Google Dapper 演进出来的，那本质上到底有什么区别，怎么延伸出这么多的新产品？&lt;/p&gt;&#xA;&lt;h3 id=&#34;jaeger&#34;&gt;Jaeger&lt;/h3&gt;&#xA;&lt;p&gt;首先看看由 Uber 开发的 Jaeger，Jaeger 目前由 Cloud Native Computing Foundation（CNCF）托管，是 CNCF 的第七个顶级项目（于 2019 年 10 月毕业）：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/1a672c2972602f1f154c1666c94e860a.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Jaeger Client：Jaeger 客户端，是 Jaeger 针对 OpenTracing API 的特定语言实现，可用于手动或通过与 OpenTracing 集成的各种现有开源框架（例如Flask，Dropwizard，gRPC等）来检测应用程序以进行分布式跟踪。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微服务的战争：级联故障和雪崩</title>
      <link>https://note.lican.site/posts/posts/microservice/linkage/</link>
      <pubDate>Tue, 25 Aug 2020 21:08:39 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/linkage/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;“微服务的战争” 是一个关于微服务设计思考的系列题材，主要是针对在微服务化后所出现的一些矛盾/冲突点，不涉及具体某一个知识点深入。如果你有任何问题或建议，欢迎随时交流。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;在 &lt;a href=&#34;https://eddycjy.com/posts/microservice/standardization/&#34;&gt;微服务的战争：统一且标准化&lt;/a&gt; 中，经过好几周与不同业务组不同事业部的跨部门讨论后，终于把初始的标准化方案给定下来了，大家欢快的使用起了内部的统一框架，疯狂的创建起了新服务，没隔多久服务调用链就变成了下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/97128d96a1a4b8ba1f765bf30134f529.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;服务间存在多次内部调用，服务 A =》服务 B =》服务 C =》服务D，而 服务 E =》 服务 B，服务 F =》服务 E，也就是存在着多个流量入口，且依赖相同的服务。&lt;/p&gt;&#xA;&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;服务与服务中，总存在业务服务，公共服务，基础服务等类型。但在某一个夜晚，突然发现 BFF 调用后端服务开始逐渐不正常，客户给你截图反馈问题，你发现有点问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/844d0d5a730a4c692d7d96912e1d710c.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;单从表现来看，你发现是 BFF 调用服务 A 极度缓慢，也不知道怎么了&amp;hellip;正当以为是服务 A 出问题，想着万能重启一下时。你在日志平台和链路追踪系统一看，发现了大量的错误日志和缓慢，让你略微震惊，一时间不知道从何下手。&lt;/p&gt;&#xA;&lt;p&gt;这可怎么办？&lt;/p&gt;&#xA;&lt;h2 id=&#34;级联故障和雪崩&#34;&gt;级联故障和雪崩&lt;/h2&gt;&#xA;&lt;p&gt;实际上这是一次很经典的级联故障，最终导致系统雪崩的情景再现。单从上述拓扑来看，问题点之一在于服务 B：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/51b18e7c80833fbe1dc13b3a3290940b.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;服务 B 本身作为服务 A 和服务 F 的两个流量入口必经之处，想必至少是一个公共服务，但他也依赖了其他多个服务。因此若服务 C 和服务 D 其中一个有问题，在没有熔断措施的情况下，就出现级联故障，系统逐渐崩盘，最后雪崩：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/2e7b0d94c32f3bd8f3f7168046671d2b.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;服务 D 所依赖的外部接口出现了故障，而他并没有做任何的控制，因此扩散到了所有调用到他的服务，自然也就包含服务 B，因此最终出现系统雪崩。&lt;/p&gt;&#xA;&lt;p&gt;这种最经典的是出现在默认 Go http client 调用没有设置 Timeout，从而只要出现一次故障，就足矣让记住这类 “坑”，毕竟崩的 ”慢“，错误日志还多。&lt;/p&gt;&#xA;&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;/h2&gt;&#xA;&lt;p&gt;常见的方式是&lt;strong&gt;根据特定的规则/规律进行熔断和降级&lt;/strong&gt;，避免请求发生堆积：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;超时时间控制。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;慢调用比例。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;错误比例。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;自适应（例如：负载情况等）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;当然，这也只是壮士断腕，后续措施还包含监控告警，通知对应的开发人员来处理。且需提前对被降级的模块进行业务逻辑进行处理等等，这样才能够比较柔和且快速地度过这一次危机。&lt;/p&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;总结&lt;/h2&gt;&#xA;&lt;p&gt;在分布式应用中，级联故障和雪崩是非常常见的，一些开发同学在模块设计时可能并没有意识到这块的问题，在微服务化后会一个不留神就碰到，因为其调用链变得特别的长且多。因此建议配套设施和限流熔断措施都应该及时跟上，否则面对一大堆的错误日志还是很无奈的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>微服务的战争：统一且标准化</title>
      <link>https://note.lican.site/posts/posts/microservice/standardization/</link>
      <pubDate>Sat, 22 Aug 2020 21:56:14 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/standardization/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;“微服务的战争” 是一个关于微服务设计思考的系列题材，主要是针对在微服务化后所出现的一些矛盾/冲突点，不涉及具体某一个知识点深入。如果你有任何问题或建议，欢迎随时交流。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/b70c37b40768191e5a6812096703a63f.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;开天辟地&#34;&gt;开天辟地&lt;/h2&gt;&#xA;&lt;p&gt;在远古开天辟地时，大单体转换成微服务化后，服务的数量越来越多。每起一个新的服务，就得把项目的目录结构，基础代码重新整理一遍，并且很有可能都是从最初的 template 上 ctrl+c，ctrl+v 复制出来的产物，如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/7b4642c2bb7af1e5656be047bc269fb6.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;但是基于 template 的模式，很快就会遇到各种各样的新问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/3c91559190480a348aeacd609199c2bb.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;随着跨事业部/业务组的使用增多，你根本不知道框架的 template 是什么时间节点被复制粘贴出去的，也不知道所对应的 commit-id 是什么，更不知道先前的 BUG 修复了没，也不知道有没有其他开发人员私下改过被复制走的 template。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，就是不具备可维护性，相对独立，BUG 可能一样，但却没有版本可规管。这时候，就可以选择做一个内部基础框架和对应的内部工具（已经有用户市场了），形成一个脚手架闭环：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/3787e41616779a91a3a052467b3acdee.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;通过基础工具+基础接口的方式，就可以解决项目A、B、C&amp;hellip;的基础框架版本管理和公共维护的问题，且在遇到框架 BUG 时，只需要直接 upgrade 就好了。而在框架维护者层面，还能通过注册机制知道目前基础框架的使用情况（例如：版本分布），便于后续的迭代和规划。&lt;/p&gt;&#xA;&lt;p&gt;同时若内部微服务依赖复杂，可以将脚手架直接 “升级”，再做多一层基础平台，通过 CI/CD 平台等关联创建应用，选择应用类型等基本信息，然后关联创建对应的应用模板、构建工具、网关、数据库、接口平台、初始化自动化用例等：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/0997fb71080b8f35fe0ccd68acaebc94.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;至此，就可以通过结合基础平台（例如：CI/CD）实现流程上的标准化控制，成为一个提效好帮手。&lt;/p&gt;&#xA;&lt;h2 id=&#34;大众创新&#34;&gt;大众创新&lt;/h2&gt;&#xA;&lt;p&gt;但，一切都有 “开天辟地” 那么顺利吗。实际上并不，在很多的公司中，大多数是在不同的时间阶段在不同的团队同时进行了多个开天辟地。&lt;/p&gt;&#xA;&lt;p&gt;更具现化来讲，就是在一家公司内，不同的团队里做出了多种基础工具和基础框架。更要命的是，他们几家的规范可能还不大一样。例如：框架在 gRPC 错误码的规范处理上的差异：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;业务错误码放在 grpc.status.details 中。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;业务错误码放在 grpc-status 中。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;业务错误码放在 grpc-message 中。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;又或是 HTTP 状态码的差异：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;HTTP Status Code 为金标准，不在主体定义业务错误码。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;HTTP Status Code 都为 200 OK（除宕机导致的 500，503 等），业务错误码由主体另外定义。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;粗略一看，单单在应用错误码/状态码这一件事情上，就能够玩出花样。而这件事又会导致各种问题，例如在监控平台上，因为不同团队所定义的状态码规范不一样，就会导致连基本的监控可用性都会有问题。&lt;/p&gt;&#xA;&lt;p&gt;像是有的小伙伴会把业务错误码放在 grpc-status 属性中，而在标准 gRPC 的规范中 grpc-status 是和 HTTP Status Code 一样有特定状态码映射的。这时候就会让监控告警系统十分难做，通用的告警规则到底是以哪份状态码为准？&lt;/p&gt;</description>
    </item>
    <item>
      <title>微服务的战争：按什么维度拆分服务</title>
      <link>https://note.lican.site/posts/posts/microservice/dismantle/</link>
      <pubDate>Wed, 19 Aug 2020 20:56:55 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/microservice/dismantle/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;“微服务的战争” 是一个关于微服务设计思考的系列题材，主要是针对在微服务化后所出现的一些矛盾/冲突点，不涉及具体某一个知识点深入。如果你有任何问题或建议，欢迎随时交流。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;微服务，这三个字正在席卷着目前的互联网软件行业，尤其在近几年云原生迸发后，似乎人人都对微服务有了更广泛的使用和理解，张口就是各种各样的问号，有着强大的好奇心。&lt;/p&gt;&#xA;&lt;p&gt;无独有偶，我有一个朋友鲤鱼在内部微服务的早期（每个业务组起步）就经常遇到下述的对话：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;张三&lt;/strong&gt;：为什么要拆现在的代码？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;鲤鱼&lt;/strong&gt;：因为 ！@&lt;em&gt;）&amp;amp;&amp;amp;#@&lt;/em&gt;！）&amp;amp;#！&amp;amp;）@！&amp;amp;！ 的原因。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;张三&lt;/strong&gt;：那即将要做的 “微服务” 是按照什么维度去拆分的服务？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;鲤鱼&lt;/strong&gt;：常见的一般根据 ！@#*@！#&amp;amp;！（@&amp;amp;！@）#@ 的方式来拆分。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;张三&lt;/strong&gt;：照你这么说好像也不大对，我看每个业务组拆分的维度似乎都不大一样？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;鲤鱼&lt;/strong&gt;：嗯，每个业务组还有自己的见解，不会完全相同。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;张三&lt;/strong&gt;：。。。所以微服务的拆分维度到底是什么？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;为什么想拆&#34;&gt;为什么想拆&lt;/h2&gt;&#xA;&lt;p&gt;为什么张三会有这个疑问呢，实际上是因为研发内部希望从原先的大单体，大仓库向微服务体系拆分转换，其原先大单体仓库结构，类 Monorepo：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/b61faf600a2648ecce258abfa7d57ce8.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;但类 Monorepo 又有不少的问题，像是：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;单个 Repo 体积过大&lt;/strong&gt;：导致 Git 无法直接拉取。当你设置完再拉取时，在网速慢时还能去泡杯咖啡，并且在开发机性能不佳的情况下，IDE 会比较卡，代码运行起来也慢。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;单个 Repo 存在公共函数/SDK&lt;/strong&gt;：在代码仓库中，必然存在公共依赖。因此在解决代码冲突时，若遗留了冲突符，且在动态语言中，不涉及便运行正常。但其实在上线后却又影响到其他业务，可真是糟糕透顶，分分钟被迫抱着事故。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;单个 Repo 模块职责/边界不清&lt;/strong&gt;：在实际的软件开发中，涉及数十个业务组同时在一个大 Repo 下进行开发，没有强控边界的情况下，往往会逐渐模糊，即使在设计时管得住自己，你也不一定能 100% 防止别人模糊你的边界。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;单个 Repo 包含了所有的源码&lt;/strong&gt;：出现公司源代码泄露时，会导致整个 Repo 外泄，相当的刺激和具有教育意义。因为虽然开放和协同了，不属于你们组的业务代码你也有权限查看了。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;当然，Monorepo 是否又完全不可行呢？实际上国外 Google，Facebook，Twitter 等公司都有在使用 Monorepo，并取得了一定的收益。&lt;/p&gt;&#xA;&lt;p&gt;其实做 Monorepo 是需要相应的大量工具支撑，若单纯只是一个 Repo 塞多个模块，基本都做不好，甚至引火烧身。还不如早早拆开，至少能确保各业务线服务的相对独立性。&lt;/p&gt;&#xA;&lt;h2 id=&#34;拆成什么样&#34;&gt;拆成什么样&lt;/h2&gt;&#xA;&lt;p&gt;张三在明白了拆的原因后，就出现了第二个问题，那就是 “微服务” 要按照什么样的维度去拆分服务？&lt;/p&gt;&#xA;&lt;p&gt;张三公司内部对于这块的知识处于模糊不清的阶段，因此需要进行深入了解，便于后续的团队共识和方法论建立，理所当然，十万个为什么也就出现了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;大单体变独立服务&#34;&gt;大单体变独立服务&lt;/h3&gt;&#xA;&lt;p&gt;最常见的拆分的方式是按照业务模块进行服务的拆解，像是前文所提到的业务模块，在设计上边界非常清晰，这种情况直接拆成各个服务就可以了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/9fe68c7e07a732686240243376da5fcb.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;而在拆分后，又会遇到一个新的问题，也就是张三问第三个问题 “每个业务组拆分的维度似乎都不大一样？”。&lt;/p&gt;&#xA;&lt;p&gt;因为在实际的执行过程中，严谨一些会由 SM 与 RD 一同开会探讨/规范初版的服务划分，而在持续的快速的迭代中，往往新服务的拆分都是由一线 RD 亲自操刀。&lt;/p&gt;</description>
    </item>
    <item>
      <title>新书《Go语言编程之旅：一起用Go做项目》出版啦！</title>
      <link>https://note.lican.site/posts/posts/go-programming-tour-book/</link>
      <pubDate>Fri, 03 Jul 2020 21:06:33 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/go-programming-tour-book/</guid>
      <description>&lt;p&gt;从我开始写技术文章起，不知不觉近三年过去了，咨询和催我出书和读者逐年递增，在 2019 年算是达到一个高峰。当然，综合考虑下我也是一直拒绝的，觉得火候还不够。&lt;/p&gt;&#xA;&lt;p&gt;直至 2019.09 月，polaris 主动找到了我，说有事情想找我商量，本着 “如果你在纠结一件事情做还是不做，不如先做了看看结果，至少不会后悔” 的想法，更何况是长期被 Ping，因此我一口答应下来，故事自此开始了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/04737f7b3e5567224fd2bc93f352203d.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;本书定位&#34;&gt;本书定位&lt;/h2&gt;&#xA;&lt;p&gt;本书不直接介绍 Go 语言的语法基础，内容将面向项目实践，同时会针对核心细节进行分析。而在实际项目迭代中，常常会出现或多或少的事故，因此本书也针对 Go 语言的大杀器（分析工具）以及常见问题进行了全面讲解。&lt;/p&gt;&#xA;&lt;p&gt;本书适合已经大致学习了 Go 语言的基础语法后，想要跨越到下一个阶段的开发人员，可以填补该阶段的空白和进一步拓展你的思维方向。&lt;/p&gt;&#xA;&lt;h2 id=&#34;读者定位&#34;&gt;读者定位&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;基本了解 Go 语言的语法和使用方式的开发人员。&lt;/li&gt;&#xA;&lt;li&gt;想要进行 Go 相关项目实践和进一步摸索的开发人员。&lt;/li&gt;&#xA;&lt;li&gt;希望熟悉 Go 常用分析工具的开发人员。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本书大纲&#34;&gt;本书大纲&lt;/h2&gt;&#xA;&lt;p&gt;本书针对常见的项目类型，主要细分为 5 + 1 板块，分别是命令行、HTTP、RPC、Websocket 应用、进程内缓存以及 Go 中的大杀器。&lt;/p&gt;&#xA;&lt;p&gt;同时我们在项目开发、细节分析、运行时分析等方方面面都进行了较深入的介绍和说明，能够为 Go 语言开发者提供相对完整的项目实践经验，而如果深入阅读第六章的章节，更能够为未来各类问题出现时的问题排查提供一份强大的知识板块。&lt;/p&gt;&#xA;&lt;p&gt;如下为本书的思维导图概览：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/e5eafb17140fdc06830b838eb7fb0468.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何阅读这本书&#34;&gt;如何阅读这本书&lt;/h2&gt;&#xA;&lt;p&gt;常规的列目录未免太无趣。我想不如说说从我个人的角度，所看到读者们在近 3 年来是如何阅读/实践我的实践系列文章的，其面向的读者群体是完全一致的。希望能够从另外一个角度告诉你，应当如何阅读这本书，尽可能的效益最大化。&lt;/p&gt;&#xA;&lt;p&gt;首先，图书，买来要读，而与实战结合的图书，势必需要实践，实践最常见又分为脑内思考和上机实践：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/a6faa89061d62be755b715607e2563b8.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;而在持续的交流中，可以发现至少会延伸出以下几类深入层次的不同：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/e3b17b0867e66bda4b5c6fb24ddcebc9.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一层&lt;/strong&gt;：只阅读，留有印象，需要时再唤醒，也行。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二层&lt;/strong&gt;：阅读并实践，实打实的完成项目实践，收获丰满。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第三层&lt;/strong&gt;：实践的过程中，&lt;strong&gt;一定会遇到或大或小的问题&lt;/strong&gt;，有的人会放弃，这就是分叉点。但有的读者会持续排查，其提升了个人能力（排错能力很重要）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第四层&lt;/strong&gt;：实践完毕后，有自己的想法，认为某某地方还可以这样，也可以再实现更多的功能，举一反三，进一步拓展，并对项目提 issues 或进行 pr。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第五层&lt;/strong&gt;：完成整体项目后，抽离业务代码，标准化框架，实现框架的应用脚手架，并有的读者会进一步开源。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第六层&lt;/strong&gt;：形成脚手架后，在自己业务组开始落地，实际在项目中使用，由业务学习转化为企业实践。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;第七层&lt;/strong&gt;：在内部落地实践稳妥后，开始在其它业务组开始推广该框架脚手架，进一步标准化，拓展思路。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;通过上图中 “七层金字塔” 的理解，我们不难发现其对于实践项目的理解和应用已经不再是单单这个项目，而是有了更深远的意义，抽象一下，对照着著名的 “学习效率金字塔” 来看：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/a35394d0ab562efaac8367c3eeff4b07.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在单纯的 “阅读” 时，其基本处于 “被动学习” 的阶段，而单进入阅读并实践时，已经转为了 “主动学习”，且绝大部分的读者做完实践后，表示 “嗯，实践完，挺好的，有所得”。&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么容器内存占用居高不下，频频 OOM（续）</title>
      <link>https://note.lican.site/posts/posts/why-container-memory-exceed2/</link>
      <pubDate>Fri, 19 Jun 2020 21:29:08 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/why-container-memory-exceed2/</guid>
      <description>&lt;p&gt;在上周的文章&lt;a href=&#34;https://note.lican.site/posts/why-container-memory-exceed/&#34;&gt;《为什么容器内存占用居高不下，频频 OOM》&lt;/a&gt; 中，我根据现状进行了分析和说明，收到了很多读者的建议和疑惑，因此有了这一篇文章，包含更进一步的说明和排查。&lt;/p&gt;&#xA;&lt;h2 id=&#34;疑问&#34;&gt;疑问&lt;/h2&gt;&#xA;&lt;p&gt;一般系统内存过高的情况下，可以通过 &lt;code&gt;free -m&lt;/code&gt; 查看当前系统的内存使用情况：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/daf2a1d53f4bf0f21e315d2333e08159.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在发现是系统内存占用高后，就会有读者会提到，为什么不 “手动清理 Cache”，因为 Cache 高的话，可以通过 drop_caches 的方式来清理：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;清理 page cache：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ echo 1 &amp;gt; /proc/sys/vm/drop_caches&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;清理 dentries 和 inodes：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ echo 2 &amp;gt; /proc/sys/vm/drop_caches&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;清理 page cache、dentries 和 inodes：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ echo &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &amp;gt; /proc/sys/vm/drop_caches&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但新问题又出现了，因为我们的命题是在容器中，在 Kubernetes 中，若执行 drop_caches 相关命令，将会对 Node 节点上的所有其他应用程序产生影响，尤其是那些占用大量 IO 并由于缓冲区高速缓存而获得更好性能的应用程序，可能会产生 “负面” 后果。&lt;/p&gt;&#xA;&lt;p&gt;我想这并不是一个好办法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;表象&#34;&gt;表象&lt;/h2&gt;&#xA;&lt;p&gt;回归原始，那就是为什么要排查这个问题，本质原因就是容器设置了 Memory Limits，而容器在运行中达到了 Limits 上限，被 OOM 掉了，所以我们想知道为什么会出现这个情况。&lt;/p&gt;&#xA;&lt;p&gt;在前文中我们针对了五大类情况进行了猜想：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;频繁申请重复对象。&lt;/li&gt;&#xA;&lt;li&gt;不知名内存泄露。&lt;/li&gt;&#xA;&lt;li&gt;madvise 策略变更。&lt;/li&gt;&#xA;&lt;li&gt;监控/判别条件有问题。&lt;/li&gt;&#xA;&lt;li&gt;容器环境的机制。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在逐一排除后，后续发现容器的 Memory OOM 判定标准是 container_memory_working_set_bytes 指标，其实际组成为 RSS + Cache（最近访问的内存、脏内存和内核内存）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-three</title>
      <link>https://note.lican.site/project/share3/</link>
      <pubDate>Thu, 18 Jun 2020 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share3/</guid>
      <description>&lt;h3 id=&#34;目录das-d-asd-asd&#34;&gt;目录das d asd asd&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#2020-%E5%B9%B4%E5%A4%8D%E7%9B%98&#34;&gt;2020 年复盘&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#java&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#python&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%89%8D%E7%AB%AF&#34;&gt;前端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%B7%A5%E5%85%B7&#34;&gt;工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%A7%BB%E5%8A%A8%E7%AB%AF&#34;&gt;移动端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7&#34;&gt;命令行工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#chrome-%E6%8F%92%E4%BB%B6&#34;&gt;Chrome 插件&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#vscode-%E6%8F%92%E4%BB%B6&#34;&gt;VSCode 插件&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E9%9B%86%E5%90%88&#34;&gt;资料集合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E9%9D%A2%E8%AF%95%E8%B5%84%E6%96%99&#34;&gt;面试资料&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&#34;&gt;机器学习/人工智能&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D%E6%95%99%E7%A8%8B&#34;&gt;开源书籍/教程&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%9B%BE%E6%A0%87%E5%BA%93&#34;&gt;图标库&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%89%E8%B6%A3%E7%BD%91%E7%AB%99&#34;&gt;有趣网站&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E4%BB%96&#34;&gt;其他&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%A3%B0%E6%98%8E&#34;&gt;声明&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;java&#34;&gt;Java&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/newbee-ltd/newbee-mall&#34;&gt;newbee-mall&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套基于 Spring Boot 2.X 开发的电商系统，含有功能完备、流程完整的前台商城系统及后台管理系统，适合各个阶段的 Java 开发者学习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvI0r43EV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thingsboard/thingsboard&#34;&gt;thingsboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Java 编写的物联网开源平台，可用于数据收集、处理、可视化与设备管理等应用场景&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JuWPAiy55&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/williamfiset/Algorithms&#34;&gt;Algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于学习算法与数据结构的 Java 项目，里面涵盖了数据结构、动态规划、几何、图论、线性代数、数学、搜索算法、排序算法等常见算法的具体代码实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjG1O2L5O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/h2pl/Java-Tutorial&#34;&gt;Java-Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Java 工程师学习指南，里面涵盖大部分 Java 程序员所需要掌握的核心知识，其中有 Java 基础、JavaWeb、Java进阶、计算机基础、数据库、缓存、消息队列、大后端、分布式、面试资料等等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jj5uSxj8H&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fuzhengwei/CodeGuide&#34;&gt;CodeGuide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Java 学习资料，里面包含了手写 RPC 框架、JVM 实现、SpringCloud 入门案例、SpringBoot 中间件开发、服务框架搭建等多个 Java 技术专题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JbJrRkKXW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thingsboard/thingsboard&#34;&gt;thingsboard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Java 编写的物联网开源平台，可用于数据收集、处理、可视化与设备管理等应用场景&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J8pe00N54&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xkcoding/spring-boot-demo&#34;&gt;spring-boot-demo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;共收录了数十个与 Spring Boot 相关的 Demo 项目，其中包含可视化监控、日志、统一异常处理、模板引擎、ORM 框架、邮件发送、消息队列等分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1nZK4eQC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/seaswalker/spring-analysis&#34;&gt;spring-analysis&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位开发者将其整理的 Spring 框架源码阅读笔记，包含了 spring-core、spring-aop、spring-context、spring-task、spring-transaction、spring-mvc、guava-cache 等多个 Spring 组件的源码解读&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1iGXwsBc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/looly/hutool&#34;&gt;hutool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的开源 Java 工具包，对文件、流、加密解密、转码、正则、线程、XML 等 JDK 方法进行合理封装&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IBD8JFxMv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/crossoverJie/JCSprout&#34;&gt;JCSprout&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Java 核心知识库，内容涉猎集合、多线程、JVM、分布式、架构设计等分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IBaRf8xbt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aalansehaiyang/technology-talk&#34;&gt;technology-talk&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要汇总了 Java 生态圈常用技术框架、开源中间件，系统架构、数据库、大公司架构案例、常用三方类库等知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IAXvcoK0r&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/newbee-ltd/newbee-mall&#34;&gt;newbee-mall&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套基于 Spring Boot 2.X 开发的电商系统，含有功能完备、流程完整的前台商城系统及后台管理系统，适合各个阶段的 Java 开发者学习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IpyrY0ISC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Perye/dokit&#34;&gt;dokit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Spring Boot2、Vue 前后端分离的管理系统，支持数据字典与数据权限管理、一键生成前后端代码、支持前端菜单动态路由等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Iofx2eKxD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Snailclimb/awesome-java&#34;&gt;awesome-java&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了 GitHub 上非常棒的 Java 开源项目集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Io2zlrepJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Col-E/Recaf&#34;&gt;Recaf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简洁易用的现代化 Java 字节码编辑器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAJ4stkf9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;python&#34;&gt;Python&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dcajasn/Riskfolio-Lib&#34;&gt;Riskfolio-Lib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于定量战略资产配置与投资组合优化&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAzQ9f2mO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huanghyw/jd_seckill&#34;&gt;jd_seckill&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;能帮你抢某东上的茅台的 Python 脚本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JApAiqaJi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/r0ysue/r0capture&#34;&gt;r0capture&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;适用于 Android 系统的开源应用层抓包脚本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jwt6yvC5T&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/martinRenou/ipycanvas&#34;&gt;ipycanvas&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可应用于 Jupyter 的可交互式画布，通过对接浏览器的 Canvas API，便可使用 Python 绘制简单的文本、线条、多边形、弧线等图形&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvXhSAH74&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Rockyzsu/stock&#34;&gt;stock&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的量化交易代码与策略项目，带你 30 天掌握量化交易，更好的帮助自己炒股 (亏钱 -。-)&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvxlVoLhn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34;&gt;rich&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持在终端输出添加各种颜色和不同风格，绘制各种漂亮的表格、进度条、显示 Markdown 文本、高亮语法代码等功能，完善 Python 控制台的输出体验，&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvnW1w86A&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/toolgood/ToolGood.Words&#34;&gt;ToolGood.Words&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高性能非法词 (敏感词) 检测组件，附带繁体简体互换，支持全角半角互换，获取拼音首字母，获取拼音字母，拼音模糊搜索等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JuqCyE49D&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wisdompeak/LeetCode&#34;&gt;LeetCode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 C++/Pyhton 相关的 LeetCode 算法题解。包含了二分查找、哈希表、链表、堆栈、动态编程等技术点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ju7Lzjjvl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alirezamika/autoscraper&#34;&gt;autoscraper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个智能 Web 爬虫脚本，其主要作用，是能快速且智能获取指定网站上的数据，这些数据可以是网页文本、url 地址或者其它 HTML 元素&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtH3uBH8h&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datapane/datapane&#34;&gt;datapane&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开发者可用它快速从常见对象（如 pandas DataFrames）上快速构建数据分析报告&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jt5lvr9OD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JerBouma/FundamentalAnalysis&#34;&gt;FundamentalAnalysis&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于分析公司基本面的 Python 扩展包，里面收集了 13000 多家创办 20 年以上公司的简介、财务报表、各类比率和股票数据等信息&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jn0fFn0x3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lux-org/lux&#34;&gt;lux&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的 Python 库，通过自动化数据的探索流程，让你能更轻松的玩转数据科学&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jm5GGunkj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/deepklarity/jupyter-text2code&#34;&gt;jupyter-text2code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开发者神器，可在 Jupyter 上快速将文本描述转化为 Python 代码，为数据分析人员减少大量编写代码的时间&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkSgJeDf9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alirezamika/autoscraper&#34;&gt;autoscraper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个智能 Web 爬虫脚本，其主要作用，是能快速且智能获取指定网站上的数据，这些数据可以是网页文本、url 地址或者其它 HTML 元素&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjQDm8xbM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/UlionTse/translators&#34;&gt;translators&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的 Python 翻译工具库，该库集成了谷歌、必应、有道、百度等多个翻译平台 API，支持上百种语言翻译，使用便捷，配置灵活&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ji8zMcAoY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/connorferster/handcalcs&#34;&gt;handcalcs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将 Python 计算公式代码快速转换为 Latex 公式，平方根、三角函数等计算方式一应俱全&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JgriUwb6l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/odashi/latexify_py&#34;&gt;latexify_py&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速将 Python 函数快速转为 LaTeX 数学公式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfyjkF8Qy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pythonstock/stock&#34;&gt;stock&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Python 的股票系统，支持 Docker 部署、数据定时爬取、更新、缓存与可视化展示等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JcvLp9nCo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JaidedAI/EasyOCR&#34;&gt;EasyOCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让 Python 开发者可以更加高效便捷的集成图像文字识别功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JavDx8D1x&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coodict/python3-in-one-pic&#34;&gt;python3-in-one-pic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一张图帮你理清 Python3 的相关知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J98N47HwR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wbt5/real-url&#34;&gt;real-url&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可帮助你快速获取当前主流直播平台的真实流媒体地址 (直播源) 和弹幕信息&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7WWvsgVL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/twintproject/twint&#34;&gt;twint&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;爬取某个 Twitter 用户的公开信息&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7FgzivDm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dataabc/weiboSpider&#34;&gt;weiboSpider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一名开发者在 GitHub 上开源了一个 Python 爬虫，可用于爬取用户公开的微博数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7cZ53MtR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Teraskull/PyDebloatX&#34;&gt;PyDebloatX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Python GUI 开源工具，可用于卸载 Windows 10 默认应用程序&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J47GG6fup&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kotartemiy/newscatcher&#34;&gt;newscatcher&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于收集大多数网站的新闻资讯，并统一格式，用户可根据所在地区、语言与主题进行过滤筛选&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J36rGcuc8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mingrammer/diagrams&#34;&gt;diagrams&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过 Python 代码来快速生成系统架构图，使其操作起来更加便捷，可支持 AWS、Azure、GCP、K8s、阿里云、Oracle 云等 6 大主流供应商&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1Iq9edhL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Baekalfen/PyBoy&#34;&gt;PyBoy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Python 的 Game Boy 模拟器，像超级马里奥、口袋妖怪等耳熟能详的游戏都可以在上面完美运行&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IEiU8bShk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zpoint/CPython-Internals&#34;&gt;CPython-Internals&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 CPython 源码阅读笔记，作者很用心的通过多图来展示底层实现细节，尽可能的给大家讲清楚&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Iow1Ub9ME&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/life4/textdistance&#34;&gt;textdistance&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源库含有 30+ 种纯 Python 算法用于比较两个或多个序列之间的距离&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Io66xo6ns&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;前端&#34;&gt;前端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/woai3c/visual-drag-demo&#34;&gt;visual-drag-demo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简易版的前端可视化拖拽组件库，主要允许用户在 Web 页面上对各个组件进行拖拽、编辑以及样式调整&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAhY2rDub&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ly525/luban-h5&#34;&gt;luban-h5&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;鲁班 H5，类似易企秀的 H5 制作、建站工具、可视化搭建系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzOvu1jbI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Jannchie/anichart.js&#34;&gt;anichart.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可帮助你快速制作数据可视化动画视频&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzM9mcXFp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/h2oai/wave&#34;&gt;wave&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套可用于构建实时 Web 项目与仪表面板的工具，采用 Python 编写，拥有低延迟、优雅美观、实时分析等亮点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jz3mZqhos&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jyolo/wLogger&#34;&gt;wLogger&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款集日志采集、日志解析持久化存储、Web 流量实时监控，三位一体的 Web 服务流量监控应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JynJtD0wV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mapbox/mapbox-gl-js&#34;&gt;mapbox-gl-js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的 JavaScript 库，可帮助开发者快速构建可交互、可定义的矢量地图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jyh3sdkxf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cypress-io/cypress&#34;&gt;cypress&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Web 自动化测试工具，拥有完整的端到端测试流程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jyabiu9b5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bytefury/crater&#34;&gt;crater&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源的 Web 与移动端发票应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jxx62bXQx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jerosoler/Drawflow&#34;&gt;Drawflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可帮你快速创建数据流，支持节点拖拽、多重连接、数据节点同步、数据模块清除、移动端设备友好等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxmGHny4n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Yin-Hongwei/music-website&#34;&gt;music-website&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的音乐网站管理系统，实现了歌单、播放器、用户及音乐管理等常用功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwT1VwRQC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/felixpalmer/procedural-gl-js&#34;&gt;procedural-gl-js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于制作 3D 地图的 JavaScript 开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvE2xt4ED&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/animockup&#34;&gt;animockup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 JavaScript 开发，让用户能在浏览器中快速构建动画模型，且支持导出成视频或 gif 动图，整体功能较完善&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jvp7576Rx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sivan/heti&#34;&gt;heti&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内有位开发者在 GitHub 上设计了一个专用于中文内容展示的排版样式，主要基于通用的中文排版规范&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtSQ7eUtk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sparrow-js/sparrow&#34;&gt;sparrow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的场景化、低代码（LowCode）搭建工作台：sparrow，可实时输出源代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtqAIDs2u&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MrXujiang/h5-Dooring&#34;&gt;h5-Dooring&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大的开源 H5 可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的 H5 落地页最佳实践&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jt6wzqjL8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/presenta-software/presenta-lib&#34;&gt;presenta-lib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 JavaScript 库，可帮助你快速制作出富有表现张力的 Web 演示文稿（PPT）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsOQDBPOA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/danielcaldas/react-d3-graph&#34;&gt;react-d3-graph&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可帮助前端开发者轻松使用 React 和 d3 快速创建可交互和可配置的图形，提升开发效率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsnWnAnA4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vega/vega-lite&#34;&gt;vega-lite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;它提供了一种交互式图形语法，让用户仅需通过几行简单的 JSON 配置，便能生成各种可视化交互数据图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrHjZblIi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/prabhuignoto/react-chrono&#34;&gt;react-chrono&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;React 组件可帮你创建多种样式丰富的时间轴，支持以水平、垂直、树状等不同形式进行渲染，并可用幻灯片交互播放&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqEvAdsFX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Leniolabs/layoutit-grid&#34;&gt;layoutit-grid&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速生成页面「网格布局」的 CSS 及 HTML 代码，配置灵活，操作简单&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JpWUpE3hU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KaTeX/KaTeX&#34;&gt;KaTeX&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的数学公式排版 JavaScript 库，使用简单，无其它依赖，针对数学公式的渲染更快，支持同步呈现其数学运算，无需重新排版页面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoRJKogyD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/florinpop17/10-projects-10-hours&#34;&gt;10-projects-10-hours&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外有个小哥开启了尝试用 10 小时完成 10 个前端项目的挑战，包含了计时器、问卷调查、食谱应用、笔记应用、待办事项、电影应用、GitHub 个人资料页面、绘图应用、密码生成器和天气应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjDhkejtO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bradtraversy/vanillawebprojects&#34;&gt;vanillawebprojects&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一共含有 20 个纯使用 HTML5，CSS 和 JavaScript 实现的小 Demo，这当中有表单验证、电影座位预订、汇率计算器、音乐播放器、打字游戏、新年倒计时等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjkqkypSJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/elsewhencode/project-guidelines/blob/master/README-zh.md&#34;&gt;project-guidelines&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 JavaScript 项目规范指南，国外一家公司在自家多个 JavaScript 项目里总结出来最佳实践&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JikmowQTr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/airbnb/ts-migrate&#34;&gt;ts-migrate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款前端工具，其主要作用是可将 JavaScript 代码快速迁移为 TypeScript 代码，以便节省前端工程师的时间成本，统一开发环境&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jh4MteGkC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/carlelieser/tiper-js&#34;&gt;tiper-js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 JavaScript 库，可在网页上模拟真人打字时的展示动画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JecDVumeN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mengshukeji/luckysheet&#34;&gt;luckysheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款纯前端实现的，类似 Excel 的在线表格，功能强大、配置简单、完全开源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdRqOgRdu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coodict/javascript-in-one-pic/blob/master/README-zh.md&#34;&gt;javascript-in-one-pic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一张图帮你理清 JavaScript 的相关知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J9tdtjINX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/responsively-org/responsively-app&#34;&gt;responsively-app&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了帮助工程师更好的实现 Web 响应式页面开发，提升开发效率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J37CMrGae&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phuoc-ng/1loc&#34;&gt;1loc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了共计 126 个 JavaScript 代码片段，其中包含对数组、日期、函数、DOM 等常见代码模块的组件实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1Bv9oQcO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liriliri/eruda/blob/master/doc/README_CN.md&#34;&gt;eruda&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源的前端页面调试神器，一个专为手机前端页面设计的调试面板，类似 DevTools 的迷你版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IFmTBxo4M&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mqyqingfeng/Blog&#34;&gt;Blog&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位前端开发者在 GitHub 上开启了 JavaScript 文章连载创作，内容主要分为：JavaScript 深入系列、JavaScript 专题系列、ES6 系列、React 系列&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IAS0fsGCg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Asabeneh/30-Days-Of-JavaScript&#34;&gt;30-Days-Of-JavaScript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;跟着作者一起规划 30 天学会 JavaScript 编程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Iol1ZrK37&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lin-xin/vue-manage-system&#34;&gt;vue-manage-system&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Vue + Element UI 的后台管理系统解决方案，作为一套多功能的后台框架模板，适用于绝大部分的后台管理系统（Web Management System）开发&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/InNfxoYOt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;工具&#34;&gt;工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/przemek83/volbx&#34;&gt;volbx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于数据处理的图形工具，拥有数据加载、过滤、选择筛选、可视化、xlsx 与 CSV 格式导出等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAQVxdrAY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhzyker/vulmap&#34;&gt;vulmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Web 漏洞扫描和验证工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAxz2BZFR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rmbadmin/SteamTools&#34;&gt;SteamTools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个包含多种 Steam 工具功能的工具箱，主要支持 Steam 社区反代理、多账号切换、成就统计管理、在 PC 上完成两步身份验证等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAfBUmKXM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DanielSWolf/rhubarb-lip-sync&#34;&gt;rhubarb-lip-sync&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于语音让动漫人物嘴唇实现音画同步，开发者可将其应用于计算机游戏、动画卡通角色、视频 Vlog 等领域&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAeqQpQOW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/multiavatar/multiavatar-php&#34;&gt;multiavatar-php&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的头像生成库，可为你生成 120 亿种不同风格的头像&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JA6bq6fHe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/miaomiaosoft/PandaOCR&#34;&gt;PandaOCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款多功能 OCR 图文识别工具，支持多种识别引擎，可识别图文、公式、表格等内容，还拥有翻译、朗读等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JA3qVvblh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/swiftbar/SwiftBar&#34;&gt;SwiftBar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能较为强大的 macOS 菜单栏定制工具，支持自行编写脚本，并集成到菜单栏上统一进行管理，配置灵活，可定制性强&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JySLrlEpT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dmtrKovalenko/odiff&#34;&gt;odiff&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;称其为世界上最快的像素级图像对比工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyB5w7JtL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/n7olkachev/imgdiff&#34;&gt;imgdiff&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;比那个自称世界上最快的图像对比工具还快的图像对比工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyB5w7JtL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/getmeli/meli&#34;&gt;meli&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的静态网站部署工具，支持在主域名下部署无数个静态站点，API 配置灵活，与 Let&amp;rsquo;s Encrypt 证书完美整合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyzUrlYOE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RobinLinus/snapdrop&#34;&gt;snapdrop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你想在本地多个 WiFi 设备间快速传输文件，那推荐你试下 Snapdrop 这款开源工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyyJoigAm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KasperskyLab/TinyCheck&#34;&gt;TinyCheck&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于检测与分析智能手机或 WiFi 关联设备的网络通信，以便快速识别出恶意请求的来源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jyx9YsXc0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facontidavide/PlotJuggler&#34;&gt;PlotJuggler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可视化时间序列的工具，通过在编辑器中可视化的处理数据，让你更为直观的进行数据分析&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyfSpcUv0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/beurtschipper/Depix&#34;&gt;Depix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可通过算法，快速移除文字截图上的马赛克，让其原始文本得以重新呈现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/u/5722964389&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BluePointLilac/ContextMenuManager&#34;&gt;ContextMenuManager&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个纯粹的、开源的 Windows 右键菜单管理程序&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwVo3leAY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/taniarascia/takenote&#34;&gt;takenote&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Web 的 Markdown 笔记应用：takenote，支持 Markdown 预览渲染、笔记之间链接跳转、语法高亮、便签拖拽、所见即所得等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwJBqrxaG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MustangYM/WeChatExtension-ForMac&#34;&gt;WeChatExtension-ForMac&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Mac 微信插件支持为客户端设置多种界面主题、消息转发与防撤回、账号多开、自定义回复、退群监控等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwI2168PB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kevin-De-Koninck/Clean-Me&#34;&gt;Clean-Me&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 macOS 系统分析与清理工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwhjWadgk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chaitin/xray&#34;&gt;xray&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大且完善的安全评估工具，支持的漏洞检测类型有 XSS 漏洞、SQL 注入、命令/代码注入、文件上传等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jw0P4wZUc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/traduora/traduora&#34;&gt;traduora&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源翻译平台 traduora，支持多人协作在线翻译，可导入导出 JSON、CSV、YAML 等多种文本格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvZE0A49X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ripperhe/Bob&#34;&gt;Bob&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Mac 端翻译软件，支持划词、截图、输入、插件等多种翻译方式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvNt2F0Ug&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kangabru/pretty-snap&#34;&gt;pretty-snap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让你为屏幕截图添加更为丰富与酷炫的背景图，并提供了多种配色及花纹图像供你选择，截图位置亦可调整&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jvdksa4nN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/presenta-software/presenta-lib&#34;&gt;presenta-lib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过在页面上编写 Markdown 文档，便可快速生成 PPT 文稿。有需要的话，还能对字体颜色、类型、动画转场效果进行定制&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jv6g63UPj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Gaafar/dev-fonts&#34;&gt;dev-fonts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持直接在 Web 端实时预览与对比多款编辑器主题、字体及配色，帮你快速挑选一款心仪字体，并应用到实际开发环境中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jv2ITpnLR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/siyuan-note/siyuan&#34;&gt;siyuan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Markdown 笔记应用：思源笔记，拥有块级引用和双向链接的网状特色，支持 Windows、Mac 和 Linux，可在浏览器上直接使用，支持移动端适配&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JuBCtmDHj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nodes-io/nodes-io&#34;&gt;nodes-io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可视化编程工具，支持快速创建实时 3D 图形、可交互的 Web 应用、自定义和共享工具参数、可视化数据分析、构建复杂应用等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JuA33wcga&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coolwill/qr-tunnel&#34;&gt;qr-tunnel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你觉得远程桌面的小文件传输方式有点繁琐，那么可以试下 QR tunnel 这款开源工具，可一键将文件转为二维码进行传输&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Juuy7gvnE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sdushantha/tmpmail&#34;&gt;tmpmail&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于快速生成临时电子邮箱&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtQtZFWMC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/httptoolkit/httptoolkit&#34;&gt;httptoolkit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 HTTP(S) 调试、测试与构建工具，支持 Windows、Mac、Linux 等主流操作系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtJpCq4jT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/funbox/optimizt&#34;&gt;optimizt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的图片命令压缩工具，支持对 PNG, JPEG, GIF 和 SVG 等多种图片类型，并可将光栅图像转为 WebP 格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtxD01pxc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RayWangQvQ/BiliBiliTool&#34;&gt;BiliBiliTool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 .Net Core 编写的跨平台的 B 站（哔哩哔哩）任务工具，通过 GitHub Actions 实现每日线上自动运行任务&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtpnHE6yK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rajkumardusad/Tool-X&#34;&gt;Tool-X&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 kali Linux 黑客工具安装器，使用后，便可在 termux app 和其它基于 Linux 的发行版中安装近 370 多种黑客工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jth894cYV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Yqnn/svg-path-editor&#34;&gt;svg-path-editor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可让你在浏览器中快速创建或编辑 SVG 图形路径，拥有命令面板、视图框、路径操作等多个组合选项&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsUJX3OE8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/moonD4rk/HackBrowserData&#34;&gt;HackBrowserData&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可全平台运行的、开源的浏览器数据导出解密工具，支持将密码、历史记录、Cookies、书签等导出内容进行解密&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsNFA19bl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guardicore/monkey&#34;&gt;monkey&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的安全测试工具，可用于测试数据中心受到内外部攻击后的恢复能力，在进行各项信息收集后会汇总成报告，帮助开发者进一步提升数据安全性&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jss47nQzK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/man-group/notebooker&#34;&gt;notebooker&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可快速将 Jupyter Notebook 内容转换为 Web 报告的开发工具，其转化结果存储在 MongoDB 中，支持在 Web 界面上直接查询&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jskd1zt6b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/a-wing/filegogo&#34;&gt;filegogo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 WebRTC 开发的点对点加密文件传输工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsiDBob3P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/njzydark/Aragorn&#34;&gt;Aragorn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的对象存储管理工具，基于 Electron + React + TS 开发，可作为图床上传工具使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsaMxhSVF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thesephist/histools&#34;&gt;histools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将浏览器历史记录数据可视化，并生成热力图，让你清楚的看到在不同时间点，对不同网站的访问频率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Js1m287sl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/srcrs/BilibiliTask&#34;&gt;BilibiliTask&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Bilibili 助手，可自动完成每日任务，投币，点赞，直播签到，自动兑换银瓜子为硬币，自动送出即将过期礼物，漫画 App 签到等任务&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrJSh10Sy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/visioncortex/vtracer&#34;&gt;vtracer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速将 jpg、png 等格式的图片快速转换为 svg 矢量图，并支持过滤斑点、色彩精度等多种参数配置&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jrz4xxTIS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jlfwong/speedscope&#34;&gt;speedscope&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Web 应用性能测试工具，支持在页面上快速查看页面的堆栈调用情况、内存占比，以便你更为快速的对 Web 应用进行优化&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrizH6RO6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hoppscotch/hoppscotch&#34;&gt;hoppscotch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;API 构建工具，满足了所有主流的 API 请求方法，并提供多款主题供用户选择定制，允许离线访问、文件管理、资源分享、文档构建、账户同步、语言国际化等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrhoDhCE7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/XIU2/UserScript&#34;&gt;UserScript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你一直对 GitHub 下载速度不甚满意，那么可以试下「GitHub 增强」这个油猴脚本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jr5dEDeBX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gao-sun/eul&#34;&gt;eul&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;个开源的系统状态监控器：eul，支持查看 CPU、风扇、内存、电池、网络等各类参数的使用情况，习惯用 macOS 系统的同学可以试用一下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqYxDAD8e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adamerose/pandasgui&#34;&gt;pandasgui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于分析 Pandas DataFrames 的 GUI 工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jqv560g19&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/extrawurst/gitui&#34;&gt;gitui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Rust 开发的 Git 终端工具，可让你更高效率的操作 Git&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqaEG92Zb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/beekeeper-studio/beekeeper-studio&#34;&gt;beekeeper-studio)&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款跨平台的开源 SQL 客户端，支持 Windows、Linux、macOS 等主流操作系统，拥有语法高亮、多任务执行、排序过滤数据、丰富的快捷键、查询历史记录等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JptrJdWvO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hermanTenuki/ASCII-Generator.site&#34;&gt;ASCII-Generator.site&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;允许你通过图像或文本快速生成 ASCII 艺术字符图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jpr5CnbzI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antfu/iroiro&#34;&gt;iroiro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在终端运行的色彩查询工具，提供了不少简洁优雅的色系供开发者选择，其数据引用自日本传统色系&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jpg5HiEn0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Vanessa219/vditor&#34;&gt;vditor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Markdown 编辑器（浏览器端），支持所见即所得（富文本）、实时渲染（类似 Typora）和分屏预览模式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JpaAKbRgN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhzyker/vulmap&#34;&gt;vulmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的漏洞扫描工具，可对 Web 容器、Web 服务器、Web 中间件以及 CMS 等 Web 程序进行漏洞扫描，并且具备漏洞利用功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jp8aUdn6W&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shashanoid/Simpdf&#34;&gt;Simpdf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用的 PDF 在线编辑器，可直接在网页上对 PDF 文件进行解析编辑，并保留其文件结构及格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoFX86cC9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/astrofox-io/astrofox&#34;&gt;astrofox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较有意思的动态影像应用，支持将音乐处理成可视化动态效果，并导出成视频&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JouXeBLEK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/anbox/anbox&#34;&gt;anbox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;款比较实用的 Linux 工具，可在 GNU / Linux 系统上轻松运行 Android 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jog1LnF1a&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/screego/server&#34;&gt;server&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的屏幕共享工具，拥有更低延迟、更高质量的屏幕共享体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoeQH81g8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/actionsflow/actionsflow&#34;&gt;actionsflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款工作流程自动化辅助工具，可用于构建各类 App、数据、API 之间的工作流程，帮你更好的处理文件同步、信息收集、任务管理等事项&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JodFDdj2l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mxrch/GHunt&#34;&gt;GHunt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 OSINT（互联网公开情报） 采集工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JocuzkL0G&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vanila-io/wireflow&#34;&gt;wireflow&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在线流程图绘制工具，支持使用 100 多种自定义图形、可进行多人协作、权限分配、实时聊天等功能、并拥有丰富的功能组件库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JmYGfr5af&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DevUtilsApp/DevUtils-app&#34;&gt;DevUtils-app&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Mac 开发者工具，提供了 Unix 时间戳解析、URL 编码/解码、JSON 格式化、JWT 调试器、query string 解析等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JmPfKBbjO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aristocratos/bpytop&#34;&gt;bpytop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Linux / OSX / FreeBSD 资源监控工具，支持显示处理器、内存、硬盘存储、网络与进程使用状态等信息，拥有多款可定制主题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlWgc2RMT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mikeslattery/tunic&#34;&gt;tunic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Linux 系统安装工具，无需借助 U 盘和更改 BIOS 配置，即可在当前系统下直接安装 Linux 系统（支持双系统）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlPbOAFiV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/playwright-cli&#34;&gt;playwright-cli&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Web 调试神器，可将 Web 页面上的用户交互转化为 JavaScript 代码，以便用于后续调试工作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlDpcfjRC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FreeCAD/FreeCAD&#34;&gt;FreeCAD&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 3D 建模工具，可用于构建任意真实世界物件，组件丰富，操作便捷，应用广泛，其主要目的，在于帮你更好的创建高质量工程图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlkycyjJg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JordanKnott/taskcafe&#34;&gt;taskcafe&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Go 与 Typescript 开发的看板开源软件，支持对任务进行筛选过滤、打标签、添加截止日期、分配成员、制定流程等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jl43l1TUx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/material-shell/material-shell&#34;&gt;material-shell&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给喜欢折腾 Linux 桌面版的同学推荐个 GNOME 插件，它打破了常规桌面工作杂乱无章的布局方式，以提升生产力为导向，对整体操作界面进行了优化&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jl07NEKhT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/ProcMon-for-Linux&#34;&gt;ProcMon-for-Linux&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源了一款 Linux 版本的进程监控工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiUTk2hx7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cyrildiagne/ar-cutpaste&#34;&gt;ar-cutpaste&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款很牛逼的 AR 工具，用户通过 Android 或 iOS 手机安装这款工具，然后对着目标物品进行拍摄，工具就会将物品从周围环境中抠取出来，之后即可将它粘贴到 Photoshop 软件中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiKhLCv21&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vinayak-mehta/present&#34;&gt;present&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以在终端演示幻灯片的工具，而且还可以带颜色和动效&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiDdodQcM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dexterleng/vimac&#34;&gt;vimac&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款类似 Chrome 插件 Vimium 的 Mac 工具，在不借助鼠标或触摸板下，可通过键盘快捷键操作当前窗口，比如快速选中、上下滚动等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JizhQExYo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ianzhao05/textshot&#34;&gt;textshot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高精度免费 OCR 工具，作者开发这款工具仅仅使用 139 行 Python 代码完成，就可快速提取截屏文本内容并复制到剪贴板&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JisBPcGNp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ventoy/Ventoy&#34;&gt;Ventoy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能用于制作可启动 U 盘的装机神器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JhnrifpAG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/daveearley/screenshot.rocks&#34;&gt;screenshot.rocks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;蛮实用的 Web 工具，可为自己的项目定制一张清新简洁的产品截图，支持设置浏览器边框样式、截图左右间距、背景样式、窗口组件，并提供 Chrome、Firefox、Edge 等主流浏览器插件下载&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JhlRSq4VC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kangvcar/InfoSpider&#34;&gt;InfoSpider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个集众多数据源于一身的爬虫工具箱，其主要目的，在于帮助用户安全快捷的拿回自己的数据，并提供数据分析功能，基于用户数据生成图表文件，让用户能更直观、深入了解自己的信息&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JgXvVwOmN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BeautyYuYanli/full-mark-composition-generator&#34;&gt;full-mark-composition-generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;满分作文生成器，该工具通过将专业术语与名人名言以随机的方式填入模板，生成一篇只有 &amp;ldquo;聪明人&amp;rdquo; 才能看懂的满分作文！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jfsq1rIbe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/scastiel/3d-book-image-css-generator&#34;&gt;3d-book-image-css-generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可自动为书籍创建 3D 图像，并自动生成指定的 CSS 与 HTML 代码，方便开发者快速将图像嵌入网页中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JcbkZyEfn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/oguzhaninan/Stacer&#34;&gt;Stacer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的 Linux 系统监控与优化工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JbqcvFRWN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/johannesjo/super-productivity&#34;&gt;super-productivity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的清单管理软件，兼容 Linux、MacOS 与 Windows 等主流操作系统，旨在减少重复性工作所浪费的时间，有利于你追踪各项信息，制定好工作计划&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J9amtCi8l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sqlmapproject/sqlmap&#34;&gt;sqlmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 SQL 渗透测试工具，开发者可利用它来完成程序的自动化检测，利用 SQL 注入漏洞，获取数据库服务器的权限&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7Vn5xOgP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lensapp/lens&#34;&gt;lens&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Kubernetes IDE，支持 Windows、Linux、macOS 等几大主流桌面平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvfGAidtx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hanmin0822/MisakaTranslator&#34;&gt;MisakaTranslator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款针对文字游戏的机翻工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7aeBEIhL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xiandanin/magnetW&#34;&gt;magnetW&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一键搜全网磁力资源，支持 Window、macOS 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J6LSF28XF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xgenecloud/xgenecloud&#34;&gt;xgenecloud&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款极其实用的数据库开源神器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J66f8yguu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sonnylazuardi/color-copy-paste&#34;&gt;color-copy-paste&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一枚开源的实时取色神器，直接打开摄像头就能实时取色！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5GUxzN78&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/penrose/penrose&#34;&gt;penrose&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的工具，你只需输入数学公式，便可快速生成极具美感的数学图表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5fBHFwxn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PantsuDango/Dango-Translator&#34;&gt;Dango-Translator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款颇为实用的 OCR 翻译软件，当你在屏幕上设定好翻译框后，任何出现框中的外文（英文、日文、韩文），都会被自动识别并快速翻译成中文&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J52fEBCA8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cowbell/sharedrop&#34;&gt;sharedrop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 WebRTC 技术开发的点对点文件传输工具，支持在相同或不同网络间，快速传输不同格式的文件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4UuRqolS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CopyTranslator/CopyTranslator&#34;&gt;CopyTranslator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;翻译神器，你只需将文本复制到剪贴板，即可快速查看翻译结果，享受所见即所得的快感&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4KY55sww&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Hunlongyu/ZY-Player&#34;&gt;ZY-Player&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的跨平台视频资源播放器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4JoFgSGi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/everestpipkin/image-scrubber&#34;&gt;image-scrubber&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速移除图像中的元数据（EXIF 数据）识别信息，实现局部关键位置的打码操作，以保障图像发布者的隐私安全&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4BxAdryL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/samuelmeuli/glance&#34;&gt;glance&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 macOS 应用，可用于预览各类默认在 macOS 上不被支持的文件格式，其中包含 .cpp，.js，.json，.py 等代码文件，Markdown、压缩包、Jupyter Notebook 等多种不同文件格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J3JkJgRVW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/beekeeper-studio/beekeeper-studio&#34;&gt;beekeeper-studio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的数据库管理工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J158KkLcD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saurabhdaware/text-to-handwriting&#34;&gt;text-to-handwriting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款文本转手写的转化工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J0dkg9NmV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Oxygem/Kanmail&#34;&gt;Kanmail&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源邮件客户端，兼容了 macOS、Linux、Windows 等平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IFf2x7ZTA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aristocratos/bashtop&#34;&gt;bashtop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Linux 资源监控器，主要用于展示当前 Linux 系统的处理器、内存、硬盘、网络和进程等各项资源的使用情况与统计报告&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IFdt6FRiQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mkdocs/mkdocs&#34;&gt;mkdocs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于快速创建项目文档的开源神器，这款工具希望帮助开发者以更加快速、便捷的方式来创建项目文档，并为其生成更加简洁直观的静态站点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ICeQIu8kB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cookieY/Yearning&#34;&gt;Yearning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于 SQL 审核的开源神器，该工具致力于帮助开发者快速完成 SQL 语句的审核、检测、执行、回滚等操作，使日常的 SQL 变动得以更加规范化、标准化&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IBtMnkTfX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/darlinghq/darling&#34;&gt;darling&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让你在 Linux 上无缝运行 macOS 系统软件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IAOt45NSv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ripperhe/Bob&#34;&gt;Bob&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Mac 端翻译软件，支持划词、截图、输入、插件等多种翻译方式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IA72IxYjR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/star7th/showdoc&#34;&gt;showdoc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款非常适合 IT 团队的开源在线 API 文档、技术文档工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IzXrhgiRr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cteamx/Thief-Book&#34;&gt;Thief-Book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款最强的 Windows、Mac 和 Linux 跨平台摸鱼神器，可以在任务栏、桌面、TouchBar上进行摸鱼，支持小说、股票、按键翻页、鼠标翻页、自动翻页等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ipp1ta8cj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Genymobile/gnirehtet&#34;&gt;gnirehtet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源的工具，手机通过 USB 连接电脑，即可使用电脑网络上网&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IoWJYxhCd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hardikvasa/google-images-download&#34;&gt;google-images-download&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费批量下载 Google 图片的工具，支持 macOS、Windows 及 Linux 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/InDP39g4X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;移动端&#34;&gt;移动端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/redsolver/noteless&#34;&gt;noteless&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 Markdown 安卓编辑器，支持语法高亮、多主题、全文搜索、附件嵌入及多种主流公式图标&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JASuXBVUI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bizz84/flutter_example_apps&#34;&gt;flutter_example_apps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集了多个基于 Flutter 开发的项目，按照不同编程水平，将项目划分为初、中、高三个等级&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyJkWtwbK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/didi/DiDiPrism&#34;&gt;DiDiPrism&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;滴滴前不久在 GitHub 上开源了一款专注于移动端操作行为的工具，涵盖了 APP 操作回放、操作检测、以及数据可视化能力&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyrF0j43l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iampawan/AI-Radio&#34;&gt;AI-Radio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Flutter 开发音乐 App：AI Radio，自带 AI 智能语音助手&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxGBYcmHs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/abuanwar072/E-commerce-App-UI-Flutter&#34;&gt;E-commerce-App-UI-Flutter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个电商类 Flutter App，仅有最常见的商品列表页及商品详情页，页面非常干净简洁好看且带有过渡动画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjvqgsVGI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/londonappbrewery/Flutter-Course-Resources&#34;&gt;Flutter-Course-Resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份适合新手的 Flutter 教程，教程一共分为 16 节，分别介绍了如何搭建环境、如何创建 Flutter 应用、如何使用 UI 组件等，从入门到完整开发出一个 FLutter 应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiARguXBi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/erluxman/awesomefluttertips&#34;&gt;awesomefluttertips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集了一些 Flutter 相关的开发技巧&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jc5Q2nufn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/feelschaotic/AndroidKnowledgeSystem&#34;&gt;AndroidKnowledgeSystem&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份最全 Android 进阶路线知识图谱 + 干货资料收集&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/InJk0leNr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;命令行工具&#34;&gt;命令行工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orf/gping&#34;&gt;gping&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款命令行工具，可为常用 ping 命令添加可视化的图形输出结果&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JutnaaK3y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://github.com/xwmx/nb&#34;&gt;nb&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个实用的命令行脚本工具，支持在命令中快速存储纯文本内容、内容加密、搜索与过滤，并基于 Git 进行同步、书签化内容管理等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtyO3FoE3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/simonw/sqlite-utils&#34;&gt;sqlite-utils&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你想在命令行中比较简便的操作 SQLite 数据库，可以试下 sqlite-utils 这个 Python 库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtzZ7wPUk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/danielgatis/rembg&#34;&gt;rembg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于快速移除背景图片的开源工具，安装配置后可在服务器、命令行中对图片进行批量处理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtdcB2k0b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yuanqing/vdx&#34;&gt;vdx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你平时习惯用 ffmpeg 来处理视频，那不妨试下用 vdx 这款命令行工具来优化下流程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqXmzFTv0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chriswalz/bit&#34;&gt;bit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Go 编写的 Git 命令行工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jp1aeFTZZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/muesli/duf&#34;&gt;duf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Go 开发的命令行工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JmS0e5NdD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nakabonne/ali&#34;&gt;ali&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 Go 编写的 HTTP 负载测试工具，可在命令行中实时展示指定 URL 的延迟、速率限制、加载时间、表头信息等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlCC2kL3w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/schollz/croc&#34;&gt;croc&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款命令行文件传输工具，其主要作用，是可在两台计算机上，使用命令行进行端对端加密的文件传输&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjInVtMLJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/oldratlee/useful-scripts&#34;&gt;useful-scripts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;阿里一位后端工程师在 GitHub 上开源了一些比较实用的程序脚本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JgsSjq4Am&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ainilili/ratel&#34;&gt;ratel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可以让你在命令行里面玩斗地主&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J86n194Jk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vimwiki/vimwiki&#34;&gt;vimwiki&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给 Vim 党用户推荐一款比较实用的插件，装上此插件可以通过 Vim 完成组织笔记和想法、管理待办事项、编写文档等工作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5bG9r4Uk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34;&gt;rich&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该工具支持对命令行终端上的表格、进度条、Markdown、代码高亮、Emoji 表情等不同文本格式进行渲染&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J0Qdii3K2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/claudiodangelis/qrcp&#34;&gt;qrcp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个文件传输工具，在使用时，只需用命令行为指定传输文件生成一个二维码，然后打开手机扫码，即可通过 WiFi 快速将文件从电脑传至手机上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IEwgZuDQe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ahmadawais/corona-cli&#34;&gt;corona-cli&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持在命令行中实时查询当前全球最新的疫情报告&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IA4xFljHe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;chrome-插件&#34;&gt;Chrome 插件&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/screenity&#34;&gt;screenity&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款比较实用的 Chrome 录屏标记插件，支持在屏幕上任意位置进行录制和标注信息，拥有点击高亮效果，并可将录制视频导出 MP4、gif、webm 等文件格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JA50lEjr8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jiangqizheng/BlueSea&#34;&gt;BlueSea&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个有趣的英语学习 Chrome 插件，支持划词翻译、单词高亮、单词弹幕、记忆曲线复习、词频统计等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jyiew3EKS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/x2rr/funds&#34;&gt;funds&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;自选基金助手，可快速获取指定基金的实时数据，支持实时查看持仓当日估值收益，总收益和收益率，估值、净值、收益等走势图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwyBw0N5K&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dailydotdev/daily&#34;&gt;daily&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个为开发者而生的信息聚合平台，上面提供了超过 350+ 个开发者资讯来源，汇总了 1 万多个技术标签，是个获取最新开发资讯的好渠道&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqGRImI5C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/misswell/octoman-weibo-backup&#34;&gt;octoman-weibo-backup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微博备份插件支持一键将自己的微博 HTML 页面保存到本地&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JcNrkERDQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;vscode-插件&#34;&gt;VSCode 插件&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mqycn/huile8&#34;&gt;huile8&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将代码变量、注释、文档中的陌生英文单词，添加进 VSCode 单词库中，让开发者在 VSCode 中也能背单词&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzXYbpmEQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/valentjn/vscode-ltex&#34;&gt;vscode-ltex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于检测 LaTeX 拼写与语法错误，写论文时能派上用场&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jz9gjsApi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/benawad/vsinder&#34;&gt;vsinder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可让你在 VSCode 上，用类型 Tinder 的方式，通过代码来进行社交&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyeHn6RId&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/graykode/ai-docstring&#34;&gt;ai-docstring&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 AI（NLP）技术，快速为 Python 函数生成 docstrings 代码片段，并可在几种不同的 docstring 格式类型中进行切换，支持 args、 kwargs、decorators、errors 和 parameter 等类型&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvbL2lQKD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/foambubble/foam&#34;&gt;foam&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速帮你组织好各类文章与笔记，生成可访问的内容节点，方便你更好的进行创作。在此之后，你还可以将本地内容快速部署到 GitHub Pages 上，以供他人预览&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JuUtt4HHy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ide-stories/vscode-stories&#34;&gt;vscode-stories&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可对当前 VSCode 编码界面进行录屏，并通过 ffmpeg 自动转为 gif 图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrZMCjVu6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gamedilong/anes-repository&#34;&gt;anes-repository&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可直接在 VSCode 上玩超级马里奥、坦克大战、魂斗罗、超时空要塞等经典游戏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JpTn6itKR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TeamMeow/vscode-math-to-image&#34;&gt;vscode-math-to-image&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可直接将 LaTeX 数学公式转为 SVG 图片，并嵌入在原有位置上，以便在不同文本格式上进行展示&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoXeI05Fo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coderoad/coderoad-vscode&#34;&gt;coderoad-vscode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持用户在 VSCode 编辑器中创建一种可交互式编码的技术教程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jon6933mx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/afzalsayed96/vscode-react-icons&#34;&gt;vscode-react-icons&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可以让你在编辑器中直接搜索并使用 SVG 格式的图标，共支持 20 多个图标库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkQHisMGV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hediet/vscode-debug-visualizer&#34;&gt;vscode-debug-visualizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 VS Code 代码调试神器，这款插件用在代码调试时能以图的可视化方式快速展示数据结构，帮你理清数据结构与代码思路，告别枯燥的调试&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jijbl0xO9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LeekHub/leek-fund&#34;&gt;leek-fund&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这款插件，你能直接看到各个股票和基金的涨跌情况，股票实时 K 线图，基金历史净值等数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JeQ4KmGuc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/pylance-release&#34;&gt;pylance-release&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于 Python 的高性能、功能丰富的语言服务器，帮助 Python 开发者提升编码效率与编程体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J9Xvy2aOk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/snipsnapdev/snipsnap&#34;&gt;snipsnap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可自动显示当前项目每个库的所有可用代码片段。在开发项目时，能快速补全代码片段，提升开发效率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J9rE3uhLs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/foambubble/foam&#34;&gt;foam&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速帮你组织好各类文章与笔记，生成可访问的内容节点，方便你更好的进行创作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J8PW4pe6Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saekiraku/vscode-rainbow-fart&#34;&gt;vscode-rainbow-fart&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;疯狂吹爆程序员彩虹屁的 VSCode 插件来了！其主要核心功能，就是能在你编程的时候，持续不断的夸你代码写的异常牛逼，前无古人后无来者&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7thMjNCw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/niudai/Github-Explorer&#34;&gt;Github-Explorer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该插件通过一种较为友好的方式，让你能在 VSCode 上直接查看或下载某个 GitHub 项目的源文件，减少你来回折腾的成本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4NqJo0ch&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hediet/vscode-realtime-debugging&#34;&gt;vscode-realtime-debugging&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该插件可更为直观的、实时的展示各项程序调试信息，帮助开发者更好的完成调试工作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J3GYBp18S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hediet/vscode-drawio&#34;&gt;vscode-drawio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自德国的一名工程师 Henning Dieterichs 成功将 draw.io 的功能集成进了 VSCode，并打包成了插件供开发者下载使用，让你分分钟用 VSCode 画出完美的流程图、思维导图与 UML 图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1yZEqTTf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/primer/github-vscode-theme&#34;&gt;github-vscode-theme&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个拥有 GitHub 风格的 VSCode 主题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1s9jftqf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;资料集合&#34;&gt;资料集合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SimmerChan/corpus&#34;&gt;corpus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份按 Task 划分的自然语言处理，知识图谱相关语料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAXZV9kT1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nusr/hacker-laws-zh&#34;&gt;hacker-laws-zh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一名开发者近日在 GitHub 上放出了 Hacker Laws 中文翻译版，里面整合了一些对开发人员有用的定律、理论、原则和模式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqeCK4qhx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/logancyang/my-cs-degree&#34;&gt;my-cs-degree&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一整套 CS 教程，内容主要包含计算机科学基础知识、深度学习、自然语言处理及软件全栈开发等技能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jppwcfb8t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jobbole/awesome-cpp-cn&#34;&gt;awesome-cpp-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 C++ 资源大全中文版，里面包含了各类 C++ 标准库、Web 应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jmy29elm2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Werneror/Poetry&#34;&gt;Poetry&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个古诗词项目，里面收录了从先秦到现代的共计 85 万余首古诗词&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkzpICcPx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amitness/learning&#34;&gt;learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据科学学习指南，旨在帮你每天提升 1% 的数据科学技能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkxQj82jD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thunlp/Chinese_Rumor_Dataset&#34;&gt;Chinese_Rumor_Dataset&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较有意思的数据集，里面收录了一些被微博判定为谣言的各类数据，其中包含转发、评论、原微博内容等数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkhVXxj3e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MysteryVaibhav/leetcode_company_wise_questions&#34;&gt;leetcode_company_wise_questions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;苹果一位工程师 Vaibhav 搞了个 GitHub 项目，把众多知名大厂的 LeetCode 题目整合到一起，并打包成了 PDF&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jkfbu2V8X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eugeneyan/applied-ml&#34;&gt;applied-ml&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据科学与机器学习相关的精选论文、技术文章与知名博客，里面覆盖了数据工程、自然语言处理、计算机视觉、强化学习等 24 种技术方向，大多数文章均来自世界各大名校名企&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jk78en6DX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mhagiwara/100-nlp-papers&#34;&gt;100-nlp-papers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份清单：《100 篇 NLP 必读论文》里面包含了机器学习、神经模型、语言建模、信息提取、机器翻译与问答等相关技术内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjXHJzmQ2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/infosecn1nja/Red-Teaming-Toolkit&#34;&gt;Red-Teaming-Toolkit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份「Red Team 安全攻防工具清单」，收录了各类情报搜集、漏洞扫描、网络钓鱼、渗透测试、终端远程访问、WiFi 攻击、嵌入式设备后门植入等一系列安全攻防工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjMHP6sMQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/abhivaikar/howtheytest&#34;&gt;howtheytest&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;精心整理了一份各大软件公司在社区公开分享的测试资源，含有测试最佳实践、工具、技术及软件测试文化等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jj38L1T00&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datastacktv/data-engineer-roadmap&#34;&gt;data-engineer-roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;数据工程师 2020 年最新学习路线指南，里面内容含有：CS 基础、数据库基础、关系数据库、集群计算基础、数据处理、监控数据管道、数据安全与隐私等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jj1zl9gNJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jobbole/awesome-cpp-cn&#34;&gt;awesome-cpp-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份中文版 C++ 资源大全，内容包括：标准库、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiTIgaPOP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kautukkundan/Awesome-Profile-README-templates&#34;&gt;Awesome-Profile-README-templates&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一份精心收集整理的个人页 README 模板列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiMEhAcaK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/greathope/CV_Competitions&#34;&gt;CV_Competitions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理国内有奖金的视觉大赛列表，发起大赛组织有阿里云、华为云、讯飞等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JirqLj4nN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lyeoni/nlp-tutorial&#34;&gt;nlp-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 NLP 教程列表，内容含有新闻分类、电影评价分类、问答匹配、神经网络机器翻译等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jii0h3CUy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/greyireland/algorithm-pattern&#34;&gt;algorithm-pattern&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;算法模板，教你最科学最快速的刷题，主要分为四大模块：入门篇、数据结构篇、基础算法篇、算法思维&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JigqRforn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huangrt01/CS-Notes&#34;&gt;CS-Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一名来自字节跳动的开发者 huangrt01 在 GitHub 上开源了他的计算机学习笔记&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JhIGgE2PI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shervinea/mit-15-003-data-science-tools&#34;&gt;mit-15-003-data-science-tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据科学工具指南，里面涵盖了 SQL，R，Python，Git 和 Bash 等常用编程语言和工具的使用指南，其目的在于让开发者更便捷的理解数据检索、数据处理、数据可视化等技术概念&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JhEISanhr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Mr-xn/Penetration_Testing_POC&#34;&gt;Penetration_Testing_POC&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份渗透测试笔记，里面汇总了一些渗透测试工作中常用到的 POC、脚本、工具、学习资源、操作技巧等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jg464ALTR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/computervision-recipes&#34;&gt;computervision-recipes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份计算机视觉指南《Computer Vision Recipes》里面提供了可用于构建计算机视觉系统的代码示例与最佳实践准则&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfRakjXxA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bighuang624/AI-research-tools&#34;&gt;AI-research-tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;AI 科研工具集，里面汇总了包含论文查找、阅读、写作、编码实验等多个不同场景下的工具列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfGapDz66&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nushackers/notes-to-cs-freshmen-from-the-future&#34;&gt;notes-to-cs-freshmen-from-the-future&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份给计算机新手看的介绍指南，该指南由新加坡国立大学的教授们为新学所准备，里面提供了计算机科学行业建议、知名程序员介绍、Unix 入门参考、知名 CS 公开课及学习资源等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfdSWl1JH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yunjey/pytorch-tutorial&#34;&gt;pytorch-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 PyTorch 教程代码，内容主要是为学习 PyTorch 的深度学习研究人员提供的教程代码，其中大多数模型用了不到 30 行代码实现，大家可配套官方 PyTorch 参考学习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JeDKmuKkU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/veeral-patel/how-to-secure-anything&#34;&gt;how-to-secure-anything&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的安全工程指南，这份指南将带你了解安全工程、安全架构、系统防御强化、漏洞排查等计算机网络安全相关的基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JeCaWhenP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BDBC-KG-NLP/QA-Survey&#34;&gt;QA-Survey&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份在 GitHub 上开源的问答系统调研报告，包括知识图谱问答系统（KBQA）和文本问答系统（TextQA）两类系统的调研，每类系统又各分为学术界和工业界。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdrDc0wqY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/matplotlib/cheatsheets&#34;&gt;cheatsheets&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份速查表清单，里面包含了 Matplotlib 相关的各种常用代码片段、配置方案、使用技巧等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jb7lwgByw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ardanlabs/gotraining-studyguide&#34;&gt;gotraining-studyguide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Go 语言学习指南：《Ultimate Go study guide》作者学习 Go 语言和计算机系统时所作的笔记&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J9uowFVTS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kmario23/deep-learning-drizzle&#34;&gt;deep-learning-drizzle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了诸多与深度学习相关的开放性学习资源，其中包括机器学习、自然语言处理、深度神经网络、计算机视觉等多个不同分支的归类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J9cIBsOpW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/spmallick/learnopencv&#34;&gt;learnopencv&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了不少与计算机视觉、深度学习、人工智能相关的教程文章和示例代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J8ilNAW4S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/keithnull/TeachYourselfCS-CN/blob/master/TeachYourselfCS-CN.md&#34;&gt;TeachYourselfCS-CN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如何自学计算机科学，这里有份指南可供你参考&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7LWB2Krs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AnkerLeng/Cpp-0-1-Resource&#34;&gt;Cpp-0-1-Resource&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 C++ 入门学习资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J6hf32pI5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chris-chris/ml-engineer-roadmap&#34;&gt;ml-engineer-roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份机器学习工程师技术路线图，里面整理了与机器学习相关的常用框架、编程语言、实用工具等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J6fFD5SQm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ritchieng/the-incredible-pytorch&#34;&gt;the-incredible-pytorch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了许多与 PyTorch 相关的教程、项目、论文、书籍、视频等资源，以便让开发者得以更快上手 PyTorch 开发&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J67Oy9Dgi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Xunzhuo/Algorithm-Guide&#34;&gt;Algorithm-Guide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集汇总了一些与算法竞赛、数据结构有关的课件、论文、书籍、网站、习题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J2UgHzI3S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luspr/awesome-ml-courses&#34;&gt;awesome-ml-courses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;德国一名工程师在 GitHub 上分享了他所收集汇总的一些机器学习课程资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J2MpCDbZ8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/inancgumus/learngo&#34;&gt;learngo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;包含了共计 1000+ 个 Go 语言相关的代码示例、练习、测验题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J2rZdoSio&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/florinpop17/app-ideas&#34;&gt;app-ideas&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集了共 86 个可供开发者练习参考的项目创意，其中初级项目 34 个、中级 32 个、高级 20 个，每个项目均附有较为详细的项目参考文档&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J2mGqvMRP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xjh22222228/git-manual&#34;&gt;git-manual&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Git 常用命令参考手册：该 repo 汇总了一些比较常用的 Git 命令，以便于大家查阅使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1RQE7Jif&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luspr/awesome-ml-courses&#34;&gt;awesome-ml-courses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 AI 相关的学习资源汇总清单，里面收纳了斯坦福、加州伯克利、哥伦比亚、华盛顿大学等多个高校的免费开放课程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1qQGrY0n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Light-City/CPlusPlusThings&#34;&gt;CPlusPlusThings&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该资料主要面向 C++ 新手初学者，提供了从入门到进阶的知识点及工具讲解，主要解决面试者与学习者想要深入 C++ 及如何入坑 C++ 的问题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J17C7fsCO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/google/eng-practices&#34;&gt;eng-practices&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 开源的一份工程实践文档，希望通过这份文档，能帮助更多开发者完成代码审查工作，为项目代码提供标准参考&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J0YtkFMbY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jbranchaud/til&#34;&gt;til&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集其平日所学的一些碎片化编程知识和开发技巧，其中包括 Git、JavaScript、Linux、VSCode、Devops、Chrome 等不同技术领域的分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IEdpbzdIJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huzecong/oi-slides&#34;&gt;oi-slides&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位开发者将其在 2013-2018 年期间的信息学竞赛课件在 GitHub 上开源了，覆盖了 TopCoder 题目选讲、CodeChef 题目选讲、趣题选讲、网络流模型与例题、NOIp 图论、数据结构及应用等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IC5qdEwXb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/labuladong/fucking-algorithm&#34;&gt;fucking-algorithm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;共有 60 多篇基于 LeetCode 为主题撰写的原创文章，涵盖了所有题型和技巧，致力于做到举一反三、通俗易懂，而不是简单的代码堆砌&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IB1qKiBt8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SSHeRun/CS-Xmind-Note&#34;&gt;CS-Xmind-Note&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份计算机科学相关的思维导图与学习笔记，包含计算机组成原理、数据结构、计算机网络、操作系统等常见分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IApILuL7A&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nikitavoloboev/my-mac-os&#34;&gt;my-mac-os&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;伦敦一位开发者将自己平时常用的 Mac 软件及工具统一整理后放到 GitHub 上了，其中包括不少可提升生产力和开发效率的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IzEa93dl3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FancyVin/fun-with-graphics&#34;&gt;fun-with-graphics&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了图形学相关的高校课程、书籍、教程、文章、开源项目、网站等资料集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IpsX0tcu1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/KotlinBy/awesome-kotlin&#34;&gt;awesome-kotlin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精选收集整理 Kotlin 相关资料的集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IooXx9vMk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Snailclimb/programmer-advancement&#34;&gt;programmer-advancement&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《程序员修炼之路》作者将自己作为一个过来人，总结了自己程序员修炼之路的经验，以及给后辈的一些建议&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/InWG2fRoq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;面试资料&#34;&gt;面试资料&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/resumejob/interview-questions&#34;&gt;interview-questions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的大厂高频面试题资源整理，根据国内外论坛收集超过 1700 篇真实面经整理的腾讯，阿里，字节跳动，Shopee，美团，滴滴高频面试题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jrxv8E2eo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TSiege/Tech-Interview-Cheat-Sheet&#34;&gt;Tech-Interview-Cheat-Sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的技术面试清单速查表，主要收录了数据结构与算法的常见面试技术点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JqFGE9i24&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alexeygrigorev/data-science-interviews&#34;&gt;data-science-interviews&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据科学相关的面试题，主要分为两部分：知识理论（如线性回归、神经网络、决策树、文字分类等）与技术应用（如 SQL、Python、算法等）内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlciLluvR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lgwebdream/FE-Interview&#34;&gt;FE-Interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个前端面试必备题库，里面共包含 1000+ 道面试真题，覆盖 HTML、CSS、JavaScript、Vue、React、Node、TypeScript、Webpack、算法、网络与安全、浏览器等多个知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JgLJjdFtx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangzhiwubigdata/God-Of-BigData&#34;&gt;God-Of-BigData&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份大数据面试题解，主要分为大数据开发基础篇、框架学习篇、实战进阶篇等三大篇章，包含了高并发、分布式、Hadoop、Spark、Flink、Kafka 等技术点的高频面试题讲解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfTws7cuO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yuanguangxin/LeetCode&#34;&gt;LeetCode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整理的 LeetCode 题目分类与面试题答案解析，涵盖链表、指针遍历、字符串操作、堆栈、递归、动态规划、二叉搜索树等知识点，题解代码基于 Java 实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfnjqgCej&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sladesha/Reflection_Summary&#34;&gt;Reflection_Summary&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套算法理论基础知识，里面涵盖了数学、数据预处理、机器学习、深度学习、自然语言处理等多个技术领域的面试知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JejjWgty2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rbhatia46/Data-Science-Interview-Resources&#34;&gt;Data-Science-Interview-Resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据科学相关的面试资源汇总，里面包含了概率统计、SQL 和数据采集、数据可视化、经典机器学习算法、深度学习、数据结构与算法等常见面试高频题的讲解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JefaVDyHo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/grandyang/leetcode/blob/master/README-CN.md&#34;&gt;leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内一位开发者在 GitHub 上搞了个 LeetCode 题解项目，目前已收录 900 多道题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdLHHexum&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/afatcoder/LeetcodeTop&#34;&gt;LeetcodeTop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;汇总了各大互联网公司容易考察的高频 LeetCode 题的热度，以便帮助同学们更加有针对性地准备面试&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdfktdUpT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AobingJava/JavaFamily&#34;&gt;JavaFamily&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Java 面试与学习指南，里面涵盖了大部分 Java 程序员所需要掌握的核心知识，其中包括 JVM、并发与多线程、常用工具集、数据结构与算法、消息队列、数据库等知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JcHxn1Zps&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/greyireland/algorithm-pattern&#34;&gt;algorithm-pattern&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;LeetCode 刷题模板，里面主要记录了他通过各种刷题文章、专栏、视频等内容总结出的刷题心得，仅供参考&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J73yAc4We&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shomali11/go-interview&#34;&gt;go-interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自纽约的一名开发者 Raed Shomali 在 GitHub 上开放了他所整理的一些 Go 语言面试题及答案&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4utdaDRp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hoanhan101/algo&#34;&gt;algo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份含有 107+ 条最常出现的编码面试问题及详细解决方案&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IoE5a7LNi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wolverinn/Waking-Up&#34;&gt;Waking-Up&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份全面总结计算机基础面试问题资料，该资料是作者在两次面试大厂失败后，在进行系统学习计算机网络、操作系统、数据库等知识时，整理出来的常见面试题及答案，最后作者还是拿到了大厂 Offer&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/InSWFA3DA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;机器学习人工智能&#34;&gt;机器学习/人工智能&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vt-vl-lab/FGVC&#34;&gt;FGVC&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可基于光流边缘引导的视频补全算法，对视频物品进行自动抠除、补全&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JA7mugoid&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/victor369basu/Real-time-stock-market-prediction&#34;&gt;Real-time-stock-market-prediction&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于机器学习来进行股票市场预测&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzWKVgjsS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vijishmadhavan/ArtLine&#34;&gt;ArtLine&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于深度学习，为人物肖像生成线条、卡通、电影海报等多种不同风格的画像&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzFhoBJRY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yechens/NL2SQL&#34;&gt;NL2SQL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可将自然语言文本转换成结构化查询语言 SQL，致力于打破人与结构化数据之间的壁垒&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzrIWDl1V&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PeterL1n/BackgroundMattingV2&#34;&gt;BackgroundMattingV2&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可实时、快速的对高分辨率图像、视频进行自动背景抠图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyZrthulI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HighCWu/anime_biggan_toy&#34;&gt;anime_biggan_toy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可使用 BigGAN 生成令人惊叹的动漫图片&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyI9SvtdJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/qlib&#34;&gt;qlib&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源的一个 AI 量化交易平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jy5gPyZqM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TachibanaYoshino/AnimeGAN&#34;&gt;AnimeGAN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可借助 AI 技术，快速将真实图像转换为日漫风格的画作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxjJZF2G2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NathanUA/U-2-Net&#34;&gt;U-2-Net&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;借助 AI 技术为人物肖像生成手绘风格的画像&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvlbxcTQz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/soulmachine/machine-learning-cheat-sheet&#34;&gt;machine-learning-cheat-sheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的机器学习速查表清单，里面包含许多关于机器学习的经典方程式和图表，其目的在于帮助开发人员快速回顾关于机器学习的知识和思想，或用于面试复习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JuDYBaZ10&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jiupinjia/SkyAR&#34;&gt;SkyAR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自密歇根大学博士后研究员 Zhengxia Zou 发布了一项自己的研究，可将某个视频中的真实天空背景，通过 AI 替换成类似科幻片中的电影场景，效果非常震撼&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JusbYuv69&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life&#34;&gt;Bringing-Old-Photos-Back-to-Life&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;借助 AI 对老照片快速进行修复，基于 PyTorch 实现，支持划痕检测、面部修饰、全局还原等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Juhc3zPFi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facebookresearch/pifuhd&#34;&gt;pifuhd&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 Facebook 研究室开源，其主要作用，是能通过 AI 快速为人体生成 3D 建模，减少游戏、动画制作人员的工作量&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Juaw2pyQR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PavelDoGreat/WebGL-Fluid-Simulation&#34;&gt;WebGL-Fluid-Simulation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 WebGL 流体模拟器，支持设置流体密度、速度扩散范围、压力、飞溅半径、光影效果等属性&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JtRF3kasE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhm-real/PathPlanning&#34;&gt;PathPlanning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个实现了多种在机器人领域中常用到的路径规划算法，其中也包括基于搜索与采样的方法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JteM0nH7e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AMAI-GmbH/AI-Expert-Roadmap&#34;&gt;AI-Expert-Roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 AI 技术进阶路线图，由德国一家软件公司 AMAI GmbH 发起，里面包含了 AI 技术领域的相关知识点，每个知识点均附有详细文档&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsBuCASPQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ClarityCoders/RedditBot-FastAI&#34;&gt;RedditBot-FastAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 Python 和 FastAI 做了个 NSFW（不宜在工作场所打开）图像分类器，可对黄色暴力图像进行分类筛选&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsvZEavHI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PaddlePaddle/PaddleOCR&#34;&gt;PaddleOCR&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套丰富、领先、且实用的 OCR 工具库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrJ1vz0W8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aimhubio/aim&#34;&gt;aim&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可用于快速记录、搜索与比较不同 AI 实验的结果与数据，操作便捷，配置灵活&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrBqFnngS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TurtleZhong/Map-based-Visual-Localization&#34;&gt;Map-based-Visual-Localization&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于地图的视觉定位通用框架&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jq5dpD73P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/nni&#34;&gt;nni&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量但功能强大的工具包，可帮助用户自动进行特征工程，神经网络架构搜索，超参调优以及模型压缩&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JpBMasirg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/EssayKillerBrain/EssayKiller_V2&#34;&gt;EssayKiller_V2&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 GPT2.0 的初代创作型人工智能框架&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoNOd91nt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/emilyxxie/mona_lisa_eyes&#34;&gt;mona_lisa_eyes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 TensorFlow.js 和 WebCam 做了个挺有意思的开源项目，画中蒙娜丽莎的眼睛会跟随人体移动轨迹转动&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JmFPh1MAn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PaddlePaddle/VisualDL&#34;&gt;VisualDL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;百度在 GitHub 上开源的一款 AI 可视化分析工具，提供了丰富的可视化功能，支持标量、图结构、数据样本可视化、直方图、PR 曲线及高维数据降维呈现等诸多功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jl1x3uHdM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mburakerman/tensorflowjs-webcam-transfer-learning&#34;&gt;tensorflowjs-webcam-transfer-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Tensorflowjs 开发的小 Demo，可检测摄像头前物体的移动轨迹并控制汽车转向&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkLcliIMp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tradytics/eiten&#34;&gt;eiten&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一家热衷于用 AI 与数据分析来做投资分析的企业 Tradytics 开源了他们内部的工具包，里面主要实现了各种统计与算法投资策略，如最小方差、最大夏普比率和基于遗传算法的投资组合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkCWU2DLI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NirantK/awesome-project-ideas&#34;&gt;awesome-project-ideas&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;精心整理了一批机器学习、NLP、计算机视觉及推荐系统相关的开发资源，并提供项目实现思路、产品方向、数据集等资料，就差具体代码实现了&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjHcRAaax&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fighting41love/funNLP&#34;&gt;funNLP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整合较为丰富的中文 NLP 资源库，涵盖了中英文敏感词、语言检测、名字推断性别、手机号抽取、身份证抽取、邮箱抽取、中日文人名库、中文缩写库、拆字词典等等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjtQPsLSj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/boat-group/fancy-nlp&#34;&gt;fancy-nlp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款用于建设商品画像的文本知识挖掘工具，支持实体提取、文本分类和文本相似度匹配等多种常见 NLP 任务&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjolSeivg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/karpathy/minGPT&#34;&gt;minGPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;特斯拉 AI 总监 Andrej Karpathy 用 300 行 PyTorch 代码实现了 GPT 模型，相对其他大多数 GPT 模型它更加小巧、简洁&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjnaNFLRM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hankhank10/fakeface&#34;&gt;fakeface&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可根据接口参数返回 AI 生成的假脸数据，其数据主要来自于 thispersondoesnotexist 生成的 15000 张 AI 人脸图片，开发者可传递性别、年龄等参数来获取指定 AI 人脸&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JhwRNaQyG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mrdbourke/machine-learning-roadmap&#34;&gt;machine-learning-roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上有个老哥为机器学习初学者绘制了一份学习路线图，里面主要包含 5 大分支路径&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdWc1DUtq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/EthicalML/awesome-production-machine-learning&#34;&gt;awesome-production-machine-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;比较实用的机器学习项目汇总清单，包含了一系列优秀的机器学习开源库，可帮你完成项目的监控、部署、安全防护&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jcfh9nOgK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/anopara/genetic-drawing&#34;&gt;genetic-drawing&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;借助遗传算法来完成绘画工作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5No8wjdc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iperov/DeepFaceLab&#34;&gt;DeepFaceLab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开发者通过这款软件，可任意替换视频中的人脸、头像，以及进行口型匹配&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5I5mm7KF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MrMimic/data-scientist-roadmap&#34;&gt;data-scientist-roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据科学家技术修炼图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J3piFmjFI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/senguptaumd/Background-Matting&#34;&gt;Background-Matting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可利用神经网络技术，自动完成视频抠图功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J2BpIuFE0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yemount/pose-animator&#34;&gt;pose-animator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可识别出人类的表情变化与肢体动作，并将其映射到 2D 矢量图型上，让它跟着你的节拍动起来&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1eXBpaDo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ashutoshbsathe/scarpet-nn&#34;&gt;scarpet-nn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;印度有位小哥在「我的世界」上搭建出了一个神经网络&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J054Q5KjJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vt-vl-lab/3d-photo-inpainting&#34;&gt;vt-vl-lab/3d-photo-inpainting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;，可快速将普通照片转为 3D 照片，让人物看起来更有立体感&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IFFKC9bEs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/minivision-ai/photo2cartoon&#34;&gt;photo2cartoon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可快速将真实照片转换为卡通风格的非真实感图像&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IEmPH1xCZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mcreed/zoombot&#34;&gt;zoombot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外有个小哥因为无法忍受公司永无止境的 Zoom 远程会议，便做了一款工具 - Zoombot 来代替自己去开会，基于 AI 进行开发，用到了诸如语言识别与文本转语音等技术&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IDAUvFtwP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ouyanghuiyu/chineseocr_lite&#34;&gt;chineseocr_lite&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级中文 OCR，支持竖排文字识别&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Iy4nM2wdQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;开源书籍教程&#34;&gt;开源书籍/教程&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liuxinyu95/unplugged&#34;&gt;unplugged&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《同构 - 编程中的数学》，有提供中英文两种版本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzKzWmxGY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/missing-semester-cn/missing-semester-cn.github.io&#34;&gt;missing-semester-cn.github.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《计算机教育中缺失的一课》中文版，主要讲授命令行、文本编辑器、Git 版本控制系统等工具的使用，以及关于元编程、安全和密码学等知识的科普&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzB9s4UhA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangdoc/ssh-tutorial&#34;&gt;ssh-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本关于 SSH 相关的技术教程，用于介绍 SSH 的概念和基本用法，也可以当作手册查询&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyKw0Am3l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geektutu/high-performance-go&#34;&gt;high-performance-go&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Go 语言高性能编程》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyGAt2oaN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/linkedin/school-of-sre&#34;&gt;school-of-sre&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;LinkedIn 在 GitHub 上开源了其企业内部的 SRE 技术课程，主要包含 Linux、Git、Python、Web、MySQL、大数据、系统设计、网络安全等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxVrZ31XK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bobbyiliev/introduction-to-bash-scripting&#34;&gt;introduction-to-bash-scripting&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Introduction to Bash Scripting》，里面包含了 Bash 结构、变量、用户输入、注释、条件表达式、函数、调试、脚本编写及应用、Cloudflare API 对接等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwRsv8niY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/k88hudson/git-flight-rules/blob/master/README_zh-CN.md&#34;&gt;git-flight-rules&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Git 学习指南，指南里面记录了某个事情发生的原因，以及怎样进行流程化处理。本质上，它们是特定场景的标准处理流程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvYsXjaRd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kelthuzadx/EffectiveModernCppChinese&#34;&gt;EffectiveModernCppChinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Effective Modern C++ 》作为 高效 C++ 丛书之一，通过对复杂技术知识点的清晰阐释，让其成为 C++ 程序设计指南业界标杆&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsFq8r192&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/handsonscala/build&#34;&gt;build&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《动手学 Scala 编程》作者将会配合一些真实场景与项目案例，如可交互式网站、网络文件同步、Web 爬虫、数据迁移等工具与应用，让新手可以更为直观的认识到 Scala 在现实生产环境中的实际应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jp9pGzOPY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Asabeneh/30-Days-Of-Python&#34;&gt;30-Days-Of-Python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个适合新手入门学习的 Python 教程《30-Days-Of-Python》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoySKu5Uy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/beginners-intro-javascript-node&#34;&gt;beginners-intro-javascript-node&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为了帮助前端开发者更好的掌握 JavaScript 和 Node.js 技术，微软在 GitHub 上开源了一个教程：《 Intro to JavaScript (Node.js)》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JowwDfaiX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/darkTianTian/sword-for-offer&#34;&gt;sword-for-offer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个使用了 Python3 实现《剑指 Offer 第二版》题目的开源项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JopsfxyuE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/preslavmihaylov/booknotes/tree/master/java/java-concurrency-in-practice&#34;&gt;java-concurrency-in-practice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Java 并发实践》该书主要包括 Java 并发基础介绍、构建并发应用、性能优化与测试以及搭建自定义同步器、Java 内存模型等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JmJKN6dd2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/blynn/gitmagic&#34;&gt;gitmagic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Git 魔法书》该书主要面向初学者讲解 Git 基础知识与使用技巧，如代码提交、版本回滚、分支合并、冲突处理、索引维护及多人开发协作的整个流程等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jm47h1i8b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mml-book/mml-book.github.io&#34;&gt;mml-book.github.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《机器学习之数学》主要分为两大部分，一讲数学基础，二讲数学在机器学习算法中的应用。你能从该书中学到线性代数、微积分和概率论等数学基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkgKTBteH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huangsam/ultimate-python&#34;&gt;ultimate-python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Python 初级入门教程，包含了 Python 基础入门介绍、常用语法、数据结构、类以及部分进阶知识介绍&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jk9umcAft&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/snori74/linuxupskillchallenge&#34;&gt;linuxupskillchallenge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Linux 教程，该课程旨在通过一个月时间，让开发者快速掌握 Linux 基础使用技巧&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jk03RkqVf&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/moranzcw/Computer-Networking-A-Top-Down-Approach-NOTES&#34;&gt;Computer-Networking-A-Top-Down-Approach-NOTES&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份经典的计算机网络书籍《计算机网络－自顶向下方法》笔记。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JjlZKnK69&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/convex-optimization/convex-optimization.github.io&#34;&gt;convex-optimization.github.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费阅读的凸优化算法书籍《Algorithms for Convex Optimization》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiS8Qieau&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dhghomon/easy_rust&#34;&gt;easy_rust&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Easy Rust》该书的最大特点，在于它使用了较为基础的英文语法, 目的是为了让那些母语不是英语的人能更快的学习 Rust，以便降低他们学习的门槛&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JiIIlsh78&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/billie66/TLCL&#34;&gt;TLCL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本 Linux 命令行书籍：《The Linux Command Line》，中文翻译版：《快乐的 Linux 命令行》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JipRm24cb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iggredible/Learn-Vim&#34;&gt;Learn-Vim&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Learn-Vim》从这本书中，你将学到 Vim 窗口、选项卡的管理，快速打开和搜索文件，插入模式、集成外部命令、常用语法等 Vim 相关使用技巧&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JhZ9hpWgR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/s-matyukevich/raspberry-pi-os&#34;&gt;raspberry-pi-os&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;将基于树莓派与 Linux 内核，手把手教你创建一个简易版的操作系统，你能从这门课程中学到关于内核初始化、处理器初始化、进程调度器、虚拟内存管理等基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jhe0NsJHr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fastai/fastbook&#34;&gt;fastbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外非营利性科技组织 fast.ai 最近开放了他们的新版深度学习课程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jh3pfjGSE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wsdjeg/vim-galore-zh_cn&#34;&gt;vim-galore-zh_cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的 Vim 入门教程：《Vim Galore》，里面主要包含了 Vim 的基础知识讲解、安装指南、日常开发与调试技巧，以及一些较为实用的插件介绍&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JgAJpm8jm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SurviveSJTU/SurviveSJTUManual&#34;&gt;SurviveSJTUManual&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《上海交通大学生存手册》其内容分为立志篇、访谈集、生存技巧等三大篇章，致力于从学术上、工作上、日常生活上给学生以正确指引&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JgjrODqpC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/curiousily/Getting-Things-Done-with-Pytorch&#34;&gt;Getting-Things-Done-with-Pytorch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Getting Things Done with Pytorch》从该书中学到有关 PyTorch、神经网络、图像分类、人脸检测、情感分析等基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JghSp1x54&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iswbm/magic-python&#34;&gt;magic-python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Python 黑魔法手册》里面主要记录了与 Python 相关的一些语法冷知识、命令行使用技巧、开发技巧、编码习惯、开发工具等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfoSQ73X2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lyhue1991/eat_pytorch_in_20_days&#34;&gt;eat_pytorch_in_20_days&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《20 天内吃掉那只 PyTorch》本书主要基于 Pytorch 官方文档和函数文档整理编著而成，在篇章结构和范例选取上做了大量优化，对用户更加友好&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JfiZwCQRb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/swaroopch/byte-of-vim&#34;&gt;byte-of-vim&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《A Byte of Vim》这本书将会教授你一些与 Vim 相关的基础知识，例如 Vim 的发展历史、安装方式、常用操作与快捷命令，以及如何通过编写脚本与安装插件来扩展更多 Vim 功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jdjg0yFqK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/graykode/nlp-tutorial&#34;&gt;nlp-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;NLP 教程，包含了 CNN、RNN、Transformer 等 13 个常用的模型与代码实现，并且大部分都兼容了 TensorFlow 和 PyTorch 两大框架&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdgTT8LlY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/deep-learning-with-pytorch/dlwpt-code&#34;&gt;dlwpt-code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Deep Learning with PyTorch》全书累积近 500 页，15 个章节，并配以大量形象生动的插图，帮助开发者更好的掌握 PyTorch 技术&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JbrLVt10p&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jackfrued/Python-Core-50-Courses&#34;&gt;Python-Core-50-Courses&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Python 语言基础 50 课》你能学到关于 Python 语言元素、分支与循环结构、函数和模块、常用数据结构、列表和元组等基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7ea9gHSI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/michuanhaohao/ReID_tutorial_slides&#34;&gt;ReID_tutorial_slides&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《基于深度学习和行人重识别》主要适合深度学习和行人重识别领域无基础的入门者学习，有基础者无需学习此课程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J7bO1uCmx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/macrozheng/springcloud-learning&#34;&gt;springcloud-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 Spring Cloud 教程，里面涵盖了大部分核心组件的使用教程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J74JEqOs6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chai2010/go-ast-book&#34;&gt;go-ast-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Go 语法树入门》主要涵盖 CGO、Go 汇编语言、RPC 实现、Web 框架实现、分布式系统等高阶主题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5Scbb0If&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NiuTrans/MTBook&#34;&gt;MTBook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《机器翻译：统计建模与深度学习方法》主要对机器翻译的统计建模和深度学习方法进行较为系统的介绍&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5lv0hH1e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book&#34;&gt;Deep-Learning-with-TensorFlow-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《TensorFlow 2.0 深度学习开源书（龙书）》是一本面向人工智能，特别是深度学习初学者的书&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4DTIi6FF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dabeaz-course/practical-python&#34;&gt;practical-python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《实用的 Python 编程》课程共分为 10 个章节，向开发者教授 Python 的基础语法、数据处理、打包调试等知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J4zYaosR8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Dod-o/Statistical-Learning-Method_Code&#34;&gt;Statistical-Learning-Method_Code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;北京大学的一名学生手写实现了李航老师《统计学习方法》书中的全部算法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J2lxdzbC6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MingchaoZhu/DeepLearning&#34;&gt;DeepLearning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《深度学习》（花书）国内一位来自复旦大学的开发者基于数学推导和产生原理，重新描述书中概念，并用 Python (numpy 库为主) 再次复现了书本内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1Qhefu3Z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MingchaoZhu/InterpretableMLBook&#34;&gt;InterpretableMLBook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《可解释的机器学习》全书共累计 250 多页、7.8 万词、1200 多次提交&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1am286xg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datawhalechina/joyful-pandas&#34;&gt;joyful-pandas&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Joyful-Pandas》将从 Pandas 基础、数据分析方法、数据处理类型及动手实践四个模块入手，对 Pandas 进行系统性学习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IEEw937cx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangdoc/bash-tutorial&#34;&gt;bash-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Bash 脚本教程》作者是 IT 圈知名博主阮一峰，这份课程将向读者讲解 Bash 的一些基础用法，如变量、字符串操作、算术运算、脚本入门等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IDINemF9z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sjsdfg/effective-java-3rd-chinese&#34;&gt;effective-java-3rd-chinese)&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Java 高效编程》该书共包含 90 个条目，每个条目都单独讨论 Java 程序设计中的一条规则，这些规则将从正面反映出优秀程序员在实践工作中的一些做法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IDsgHiUWr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huzidaha/react-naive-book&#34;&gt;react-naive-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《React.js 小书》该书为有一点前端基础的并且是 React.js 零基础的同学而作，以帮助他们掌握 React.js 并且灵活地把 React.js 应用到实际项目当中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ICH8d436f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vahidk/EffectivePyTorch&#34;&gt;EffectivePyTorch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Effective PyTorch》这本教程致力于帮助工程师们以正确的方式，更加快速掌握 PyTorch 基础知识与开发技巧&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ICm1P6977&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lyhue1991/eat_tensorflow2_in_30_days&#34;&gt;eat_tensorflow2_in_30_days&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《30 天吃掉那只 TensorFlow 2.0 》该工具书既有教程又有指南，并按照内容难易程度、读者检索习惯和 TensorFlow 自身的层次结构来设计内容，让开发者可以循序渐进，层次清晰的按照功能查找相应范例&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ICaVbbYmG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geektutu/7days-golang&#34;&gt;7days-golang&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Go 语言教程，教你如何用 Go 在 7 天内做出一些比较实用的东西，如 Web 框架、分布式缓存、ORM 框架等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IxUXh9RlG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;图标库&#34;&gt;图标库&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/phosphor-icons/phosphor-home&#34;&gt;phosphor-home)&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面共提供了 588 个图标，拥有 6 种不同线条展示风格，你可将其应用于图标、演示文稿、网站页面等任意载体上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jr6N4tEkm&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bytedance/IconPark&#34;&gt;IconPark&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面提供了超过 1200 个高质量图标，并提供界面帮你完成图标定制&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JoohbDWh0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tabler/tabler-icons&#34;&gt;tabler-icons&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面包含了共计 550+ 个高质量 SVG 图标，用户自定义图标的大小、颜色以及线条粗细&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdsGvu7r2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;有趣网站&#34;&gt;有趣网站&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ronlut/jsonperf&#34;&gt;jsonperf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的测试网站：JSON Perf，可针对不同语言的 JSON 库进行序列化和反序列化 benchmark 性能测试&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAgMYxZxN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://tuzhidian.com/&#34;&gt;图之典&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给玩数据分析的同学推荐个比较实用的网站，在上面，你能轻松找到饼图、柱形图、桑基图、折线图、热力图、直方图等 22 种常用可视化图形，帮你完成日常的数据可视化工作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JkUCQ7zw0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.studytonight.com/&#34;&gt;Studytonight&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;推荐个很不错的编程学习网站，该网站上面提供了许多可免费学习的计算机科学课程，其中包含 Java、Python、C++ 等编程语言，Web 开发、计算机网络、操作系统、游戏开发、数据库操作、Git 使用等系列教程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jg8QgdSQo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://haveibeenpwned.com/&#34;&gt;have i been pwned?&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给你们分享个比较有意思的网站：have i been pwned?（我被卖了吗？）里面收录了超过 470 个网站，100 亿条账号的泄露数据，用户仅凭 email，便能快速评估自己账号的数据泄露情况&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JesKraO9K&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://visualgo.net/zh&#34;&gt;VisuAlgo.net&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;算法可视化网站，里面包含了排序、链表、哈希表、二叉搜索树、递归树、循环查找等常见算法动画。在动画执行的过程中，还会在网站右下角高亮显示当前动画的代码逻辑&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Je0Rj8YWe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://blog.robertelder.org/regular-expression-visualizer/&#34;&gt;RobertElder&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdyburKlG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://datavizcatalogue.com/ZH/&#34;&gt;数据可视化工具目录&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集与汇总了各类数据可视化工具的详细描述、图形示例以及可上手使用的工具集合与学习资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JcyhxbTFP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://delesign.com/&#34;&gt;DELESIGN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;很不错的设计资源网站，里面提供了大量可免费商用的插图、邮件、网站、品牌等设计素材及源码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JaXV1pjpq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://opensource.builders/&#34;&gt;OpenSource Builders&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集了超级多知名软件的开源替代品，像 GitHub、Slack、1Password、Facebook、YouTube、Shopify、Heroku 等产品&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jaq8Rn9PW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.unscreen.com/&#34;&gt;unscreen&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款超级实用的在线视频处理工具，能帮你快速移除视频背景，无需绿幕、无需编辑，轻点鼠标即可一键完成所有操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ja3m39c5L&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://devhints.io/&#34;&gt;Dev Hints&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面整理了各种技术类型的速查表，其中包括 Git、Vim、Go、MySQL、Linux、VSCode、Vue 等各大常用技术的速查表清单&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J8Rvueh83&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://ihateregex.io/&#34;&gt;i Hate Regex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个比较实用的正则表达式网站，可快速检索并匹配到合适的正则表达式，帮你完成如用户名、邮箱、日期、手机号码、密码等常见规则的验证&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J8o2W6IjZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://nodesign.dev&#34;&gt;No Design&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了许多十分便利的 UI 设计工具与设计资源，例如网站图标转换、字体测试、免费资源（图像、图标、设计稿）下载、UI 设计新资讯等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J5OXynCNZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://madewithml.com/&#34;&gt;Made With ML&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该平台上提供了大量与机器学习相关的文章、教程、工具、开源项目等资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J0VIfqfXl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://gate.ofo.moe/&#34;&gt;网站任意门&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个很有趣的网站，首页的按钮点击后，会将你随机传送到某个网站上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IEFGFfWPI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.semanticscholar.org/&#34;&gt;Semantic Scholar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;超级实用的搜索引擎，其目的在于打造一款专业的学术搜索引擎，让研究人员可以更为快速、精准的检索专业学术论文，力争在学术论文检索领域做到比 Google 更加智能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IB6VHxF8n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dpapathanasiou/simple-graph&#34;&gt;simple-graph&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个简易版的 SQLite 图数据库，可应用到社交网络、待办清单、CRM、甘特图等领域上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAI9L1n0o&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dushixiang/next-terminal&#34;&gt;next-terminal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 H5 远程桌面网关，具有小巧、易安装、易使用、资源占用小的特点，支持 RDP、SSH、VNC 和 Telnet 协议的连接和管理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JAyF4r3qi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FlaxEngine/FlaxEngine&#34;&gt;FlaxEngine&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 C++ 与 C# 开发的现代化 3D 游戏引擎：FlaxEngine，致力于优化现有的游戏工作流程，可采用 Visual Studio 快速安装&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JzvEvwglz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/owncast/owncast&#34;&gt;owncast&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你想保证与朋友进行直播的数据私密性，那么可以用 GitHub 上的 Owncast 项目来搭建属于自己的实时流媒体服务器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jztin4l1A&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ggerganov/kbd-audio&#34;&gt;kbd-audio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过麦克风捕获到键盘的敲击声，进而推断出具体输入内容，详细操作可看视频演示&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jz2bWoOmr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cdoco/common-regex&#34;&gt;common-regex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集了一些在平时项目开发中经常用到的正则表达式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyTWvc0Ee&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/201206030/fiction_house&#34;&gt;fiction_house&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的小说漫画连载系统，支持 Web、Android 等平台，包含精品小说专区、轻小说专区和漫画专区&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyRAn4Xy6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/stenzek/duckstation&#34;&gt;duckstation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 PS1 模拟器，支持在 Windows 10、Linux、macOS、Android 等主流设备上运行 PS1 游戏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JyCsK2IU7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/justinzm/gopup&#34;&gt;gopup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面采集了互联网上，不同行业的各项公开数据源，以便开发者更好的进行学术研究&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jy8O2sWc8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yyhsong/iDataV&#34;&gt;iDataV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了各个大厂，各种类型的大屏数据可视化案例&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxZnwr32P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WerWolv/ImHex&#34;&gt;ImHex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;对知名十六进制编辑软件 Hex 进行逆向工程，让你看看里面究竟长啥样&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxPZOqLJk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Rgveda/996Quant&#34;&gt;996Quant&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 35 岁程序员退路之量化投资学习笔记&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxCAZ1ay6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/porn-vault/porn-vault&#34;&gt;porn-vault&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的影片资源管理系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JxnFxiKHI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kallydev/privacy&#34;&gt;privacy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个个人数据泄漏检测网站&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JwfKwhBW4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dabreegster/abstreet&#34;&gt;abstreet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的公共交通模拟游戏，可让你充分的了解道路的微小变化是如何影响到自行车骑手、搭公交的用户、行人和驾驶员的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JvmKXlZjH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mylxsw/wizard&#34;&gt;wizard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的文档管理系统，支持 Markdown、Swagger、Table（类 Excel）等三种文档类型&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jtw3Ac5w6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Wei-Xia/most-frequent-technology-english-words&#34;&gt;most-frequent-technology-english-words&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;里面收集了计算机书籍、文档、文章中高频常见的英文技术词汇，最终目的是希望程序员集合自身的英语基础，在掌握列表中的词汇后，可以无障碍阅读英语技术文章和文档&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JsEf56NCa&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yihong0618/running_page&#34;&gt;running_page&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过 GitHub Actions + Gatsby 自动完成跑步进程的同步管理，并生成一个直观简洁的跑步界面，让用户可以更为方便的记录自己在不同时段、不同日期的跑步频率与旅程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JstDwndYK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nghuyong/weibo-public-opinion-datasets&#34;&gt;weibo-public-opinion-datasets&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的数据集：微博舆论数据集。里面包含了 2000 万微博活跃用户（占用户总数 8%），在某个时间段的推文数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrL3kypNC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/3b1b/manim&#34;&gt;manim&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过编程的方式，快速帮助用户创建精美酷炫的数学动画，支持 Linux、macOS、Windows 等主流操作系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Jrs0aua6n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Debdut/names.io&#34;&gt;names.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一个开源的姓名数据库，里面收录了来自不同国家与地区的 16w 个名字、10w 个姓氏，便于开发者进行分析测试，或生成假数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JrqQo89RC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lanyulei/ferry&#34;&gt;ferry&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个前后端分离的工单系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JmwoLuI4n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TophantTechnology/ARL&#34;&gt;ARL&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 ARL（资产侦察灯塔系统），支持设定域名爆破、端口扫描、服务识别、SSL 证书获取、站点识别、搜索引擎调用、站点爬虫与截图等 18 项任务&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JlN0d3ed6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kizniche/Mycodo&#34;&gt;Mycodo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的可运行在树莓派上的自动监控和调节系统，应用在种植植物，培养微生物，保持蜂蜜蜂房稳态，孵化动物和鸡蛋，维持水生系统等等场景&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ji9KQ6cQY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/meilisearch/MeiliSearch&#34;&gt;MeiliSearch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源免费、功能强大、快速、易于使用和部署的搜索引擎&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ji70molVF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/metersphere/metersphere&#34;&gt;metersphere&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一站式持续测试平台，涵盖测试跟踪、接口测试、性能测试、团队协作等功能，全面兼容 JMeter、Postman 等主流标准&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/JdC7IEr29&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LingDong-/shan-shui-inf&#34;&gt;shan-shui-inf&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可通过程序生成中国山水画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J6JEiByfd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/goabstract/Marketing-for-Engineers&#34;&gt;Marketing-for-Engineers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你是一名程序员，却不太懂得做市场营销，那可以关注下这个项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J3zUejXcs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/myspaghetti/macos-virtualbox&#34;&gt;macos-virtualbox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个开源脚本可让你在 VirtualBox 上快速安装苹果操作系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J3qvOly9m&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/openspug/spug&#34;&gt;spug&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个面向中小型企业设计的无 Agent 自动化运维平台，整合了主机管理、主机批量执行、主机在线终端、应用发布、任务计划、配置中心、监控、报警等一系列功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/J1ZHJ6AjF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wenyan-lang/wenyan&#34;&gt;wenyan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;文言文编程项目，含有官方文档、入门教程、IDE、语法高亮、软件包一应俱全了&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Iyg7twVTI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chatwoot/chatwoot&#34;&gt;chatwoot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的简洁且漂亮的实时聊天软件，支持一键部署&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IoRf1msYS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/go-kratos/kratos&#34;&gt;kratos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套来自 bilibili 开源的 Go 微服务框架，包含大量微服务相关框架及工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IousujCUA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>为什么容器内存占用居高不下，频频 OOM</title>
      <link>https://note.lican.site/posts/posts/why-container-memory-exceed/</link>
      <pubDate>Sun, 07 Jun 2020 14:52:19 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/why-container-memory-exceed/</guid>
      <description>&lt;p&gt;最近我在回顾思考（写 PPT），整理了现状，发现了这个问题存在多时，经过一番波折，最终确定了元凶和相对可行的解决方案，因此也在这里分享一下排查历程。&lt;/p&gt;&#xA;&lt;p&gt;时间线：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在上 Kubernetes 的前半年，只是用 Kubernetes，开发没有权限，业务服务极少，忙着写新业务，风平浪静。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在上 Kubernetes 的后半年，业务服务较少，偶尔会阶段性被运维唤醒，问之 “&lt;strong&gt;为什么你们的服务内存占用这么高，赶紧查&lt;/strong&gt;”。此时大家还在为新业务冲刺，猜测也许是业务代码问题，但没有调整代码去尝试解决。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在上 Kubernetes 的第二年，业务服务逐渐增多，普遍增加了容器限额 Limits，出现了好几个业务服务是内存小怪兽，因此如果不限制的话，服务过度占用会导致驱逐，因此反馈语也就变成了：“&lt;strong&gt;为什么你们的服务内存占用这么高，老被 OOM Kill，赶紧查&lt;/strong&gt;”。据闻也有几个业务大佬有去排查（因为 OOM 反馈），似乎没得出最终解决方案。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;不禁让我们思考，为什么个别 Go 业务服务，Memory 总是提示这么高，经常达到容器限额，以至于被动 OOM Kill，是不是有什么安全隐患？&lt;/p&gt;&#xA;&lt;h2 id=&#34;现象&#34;&gt;现象&lt;/h2&gt;&#xA;&lt;h3 id=&#34;内存居高不下&#34;&gt;内存居高不下&lt;/h3&gt;&#xA;&lt;p&gt;发现个别业务服务内存占用挺高，触发告警，且通过 Grafana 发现在凌晨（没有什么流量）的情况下，内存占用量依然拉平，没有打算下降的样子，高峰更是不得了，像是个内存炸弹：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/2e6c8c153836b29175dff7623ec67a0a.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;并且我所观测的这个服务，早年还只是 100MB。现在随着业务迭代和上升，目前已经稳步 4GB，容器限额 Limits 纷纷给它开道，但我想总不能是无休止的增加资源吧，这是一个大问题。&lt;/p&gt;&#xA;&lt;h3 id=&#34;进入重启怪圈&#34;&gt;进入重启怪圈&lt;/h3&gt;&#xA;&lt;p&gt;有的业务服务，业务量小，自然也就没有调整容器限额，因此得不到内存资源，又超过额度，就会进入疯狂的重启怪圈：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/95644633a2d55cb2f2684a23d3f3f189.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;重启将近 300 次，非常不正常了，更不用提所接受到的告警通知。&lt;/p&gt;&#xA;&lt;h2 id=&#34;排查&#34;&gt;排查&lt;/h2&gt;&#xA;&lt;h3 id=&#34;猜想一频繁申请重复对象&#34;&gt;猜想一：频繁申请重复对象&lt;/h3&gt;&#xA;&lt;p&gt;出现问题的个别业务服务都有几个特点，那就是基本为图片处理类的功能，例如：图片解压缩、批量生成二维码、PDF 生成等，因此就怀疑是否在量大时频繁申请重复对象，而 Go 本身又没有及时释放内存，因此导致持续占用。&lt;/p&gt;&#xA;&lt;h4 id=&#34;syncpool&#34;&gt;sync.Pool&lt;/h4&gt;&#xA;&lt;p&gt;基本上想解决 “频繁申请重复对象”，我们大多会采用多级内存池的方式，也可以用最常见的 sync.Pool，这里可参考全成所借述的《Go 夜读》上关于 sync.Pool 的分享，关于这类情况的场景：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;当多个 goroutine 都需要创建同⼀个对象的时候，如果 goroutine 数过多，导致对象的创建数⽬剧增，进⽽导致 GC 压⼒增大。形成 “并发⼤－占⽤内存⼤－GC 缓慢－处理并发能⼒降低－并发更⼤”这样的恶性循环。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h4 id=&#34;验证场景&#34;&gt;验证场景&lt;/h4&gt;&#xA;&lt;p&gt;在描述中关注到几个关键字，分别是并发大，Goroutine 数过多，GC 压力增大，GC 缓慢。也就是需要满足上述几个硬性条件，才可以认为是符合猜想的。&lt;/p&gt;&#xA;&lt;p&gt;通过拉取 PProf goroutine，可得知 Goroutine 数并不高：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Proto 代码到底放哪里？</title>
      <link>https://note.lican.site/posts/posts/where-is-proto/</link>
      <pubDate>Sat, 23 May 2020 15:07:37 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/where-is-proto/</guid>
      <description>&lt;p&gt;虽然公司已经从大单体切换为微服务化有一定的年头了，但一些细节方面的处理总会有不同的人有不同的看法，这其中一个讨论点，就是 Proto 这个 IDL 的代码到底放在哪里？&lt;/p&gt;&#xA;&lt;p&gt;目前来看，一共有如下方案， 我们一起来探讨一下 Proto 的存储方式和对应带来的优缺点。&lt;/p&gt;&#xA;&lt;h2 id=&#34;方案一存放在代码仓库&#34;&gt;方案一：存放在代码仓库&lt;/h2&gt;&#xA;&lt;p&gt;直接将项目所依赖到的所有 Proto 文件都存放在 &lt;code&gt;proto/&lt;/code&gt; 目录下，不经过开发工具的自动拉取和发布：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/7e95a76d548197cf73e7238ee5df27e6.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;缺点&#34;&gt;缺点&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;项目所有依赖的 Proto 都存储在代码仓库下，因此所有依赖 Proto 都需要人工的向其它业务组 “要” 来，再放到 &lt;code&gt;proto/&lt;/code&gt; 目录下，人工介入极度麻烦。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Proto 升级和变更，经常要重复第一步，沟通成本高。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;优点&#34;&gt;优点&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;项目所有依赖的 Proto 都存储在代码仓库下，因此不涉及个人开仓库权限的问题。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;多 Proto 的切换开销减少，因为都在代码仓库下，不需要看这看那。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;方案二独立仓库&#34;&gt;方案二：独立仓库&lt;/h2&gt;&#xA;&lt;p&gt;独立仓库存储是我们最早采取的方式，也就是每个服务对应配套一个 Proto 仓库：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/a7575628ff1ae9179f022d477aba9df1.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;这个方案的好处就是可以独立管理所有 Proto 仓库，并且权限划分清晰。但最大的优点也是最大的缺点，因为一个服务会依赖多个 Proto 仓库，并且存在跨业务组调用的情况：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/31c5a5b5652f44750124c15e1c0ef397.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;如上图所示，svc-user 服务分别依赖了三块 Proto 仓库，分别是自己组的、业务组 A、业务组 B 总共的 6 个 Proto 仓库。&lt;/p&gt;&#xA;&lt;h3 id=&#34;缺点-1&#34;&gt;缺点&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;假设你是一个新入职的开发人员，那么你就需要找不同的业务组申请不同的仓库权限，非常麻烦。如果没有批量赋权工具，也没有管理者权限，那么就需要一个个赋权，非常麻烦。&lt;/li&gt;&#xA;&lt;li&gt;在运行服务的时候，你需要将所有相关联的 Proto 仓库拉取下来，如果没有工具做半自动化的支持，麻烦程度无法忍受。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;优点-1&#34;&gt;优点&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;使得安全性较高（但 IDL 本身没有太多的秘密）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;按需拉取，不需要关注其余的服务 Proto。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;方案三集中仓库&#34;&gt;方案三：集中仓库&lt;/h2&gt;&#xA;&lt;p&gt;集中仓库也是一些公司考虑的方式之一，是按公司或大事业部的维度进行 Proto 代码的存储，这样子只需要拉取一个仓库，就可以获取到所有所需的 IDL：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Prometheus 对 Go 程序进行指标采集</title>
      <link>https://note.lican.site/posts/posts/prometheus/2020-05-16-pull/</link>
      <pubDate>Sun, 17 May 2020 17:52:37 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/prometheus/2020-05-16-pull/</guid>
      <description>&lt;p&gt;在前面的章节中，已经知道了如何对应用程序进行 Prometheus metrics 的注册和暴露，那么接下来如何让 Prometheus 对应用程序进行采集呢。&lt;/p&gt;&#xA;&lt;h2 id=&#34;设置采集配置&#34;&gt;设置采集配置&lt;/h2&gt;&#xA;&lt;p&gt;首先打开先前所安装的 prometheus 软件目录：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LICENSE                data                   promtool&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NOTICE                 prometheus             rules&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;console_libraries      prometheus.yml         tsdb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;consoles               prometheus.yml.default&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;打开并修改 prometheus.yml 文件，查看到 &lt;a href=&#34;https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config&#34;&gt;scrape_configs&lt;/a&gt; 配置选项，进行如下调整：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;scrape_configs:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - job_name: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;test01&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    static_configs:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - targets: &lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;127.0.0.1:10001&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    scheme: http&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    tls_config:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        insecure_skip_verify: false&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;先前所启动的应用程序是在本地，且端口号为 10001，协议为 http，对应的配置简述：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;job_name：采集的任务名。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;static_configs.targets：设置要采集的目标对象列表。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;scheme：采集的目标协议（例如：http、https）。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;tls_config.insecure_skip_verify：是否跳过证书校验。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;常用的配置项如上几个，其默认的 metrics path 为 &lt;code&gt;/metrics&lt;/code&gt;，若需要调整则增加 metrics_path 配置项进行调整就可以了，接着重新启动 prometheus 就可以了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;其他配置项&#34;&gt;其他配置项&lt;/h2&gt;&#xA;&lt;p&gt;再返回来看看 prometheus.yaml 文件：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;global:&#xA;  scrape_interval:     15s &#xA;  evaluation_interval: 15s&#xA;&#xA;&#xA;alerting:&#xA;  alertmanagers:&#xA;  - static_configs:&#xA;    - targets:&#xA;       - localhost:9093&#xA;&#xA;rule_files:&#xA;   - ../rules/*.yaml&#xA;&#xA;scrape_configs:&#xA;  - job_name: &amp;#39;test01&amp;#39;&#xA;    static_configs:&#xA;    - targets: [&amp;#39;127.0.0.1:10001&amp;#39;]&#xA;    scheme: http&#xA;    tls_config:&#xA;        insecure_skip_verify: false&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;scrape_interval：采集间隔（频率）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prometheus 四大度量指标的了解和应用</title>
      <link>https://note.lican.site/posts/posts/prometheus/2020-05-16-metrics/</link>
      <pubDate>Sat, 16 May 2020 15:08:51 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/prometheus/2020-05-16-metrics/</guid>
      <description>&lt;p&gt;在上一个章节中我们完成了 Prometheus 的基本概念了解和安装，由于考虑到看我博客的估计是开发向的小伙伴居多，因此没有再更深入。而今天本章节将介绍我们开发用的最多的度量指标，并结合实战对 Metrics 进行使用和细节分析。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是度量指标&#34;&gt;什么是度量指标&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;来自维基百科&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;度量是指对于一个物体或是事件的某个性质给予一个数字，使其可以和其他物体或是事件的相同性质比较。度量可以是对一物理量（如长度、尺寸或容量等）的估计或测定，也可以是其他较抽象的特质。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，也就是数据的量化，形成对应的数据指标。&lt;/p&gt;&#xA;&lt;h2 id=&#34;prometheus-的指标格式&#34;&gt;Prometheus 的指标格式&lt;/h2&gt;&#xA;&lt;p&gt;在 Prometheus 中，我们的指标表示格式如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;metric name&amp;gt;{&amp;lt;label name&amp;gt;=&amp;lt;label value&amp;gt;, ...}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;主体为指标名称和标签组成：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;api_http_requests_total{method=&amp;#34;POST&amp;#34;, handler=&amp;#34;/eddycjy&amp;#34;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;对外提供-metrics-服务&#34;&gt;对外提供 metrics 服务&lt;/h2&gt;&#xA;&lt;p&gt;首先创建一个示例项目：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;engine&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;New&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;engine&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/hello&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;String&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusOK&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;engine&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Run&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:10001&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下我们需要安装 Prometheus Client SDK，在 Go 语言中对应 &lt;a href=&#34;https://github.com/prometheus/client_golang&#34;&gt;prometheus/client_golang&lt;/a&gt; 库：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ go get github.com/prometheus/client_golang&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后调用 &lt;code&gt;promhttp.Handler&lt;/code&gt; 方法创建对应的 metrics：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;engine&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/metrics&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;WrapH&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;promhttp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Handler&lt;/span&gt;()))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;engine&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Run&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:10001&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;重新启动程序，并访问 &lt;code&gt;http://127.0.0.1:10001/metrics&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE go_gc_duration_seconds summary&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.25&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.5&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.75&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;quantile&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds_sum &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_gc_duration_seconds_count &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP go_goroutines Number of goroutines that currently exist.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE go_goroutines gauge&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_goroutines &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP go_info Information about the Go environment.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE go_info gauge&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_info&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;version&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;go1.14.2&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# HELP go_memstats_alloc_bytes Number of bytes allocated and still in use.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# TYPE go_memstats_alloc_bytes gauge&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;go_memstats_alloc_bytes 2.563056e+06&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们可以聚焦其中一个指标：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Prometheus 快速入门</title>
      <link>https://note.lican.site/posts/posts/prometheus/2020-05-16-startup/</link>
      <pubDate>Sat, 16 May 2020 12:05:58 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/prometheus/2020-05-16-startup/</guid>
      <description>&lt;p&gt;一般我们说 Prometheus，有两种理解，我们平时需要注意识别的，其含义有两种，一是指的 Prometheus 自身，是一个时序数据库；另外一种是指 Prometheus 生态圈，指的是是整体的监控报警的生态圈和解决方案（Prometheus+Grafana+Alertmanager）。&lt;/p&gt;&#xA;&lt;p&gt;Prometheus 在 2016年加入了 CNCF（Cloud Native Computing Foundation），是继 Kubernetes 之后的第二个托管项目，目前已经毕业，其主要的特点如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多维度的数据模型：由指标名称和键/值对标签标识的时间序列数据来组成多维的数据模型。&lt;/li&gt;&#xA;&lt;li&gt;灵活的查询语言：在 Prometheus 中使用强大的查询语言 PromSQL 来进行查询。&lt;/li&gt;&#xA;&lt;li&gt;不依赖分布式存储，Prometheus 单个节点也可以直接工作，支持本地存储（TSDB）和远程存储的模式。&lt;/li&gt;&#xA;&lt;li&gt;服务端采集数据：Prometheus 基于 HTTP pull 方式去对不同的端采集时间序列数据。&lt;/li&gt;&#xA;&lt;li&gt;客户端主动推送：支持通过 PushGateway 组件主动推送时间序列数据。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prometheus-生态组件&#34;&gt;Prometheus 生态组件&lt;/h2&gt;&#xA;&lt;p&gt;Prometheus 生态由多个组件共同组成，其中许多组件是可根据实际情况选择的，并且绝大部分由 Go 语言编写，在部署和构建上比较方便，如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Prometheus Server：&lt;a href=&#34;https://github.com/prometheus/prometheus&#34;&gt;Prometheus 服务端&lt;/a&gt;，用于收集指标和存储时间序列数据，并提供一系列的查询和设置接口。&lt;/li&gt;&#xA;&lt;li&gt;Client Libraries：&lt;a href=&#34;https://prometheus.io/docs/instrumenting/clientlibs/&#34;&gt;客户端库&lt;/a&gt;，用于帮助需要监控采集的服务暴露 metrics handler 给 Prometheus server。例如像 &lt;a href=&#34;https://github.com/prometheus/client_golang/blob/master/examples/simple/main.go&#34;&gt;例子&lt;/a&gt; 中直接调用 promhttp 暴露了一个 metrics 接口。&lt;/li&gt;&#xA;&lt;li&gt;Push Gateway：推送网关，Prometheus 服务端仅支持 HTTP pull 的采集方式，而有一些指存在的时间短，Prometheus 来 pull 前就结束了。又或是该类指标，就是要客户端自行上报的，这时候就可以采用 Push Gateway 的方式，客户端将指标 push 到 Push Gateway，再由 Prometheus Server 从 Pushgateway 上 pull。&lt;/li&gt;&#xA;&lt;li&gt;Exporters：用于暴露已有的第三方服务（HAProxy，StatsD，Graphite）的 metrics 给 Prometheus Server。&lt;/li&gt;&#xA;&lt;li&gt;Alertmanager：用于处理告警，从 Prometheus server 端接收到 alerts 后，会进行去重，分组，然后路由到对应的Receiver，发出报警。&lt;/li&gt;&#xA;&lt;li&gt;Support Tools：各种支持工具。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;prometheus-整体流程图&#34;&gt;Prometheus 整体流程图&lt;/h2&gt;&#xA;&lt;p&gt;Prometheus 的整体架构和生态组件组成，如下图所示：&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Go 程序调用 Kubernetes API</title>
      <link>https://note.lican.site/posts/posts/kubernetes/2020-05-10-api/</link>
      <pubDate>Sun, 10 May 2020 21:20:26 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/kubernetes/2020-05-10-api/</guid>
      <description>&lt;p&gt;在前面的章节中，我们介绍了快速部署 Kubernetes 和应用程序的方法，接下来在本章节中我们将对 Kubernetes 的 API 进行了解，并且进行调用，这是开发人员最关注的一环之一。&lt;/p&gt;&#xA;&lt;p&gt;因为不论是 DevOps、基础架构，又或是自愈，都需要与 Kubernetes API 直接/间接接触，因此即使在你不懂 Kubernetes 的情况下，Kubernetes API 的知识点仍然属于必知必会，API 总得会调。&lt;/p&gt;&#xA;&lt;h2 id=&#34;查看-kubernetes-api&#34;&gt;查看 Kubernetes API&lt;/h2&gt;&#xA;&lt;h3 id=&#34;kube-apiserver-架构图&#34;&gt;kube-apiserver 架构图&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://d33wubrfki0l68.cloudfront.net/7016517375d10c702489167e704dcb99e570df85/7bb53/images/docs/components-of-kubernetes.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;（图来自 kubernetes.io）&lt;/p&gt;&#xA;&lt;p&gt;在 Kubernetes 的架构中，由 kube-apiserver 组件在主节点上提供 Kubernetes API 服务，kube-apiserver 是 Kubernetes 所有控制的前端，对外提供大量的 RESTful API。&lt;/p&gt;&#xA;&lt;p&gt;最常见的就是 kubelet 命令，实际上也是在调用 kube-apiserver 所提供的的 API。&lt;/p&gt;&#xA;&lt;h3 id=&#34;访问-api-和查看列表&#34;&gt;访问 API 和查看列表&lt;/h3&gt;&#xA;&lt;p&gt;在了解 Kubernetes 的基本架构和提供 API 的方式后，接下来我们需要知道 Kubernetes 到底提供了哪些 API。为了方便调试，首先我们需要在本地运行 &lt;code&gt;kubectl proxy&lt;/code&gt; 命令，kube-apiserver 就会在本地的 8001 端口上进行监听，也就是提供了一个 Kubernetes API 服务的 HTTP 代理。&lt;/p&gt;&#xA;&lt;p&gt;这个时候我们可以访问：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ curl http://localhost:8001/api/v1/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看所提供的对应 API‘s：&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Kubernetes 中部署应用程序</title>
      <link>https://note.lican.site/posts/posts/kubernetes/2020-05-03-deployment/</link>
      <pubDate>Sun, 03 May 2020 11:05:00 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/kubernetes/2020-05-03-deployment/</guid>
      <description>&lt;p&gt;在完成了本地 Kubernetes 的快速搭建（基于 Docker）后，我们已经可以正式的使用它了。对于我们平时最常见的需求，那就是往 Kubernetes 里部署应用程序，如果你没有看过 Kubernetes 相关的知识，这时候你可能会六神无主，但问题不大，我们就可以使用最经典的 Nginx 来小试身手。&lt;/p&gt;&#xA;&lt;h2 id=&#34;创建-deployment&#34;&gt;创建 Deployment&lt;/h2&gt;&#xA;&lt;p&gt;创建 nginx-deployment.yaml 文件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;apps/v1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Deployment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx-deployment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;labels&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;replicas&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;selector&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;matchLabels&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;template&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;labels&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;app&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;containers&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      - &lt;span style=&#34;color:#f92672&#34;&gt;name&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;nginx:1.18.0&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;应用 nginx-deployment.yaml 文件：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl apply -f nginx-deployment.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;deployment.apps/nginx-deployment created&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;查看运行状态&#34;&gt;查看运行状态&lt;/h2&gt;&#xA;&lt;p&gt;查看 Pod 运行情况：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl get pods&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NAME                               READY   STATUS    RESTARTS   AGE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nginx-deployment-9fbc65d67-9j68x   1/1     Running   &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;          1m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nginx-deployment-9fbc65d67-nwbhj   1/1     Running   &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;          1m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看 Deployment 部署情况：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ kubectl get deployment&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NAME               READY   UP-TO-DATE   AVAILABLE   AGE&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nginx-deployment   2/2     &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;            &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;           29m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们也可以通过 describe 命令进行查看&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes 本地快速启动（基于 Docker）</title>
      <link>https://note.lican.site/posts/posts/kubernetes/2020-05-01-install/</link>
      <pubDate>Fri, 01 May 2020 11:25:52 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/kubernetes/2020-05-01-install/</guid>
      <description>&lt;p&gt;Kubernetes 在容器编排大战结束后已经在云原生中占据了明确的一席，最近几年越来越火热，目前搜索趋势：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/2583d073cc05df561c735564bb3e9e81.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Kubernetes 的热度很明显是不断地在上涨，因此学习和使用 Kubernetes 是一件相对正确的事，同时公司大多都在往容器化上接近，在拥抱 Kubernetes，所以我们所开发的应用也总是跑在容器环境中。更甚的是，需要对接 Kubernetes API 来做一些功能的开发。&lt;/p&gt;&#xA;&lt;p&gt;这个时候，我们就需要一个 Kubernetes 环境来进行开发和调试，但你准备开始时，又遇到了一个问题，虽然在 2020 年的现在，Kubernetes 的安装已经有了极大的简化，教程也满地跑，但 Kubernetes 的安装和运行依然有一定的要求，像我，就遇到了如下问题：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/9ee9dd19241bfc9099603abcc455787d.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;显然，我的小水管 Mac 承受不起，但是又需要对 Kubernetes 进行学习和使用，除了买云服务器，又或是再在台式机上搭虚拟机，还有没有什么办法呢。&lt;/p&gt;&#xA;&lt;p&gt;非运维开发的情况下，入门级中最简单的方式就是采用 Docker 所提供的 Kubernetes 支持。&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker-for-macwindows-with-kubernetes&#34;&gt;Docker for Mac/Windows with Kubernetes&lt;/h2&gt;&#xA;&lt;p&gt;Docker 在 17.12.ce 起就提供了 Mac 版本的 &lt;a href=&#34;https://www.docker.com/blog/docker-mac-kubernetes/&#34;&gt;Kubernetes Beta&lt;/a&gt; 支持，在初始使用上来说非常的方便。首先我们检查 Docker 的版本，点击 Docker -&amp;gt; Check for Updates 确保你的 Docker 在最新版本。&lt;/p&gt;&#xA;&lt;h2 id=&#34;快速安装-kubernetes&#34;&gt;快速安装 Kubernetes&lt;/h2&gt;&#xA;&lt;p&gt;在升级完成后，我们可以点击 Docker -&amp;gt; Preferences -&amp;gt; Kubernetes，如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/85e953f790c6b6955aa307445a8cf67a.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;你会发现存在三个选项，分别是：Enable Kubernete、Deploy Docker Stacks to Kubernetes by default、Show system containers (advanced)。&lt;/p&gt;</description>
    </item>
    <item>
      <title>2020年下半年：读书清单</title>
      <link>https://note.lican.site/posts/posts/reading/2020-04-24-book/</link>
      <pubDate>Fri, 24 Apr 2020 22:00:45 +0800</pubDate>
      <guid>https://note.lican.site/posts/posts/reading/2020-04-24-book/</guid>
      <description>&lt;p&gt;2020 年的上半年因为一些事情耽搁了整体的进程，不过最近也快要到 Deadline 了，因此又愉快的能空出手了。&lt;/p&gt;&#xA;&lt;p&gt;回顾这几年在个人技能上，我随着公司的大泥球应用再到微服务化的飞速发展，经历了很多，突破了更多，有了不少新的感悟。因此今年打算再修修内功，认识一下自己的弱小，所以读书清单会比较偏基础方向，如下：&lt;/p&gt;&#xA;&lt;h2 id=&#34;必看&#34;&gt;必看&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;《图解 TCP/IP》&lt;/li&gt;&#xA;&lt;li&gt;《TCP/IP 详解 卷1：协议》&lt;/li&gt;&#xA;&lt;li&gt;《深入理解计算机系统》&lt;/li&gt;&#xA;&lt;li&gt;《大话数据结构》&lt;/li&gt;&#xA;&lt;li&gt;《算法（第4版）》&lt;/li&gt;&#xA;&lt;li&gt;《剑指 Offer》&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.bilibili.com/video/BV1js411b7vg&#34;&gt;《操作系统_清华大学》&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;可选&#34;&gt;可选&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;《Unix 环境高级编程（第3版）》&lt;/li&gt;&#xA;&lt;li&gt;《SRE Google 运维解密》：进行中，已经了看了不少。&lt;/li&gt;&#xA;&lt;li&gt;《Google 工作法》：进行中，已经了看了不少。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;所有的目标都需要有一个验收的标准和奖罚，否则所谓的目标意义不会特别大。我想，&lt;strong&gt;验收标准就是 &lt;a href=&#34;https://github.com/eddycjy/reread-cs-notes&#34;&gt;《重读 CS》&lt;/a&gt; 的基本成型&lt;/strong&gt;，其它不在该集合类的属于第二梯队，考虑释出读书笔记。&lt;/p&gt;&#xA;&lt;p&gt;惩罚的话，发红包还是送书呢，先想想。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Modules 终极入门</title>
      <link>https://note.lican.site/posts/posts/go/go-moduels/2020-02-28-go-modules/</link>
      <pubDate>Fri, 28 Feb 2020 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-moduels/2020-02-28-go-modules/</guid>
      <description>&lt;p&gt;Go modules 是 Go 语言中正式官宣的项目依赖解决方案，Go modules（前身为vgo）于 Go1.11 正式发布，在 Go1.14 已经准备好，并且可以用在生产上（ready for production）了，Go官方也鼓励所有用户从其他依赖项管理工具迁移到 Go modules。&lt;/p&gt;&#xA;&lt;p&gt;而 Go1.14，在近期也终于正式发布，Go 官方亲自 “喊” 你来用：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/243fb2cca64972b2f36827f59b26d840.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;因此在今天这篇文章中，我将给大家带来 Go modules 的 “终极入门”，欢迎大家一起共同探讨。&lt;/p&gt;&#xA;&lt;p&gt;Go modules 是 Go 语言中正式官宣的项目依赖管理工具，Go modules（前身为vgo）于 Go1.11 正式发布，在 Go1.14 已经准备好，并且可以用在生产上（ready for production）了，鼓励所有用户从其他依赖项管理工具迁移到 Go modules。&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是go-modules&#34;&gt;什么是Go Modules&lt;/h2&gt;&#xA;&lt;p&gt;Go modules 是 Go 语言的依赖解决方案，发布于 Go1.11，成长于 Go1.12，丰富于 Go1.13，正式于 Go1.14 推荐在生产上使用。&lt;/p&gt;&#xA;&lt;p&gt;Go moudles 目前集成在 Go 的工具链中，只要安装了 Go，自然而然也就可以使用 Go moudles 了，而 Go modules 的出现也解决了在 Go1.11 前的几个常见争议问题：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Go 语言长久以来的依赖管理问题。&lt;/li&gt;&#xA;&lt;li&gt;“淘汰”现有的 GOPATH 的使用模式。&lt;/li&gt;&#xA;&lt;li&gt;统一社区中的其它的依赖管理工具（提供迁移功能）。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;gopath的那些点点滴滴&#34;&gt;GOPATH的那些点点滴滴&lt;/h2&gt;&#xA;&lt;p&gt;我们有提到 Go modules 的解决的问题之一就是“淘汰”掉 GOPATH，但是 GOPATH 又是什么呢，为什么在 Go1.11 前就使用 GOPATH，而 Go1.11 后就开始逐步建议使用 Go modules，不再推荐 GOPATH 的模式了呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>干货满满的 Go Modules 和 goproxy.cn</title>
      <link>https://note.lican.site/posts/posts/go/go-moduels/2019-09-29-goproxy-cn/</link>
      <pubDate>Sun, 29 Sep 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/go-moduels/2019-09-29-goproxy-cn/</guid>
      <description>&lt;p&gt;大家好，我是一只普通的煎鱼，周四晚上很有幸邀请到 goproxy.cn 的作者 @盛傲飞（@aofei） 到 Go 夜读给我们进行第 61 期 《Go Modules、Go Module Proxy 和 goproxy.cn》的技术分享。&lt;/p&gt;&#xA;&lt;p&gt;本次 @盛傲飞 的夜读分享，是对 Go Modules 的一次很好的解读，比较贴近工程实践，我必然希望把这块的知识更多的分享给大家，因此有了今天本篇文章，同时大家也可以多关注 Go 夜读，每周会通过 zoom 在线直播的方式分享 Go 相关的技术话题，希望对大家有所帮助。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;Go 1.11 推出的模块（Modules）为 Go 语言开发者打开了一扇新的大门，理想化的依赖管理解决方案使得 Go 语言朝着计算机编程史上的第一个依赖乌托邦（Deptopia）迈进。随着模块一起推出的还有模块代理协议（Module proxy protocol），通过这个协议我们可以实现 Go 模块代理（Go module proxy），也就是依赖镜像。&lt;/p&gt;&#xA;&lt;p&gt;Go 1.13 的发布为模块带来了大量的改进，所以模块的扶正就是这次 Go 1.13 发布中开发者能直接感觉到的最大变化。而问题在于，Go 1.13 中的 GOPROXY 环境变量拥有了一个在中国大陆无法访问到的默认值 &lt;code&gt;proxy.golang.org&lt;/code&gt;，经过大家在 golang/go#31755 中激烈的讨论（有些人甚至将话提上升到了“自由世界”的层次），最终 Go 核心团队仍然无法为中国开发者提供一个可在中国大陆访问的官方模块代理。&lt;/p&gt;&#xA;&lt;p&gt;为了今后中国的 Go 语言开发者能更好地进行开发，七牛云推出了非营利性项目 &lt;code&gt;goproxy.cn&lt;/code&gt;，其目标是为中国和世界上其他地方的 Gopher 们提供一个免费的、可靠的、持续在线的且经过 CDN 加速的模块代理。可以预见未来是属于模块化的，所以 Go 语言开发者能越早切入模块就能越早进入未来。&lt;/p&gt;&#xA;&lt;p&gt;如果说 Go 1.11 和 Go 1.12 时由于模块的不完善你不愿意切入，那么 Go 1.13 你则可以大胆地开始放心使用。本次分享将讨论如何使用模块和模块代理，以及在它们的使用中会常遇见的坑，还会讲解如何快速搭建自己的私有模块代理，并简单地介绍一下七牛云推出的 &lt;code&gt;goproxy.cn&lt;/code&gt; 以及它的出现对于中国 Go 语言开发者来说重要在何处。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 应用内存占用太多，让排查？（VSZ篇）</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-09-24-why-vsz-large/</link>
      <pubDate>Tue, 24 Sep 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-09-24-why-vsz-large/</guid>
      <description>&lt;p&gt;前段时间，某同学说某服务的容器因为超出内存限制，不断地重启，问我们是不是有内存泄露，赶紧排查，然后解决掉，省的出问题。我们大为震惊，赶紧查看监控+报警系统和性能分析，发现应用指标压根就不高，不像有泄露的样子。&lt;/p&gt;&#xA;&lt;p&gt;那么问题是出在哪里了呢，我们进入某个容器里查看了 &lt;code&gt;top&lt;/code&gt; 的系统指标，结果如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PID       VSZ    RSS   ... COMMAND&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;67459&lt;/span&gt;     2007m  136m  ... ./eddycjy-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从结果上来看，也没什么大开销的东西，主要就一个 Go 进程，一看，某同学就说 VSZ 那么高，而某云上的容器内存指标居然恰好和 VSZ 的值相接近，因此某同学就怀疑是不是 VSZ 所导致的，觉得存在一定的关联关系。&lt;/p&gt;&#xA;&lt;p&gt;而从最终的结论上来讲，上述的表述是不全对的，那么在今天，本篇文章将&lt;strong&gt;主要围绕 Go 进程的 VSZ 来进行剖析&lt;/strong&gt;，看看到底它为什么那么 &amp;ldquo;高&amp;rdquo;，而在正式开始分析前，第一节为前置的补充知识，大家可按顺序阅读。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基础知识&#34;&gt;基础知识&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是-vsz&#34;&gt;什么是 VSZ&lt;/h3&gt;&#xA;&lt;p&gt;VSZ 是该进程所能使用的虚拟内存总大小，它包括进程可以访问的所有内存，其中包括了被换出的内存（Swap）、已分配但未使用的内存以及来自共享库的内存。&lt;/p&gt;&#xA;&lt;h3 id=&#34;为什么要虚拟内存&#34;&gt;为什么要虚拟内存&lt;/h3&gt;&#xA;&lt;p&gt;在前面我们有了解到 VSZ 其实就是该进程的虚拟内存总大小，那&lt;strong&gt;如果我们想了解 VSZ 的话，那我们得先了解 “为什么要虚拟内存？”&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;本质上来讲，在一个系统中的进程是与其他进程共享 CPU 和主存资源的，而在现代的操作系统中，多进程的使用非常的常见，那么如果太多的进程需要太多的内存，那么在没有虚拟内存的情况下，物理内存很可能会不够用，就会导致其中有些任务无法运行，更甚至会出现一些很奇怪的现象，例如 “某一个进程不小心写了另一个进程使用的内存”，就会造成内存破坏，因此虚拟内存是非常重要的一个媒介。&lt;/p&gt;&#xA;&lt;h3 id=&#34;虚拟内存包含了什么&#34;&gt;虚拟内存包含了什么&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/3062dec8cd187490adadbdbcf50c17d4.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;而虚拟内存，又分为内核虚拟内存和进程虚拟内存，每一个进程的虚拟内存都是独立的， 呈现如上图所示。&lt;/p&gt;&#xA;&lt;p&gt;这里也补充说明一下，在内核虚拟内存中，是包含了内核中的代码和数据结构，而内核虚拟内存中的某些区域会被映射到所有进程共享的物理页面中去，因此你会看到 ”内核虚拟内存“ 中实际上是包含了 ”物理内存“ 的，它们两者存在映射关系。而在应用场景上来讲，每个进程也会去共享内核的代码和全局数据结构，因此就会被映射到所有进程的物理页面中去。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/3ba1352075ace855104f4bd57752a2ad.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;虚拟内存的重要能力&#34;&gt;虚拟内存的重要能力&lt;/h3&gt;&#xA;&lt;p&gt;为了更有效地管理内存并且减少出错，现代系统提供了一种对主存的抽象概念，也就是今天的主角，叫做虚拟内存（VM），虚拟内存是硬件异常、硬件地址翻译、主存、磁盘文件和内核软件交互的地方，它为每个进程提供了一个大的、一致的和私有的地址空间，虚拟内存提供了三个重要的能力：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;它将主存看成是一个存储在磁盘上的地址空间的高速缓存，在主存中只保存活动区域，并根据需要在磁盘和主存之间来回传送数据，通过这种方式，它高效地使用了主存。&lt;/li&gt;&#xA;&lt;li&gt;它为每个进程提供了一致的地址空间，从而简化了内存管理。&lt;/li&gt;&#xA;&lt;li&gt;它保护了每个进程的地址空间不被其他进程破坏。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;小结&#34;&gt;小结&lt;/h3&gt;&#xA;&lt;p&gt;上面发散的可能比较多，简单来讲，对于本文我们重点关注这些知识点，如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;虚拟内存它是有各式各样内存交互的地方，它包含的不仅仅是 &amp;ldquo;自己&amp;rdquo;，&lt;strong&gt;而在本文中，我们只需要关注 VSZ，也就是进程虚拟内存，它包含了你的代码、数据、堆、栈段和共享库&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;li&gt;虚拟内存作为内存保护的工具，能够保证进程之间的内存空间独立，不受其他进程的影响，因此每一个进程的 VSZ 大小都不一样，互不影响。&lt;/li&gt;&#xA;&lt;li&gt;虚拟内存的存在，系统给各进程分配的内存之和是可以大于实际可用的物理内存的，因此你也会发现你进程的物理内存总是比虚拟内存低的多的多。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;排查问题&#34;&gt;排查问题&lt;/h2&gt;&#xA;&lt;p&gt;在了解了基础知识后，我们正式开始排查问题，第一步我们先编写一个测试程序，看看没有什么业务逻辑的 Go 程序，它初始的 VSZ 是怎么样的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go1.13 defer 的性能是如何提高的</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-09-07-go1.13-defer/</link>
      <pubDate>Sat, 07 Sep 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-09-07-go1.13-defer/</guid>
      <description>&lt;p&gt;最近 Go1.13 终于发布了，其中一个值得关注的特性就是 &lt;strong&gt;defer 在大部分的场景下性能提升了30%&lt;/strong&gt;，但是官方并没有具体写是怎么提升的，这让大家非常的疑惑。而我因为之前写过&lt;a href=&#34;https://book.eddycjy.com/golang/defer/defer.html&#34;&gt;《深入理解 Go defer》&lt;/a&gt; 和 &lt;a href=&#34;https://book.eddycjy.com/golang/talk/defer-loss.html&#34;&gt;《Go defer 会有性能损耗，尽量不要用？》&lt;/a&gt; 这类文章，因此我挺感兴趣它是做了什么改变才能得到这样子的结果，所以今天和大家一起探索其中奥妙。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一测试&#34;&gt;一、测试&lt;/h2&gt;&#xA;&lt;h3 id=&#34;go112&#34;&gt;Go1.12&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go test -bench=. -benchmem -run=none&#xA;goos: darwin&#xA;goarch: amd64&#xA;pkg: github.com/EDDYCJY/awesomeDefer&#xA;BenchmarkDoDefer-4      &#x9;20000000&#x9;        91.4 ns/op&#x9;      48 B/op&#x9;       1 allocs/op&#xA;BenchmarkDoNotDefer-4   &#x9;30000000&#x9;        41.6 ns/op&#x9;      48 B/op&#x9;       1 allocs/op&#xA;PASS&#xA;ok  &#x9;github.com/EDDYCJY/awesomeDefer&#x9;3.234s&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;go113&#34;&gt;Go1.13&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go test -bench=. -benchmem -run=none&#xA;goos: darwin&#xA;goarch: amd64&#xA;pkg: github.com/EDDYCJY/awesomeDefer&#xA;BenchmarkDoDefer-4      &#x9;15986062&#x9;        74.7 ns/op&#x9;      48 B/op&#x9;       1 allocs/op&#xA;BenchmarkDoNotDefer-4   &#x9;29231842&#x9;        40.3 ns/op&#x9;      48 B/op&#x9;       1 allocs/op&#xA;PASS&#xA;ok  &#x9;github.com/EDDYCJY/awesomeDefer&#x9;3.444s&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在开场，我先以不标准的测试基准验证了先前的测试用例，确确实实在这两个版本中，&lt;code&gt;defer&lt;/code&gt; 的性能得到了提高，但是看上去似乎不是百分百提高 30 %。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 GODEBUG 看 GC</title>
      <link>https://note.lican.site/posts/posts/go/tools/2019-09-02-godebug-gc/</link>
      <pubDate>Mon, 02 Sep 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/tools/2019-09-02-godebug-gc/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/b07f55c7fd136392763729b9782f7776.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是-gc&#34;&gt;什么是 GC&lt;/h2&gt;&#xA;&lt;p&gt;在计算机科学中，垃圾回收（GC）是一种自动管理内存的机制，垃圾回收器会去尝试回收程序不再使用的对象及其占用的内存。而最早 John McCarthy 在 1959 年左右发明了垃圾回收，以简化 Lisp 中的手动内存管理的机制（来自 wikipedia）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么要-gc&#34;&gt;为什么要 GC&lt;/h2&gt;&#xA;&lt;p&gt;手动管理内存挺麻烦，管错或者管漏内存也很糟糕，将会直接导致程序不稳定（持续泄露）甚至直接崩溃。&lt;/p&gt;&#xA;&lt;h2 id=&#34;gc-带来的问题&#34;&gt;GC 带来的问题&lt;/h2&gt;&#xA;&lt;p&gt;硬要说会带来什么问题的话，也就数大家最关注的 Stop The World（STW），STW 代指在执行某个垃圾回收算法的某个阶段时，需要将整个应用程序暂停去处理 GC 相关的工作事项。例如：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;行为&lt;/th&gt;&#xA;          &lt;th&gt;会不会 STW&lt;/th&gt;&#xA;          &lt;th&gt;为什么&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;标记开始&lt;/td&gt;&#xA;          &lt;td&gt;会&lt;/td&gt;&#xA;          &lt;td&gt;在开始标记时，准备根对象的扫描，会打开写屏障（Write Barrier） 和 辅助GC（mutator assist），而回收器和应用程序是并发运行的，因此会暂停当前正在运行的所有 Goroutine。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;并发标记中&lt;/td&gt;&#xA;          &lt;td&gt;不会&lt;/td&gt;&#xA;          &lt;td&gt;标记阶段，主要目的是标记堆内存中仍在使用的值。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;标记结束&lt;/td&gt;&#xA;          &lt;td&gt;会&lt;/td&gt;&#xA;          &lt;td&gt;在完成标记任务后，将重新扫描部分根对象，这时候会禁用写屏障（Write Barrier）和辅助GC（mutator assist），而标记阶段和应用程序是并发运行的，所以在标记阶段可能会有新的对象产生，因此在重新扫描时需要进行 STW。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;如何调整-gc-频率&#34;&gt;如何调整 GC 频率&lt;/h2&gt;&#xA;&lt;p&gt;可以通过 GOGC 变量设置初始垃圾收集器的目标百分比值，对比的规则为当新分配的数值与上一次收集后剩余的实时数值的比例达到设置的目标百分比时，就会触发 GC，默认值为 GOGC=100。如果将其设置为 GOGC=off 可以完全禁用垃圾回收器，要不试试？&lt;/p&gt;&#xA;&lt;p&gt;简单来讲就是，GOGC 的值设置的越大，GC 的频率越低，但每次最终所触发到 GC 的堆内存也会更大。&lt;/p&gt;&#xA;&lt;h2 id=&#34;各版本-gc-情况&#34;&gt;各版本 GC 情况&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;版本&lt;/th&gt;&#xA;          &lt;th&gt;GC 算法&lt;/th&gt;&#xA;          &lt;th&gt;STW 时间&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.0&lt;/td&gt;&#xA;          &lt;td&gt;STW（强依赖 tcmalloc）&lt;/td&gt;&#xA;          &lt;td&gt;百ms到秒级别&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.3&lt;/td&gt;&#xA;          &lt;td&gt;Mark STW, Sweep 并行&lt;/td&gt;&#xA;          &lt;td&gt;百ms级别&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.5&lt;/td&gt;&#xA;          &lt;td&gt;三色标记法, 并发标记清除。同时运行时从 C 和少量汇编，改为 Go 和少量汇编实现&lt;/td&gt;&#xA;          &lt;td&gt;10-50ms级别&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.6&lt;/td&gt;&#xA;          &lt;td&gt;1.5 中一些与并发 GC 不协调的地方更改，集中式的 GC 协调协程，改为状态机实现&lt;/td&gt;&#xA;          &lt;td&gt;5ms级别&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.7&lt;/td&gt;&#xA;          &lt;td&gt;GC 时由 mark 栈收缩改为并发，span 对象分配机制由 freelist 改为 bitmap 模式，SSA引入&lt;/td&gt;&#xA;          &lt;td&gt;ms级别&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.8&lt;/td&gt;&#xA;          &lt;td&gt;混合写屏障（hybrid write barrier）, 消除 re-scanning stack&lt;/td&gt;&#xA;          &lt;td&gt;sub ms&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Go 1.12&lt;/td&gt;&#xA;          &lt;td&gt;Mark Termination 流程优化&lt;/td&gt;&#xA;          &lt;td&gt;sub ms, 但几乎减少一半&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;注：资料来源于 @boya 在深圳 Gopher Meetup 的分享。&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 GODEBUG 看调度跟踪</title>
      <link>https://note.lican.site/posts/posts/go/tools/2019-08-19-godebug-sched/</link>
      <pubDate>Mon, 19 Aug 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/tools/2019-08-19-godebug-sched/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/b01c2ce25e34f80d499f0488d034b00b.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;让 Go 更强大的原因之一莫过于它的 GODEBUG 工具，GODEBUG 的设置可以让 Go 程序在运行时输出调试信息，可以根据你的要求很直观的看到你想要的调度器或垃圾回收等详细信息，并且还不需要加装其它的插件，非常方便，今天我们将先讲解 GODEBUG 的调度器相关内容，希望对你有所帮助。&lt;/p&gt;&#xA;&lt;p&gt;不过在开始前，没接触过的小伙伴得先补补如下前置知识，便于更好的了解调试器输出的信息内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前置知识&#34;&gt;前置知识&lt;/h2&gt;&#xA;&lt;p&gt;Go scheduler 的主要功能是针对在处理器上运行的 OS 线程分发可运行的 Goroutine，而我们一提到调度器，就离不开三个经常被提到的缩写，分别是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;G：Goroutine，实际上我们每次调用 &lt;code&gt;go func&lt;/code&gt; 就是生成了一个 G。&lt;/li&gt;&#xA;&lt;li&gt;P：处理器，一般为处理器的核数，可以通过 &lt;code&gt;GOMAXPROCS&lt;/code&gt; 进行修改。&lt;/li&gt;&#xA;&lt;li&gt;M：OS 线程&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这三者交互实际来源于 Go 的 M: N 调度模型，也就是 M 必须与 P 进行绑定，然后不断地在 M 上循环寻找可运行的 G 来执行相应的任务，如果想具体了解可以详细阅读 &lt;a href=&#34;https://speakerdeck.com/retervision/go-runtime-scheduler&#34;&gt;《Go Runtime Scheduler》&lt;/a&gt;，我们抽其中的工作流程图进行简单分析，如下:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/fb4c6c92c93af3bc2dfc4f13dc167cdf.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;当我们执行 &lt;code&gt;go func()&lt;/code&gt; 时，实际上就是创建一个全新的 Goroutine，我们称它为 G。&lt;/li&gt;&#xA;&lt;li&gt;新创建的 G 会被放入 P 的本地队列（Local Queue）或全局队列（Global Queue）中，准备下一步的动作。&lt;/li&gt;&#xA;&lt;li&gt;唤醒或创建 M 以便执行 G。&lt;/li&gt;&#xA;&lt;li&gt;不断地进行事件循环&lt;/li&gt;&#xA;&lt;li&gt;寻找在可用状态下的 G 进行执行任务&lt;/li&gt;&#xA;&lt;li&gt;清除后，重新进入事件循环&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;而在描述中有提到全局和本地这两类队列，其实在功能上来讲都是用于存放正在等待运行的 G，但是不同点在于，本地队列有数量限制，不允许超过 256 个。并且在新建 G 时，会优先选择 P 的本地队列，如果本地队列满了，则将 P 的本地队列的一半的 G 移动到全局队列，这其实可以理解为调度资源的共享和再平衡。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 大杀器之跟踪剖析 trace</title>
      <link>https://note.lican.site/posts/posts/go/tools/2019-07-12-go-tool-trace/</link>
      <pubDate>Fri, 12 Jul 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/tools/2019-07-12-go-tool-trace/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/15/1x1phF.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;在 Go 中有许许多多的分析工具，在之前我有写过一篇 《Golang 大杀器之性能剖析 PProf》 来介绍 PProf，如果有小伙伴感兴趣可以去我博客看看。&lt;/p&gt;&#xA;&lt;p&gt;但单单使用 PProf 有时候不一定足够完整，因为在真实的程序中还包含许多的隐藏动作，例如 Goroutine 在执行时会做哪些操作？执行/阻塞了多长时间？在什么时候阻止？在哪里被阻止的？谁又锁/解锁了它们？GC 是怎么影响到 Goroutine 的执行的？这些东西用 PProf 是很难分析出来的，但如果你又想知道上述的答案的话，你可以用本文的主角 &lt;code&gt;go tool trace&lt;/code&gt; 来打开新世界的大门。目录如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/15/1x1P1J.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;初步了解&#34;&gt;初步了解&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;runtime/trace&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;trace&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Start&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Stderr&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;trace&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Stop&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ch&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;生成跟踪文件：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go 2&amp;gt; trace.out&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;启动可视化界面：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go tool trace trace.out&#xA;2019/06/22 16:14:52 Parsing trace...&#xA;2019/06/22 16:14:52 Splitting trace...&#xA;2019/06/22 16:14:52 Opening browser. Trace viewer is listening on http://127.0.0.1:57321&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;查看可视化界面：&lt;/p&gt;</description>
    </item>
    <item>
      <title>从实践到原理，带你参透 gRPC</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-06-29-talking-grpc/</link>
      <pubDate>Sat, 29 Jun 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-06-29-talking-grpc/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/4a47a0db6e60853dedfcfdf08a5ca249.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;gRPC 在 Go 语言中大放异彩，越来越多的小伙伴在使用，最近也在公司安利了一波，希望这一篇文章能带你一览 gRPC 的巧妙之处，本文篇幅比较长，请做好阅读准备。本文目录如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/156005c5baf40ff51a327f1c34f2975b.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;简述&#34;&gt;简述&lt;/h2&gt;&#xA;&lt;p&gt;gRPC 是一个高性能、开源和通用的 RPC 框架，面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本，分别是：grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持。&lt;/p&gt;&#xA;&lt;p&gt;gRPC 基于 HTTP/2 标准设计，带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好，更省电和节省空间占用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;调用模型&#34;&gt;调用模型&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/10fb15c77258a991b0028080a64fb42d.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;1、客户端（gRPC Stub）调用 A 方法，发起 RPC 调用。&lt;/p&gt;&#xA;&lt;p&gt;2、对请求信息使用 Protobuf 进行对象序列化压缩（IDL）。&lt;/p&gt;&#xA;&lt;p&gt;3、服务端（gRPC Server）接收到请求后，解码请求体，进行业务逻辑处理并返回。&lt;/p&gt;&#xA;&lt;p&gt;4、对响应结果使用 Protobuf 进行对象序列化压缩（IDL）。&lt;/p&gt;&#xA;&lt;p&gt;5、客户端接受到服务端响应，解码请求体。回调被调用的 A 方法，唤醒正在等待响应（阻塞）的客户端调用并返回响应结果。&lt;/p&gt;&#xA;&lt;h2 id=&#34;调用方式&#34;&gt;调用方式&lt;/h2&gt;&#xA;&lt;h3 id=&#34;一unary-rpc一元-rpc&#34;&gt;一、Unary RPC：一元 RPC&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/09dd8c2662b96ce14928333f055c5580.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;server&#34;&gt;Server&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;SearchService&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SearchService&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Search&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ctx&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SearchRequest&lt;/span&gt;) (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SearchResponse&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SearchResponse&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;Response&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetRequest&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34; Server&amp;#34;&lt;/span&gt;}, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PORT&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;9001&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grpc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewServer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;pb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RegisterSearchServiceServer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;SearchService&lt;/span&gt;{})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;lis&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;net&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Listen&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;tcp&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;PORT&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Serve&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;lis&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;创建 gRPC Server 对象，你可以理解为它是 Server 端的抽象对象。&lt;/li&gt;&#xA;&lt;li&gt;将 SearchService（其包含需要被调用的服务端接口）注册到 gRPC Server。 的内部注册中心。这样可以在接受到请求时，通过内部的 “服务发现”，发现该服务端接口并转接进行逻辑处理。&lt;/li&gt;&#xA;&lt;li&gt;创建 Listen，监听 TCP 端口。&lt;/li&gt;&#xA;&lt;li&gt;gRPC Server 开始 lis.Accept，直到 Stop 或 GracefulStop。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;client&#34;&gt;Client&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;grpc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Dial&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;:&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;PORT&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;grpc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;WithInsecure&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewSearchServiceClient&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;conn&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;resp&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;client&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Search&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;context&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Background&lt;/span&gt;(), &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;pb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SearchRequest&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;Request&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gRPC&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    })&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;创建与给定目标（服务端）的连接句柄。&lt;/li&gt;&#xA;&lt;li&gt;创建 SearchService 的客户端对象。&lt;/li&gt;&#xA;&lt;li&gt;发送 RPC 请求，等待同步响应，得到回调后返回响应结果。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;二server-side-streaming-rpc服务端流式-rpc&#34;&gt;二、Server-side streaming RPC：服务端流式 RPC&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/8266e4bfeda1bd42d8f9794eb4ea0a13.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载四」gRPC&#43;gRPC Gateway 能不能不用证书？</title>
      <link>https://note.lican.site/posts/posts/go/grpc-gateway/2019-06-22-grpc-gateway-tls/</link>
      <pubDate>Sat, 22 Jun 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc-gateway/2019-06-22-grpc-gateway-tls/</guid>
      <description>&lt;p&gt;如果你以前有涉猎过 gRPC+gRPC Gateway 这两个组件，你肯定会遇到这个问题，就是 &lt;strong&gt;“为什么非得开 TLS，才能够实现同端口双流量，能不能不开？”&lt;/strong&gt; 又或是 &lt;strong&gt;“我不想用证书就实现这些功能，行不行？”&lt;/strong&gt;。我被无数的人问过无数次这些问题，也说服过很多人，但说服归说服，不代表放弃。前年不行，不代表今年不行，在今天我希望分享来龙去脉和具体的实现方式给你。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3dLBAx.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;过去&#34;&gt;过去&lt;/h2&gt;&#xA;&lt;h3 id=&#34;为什么-h2-不行&#34;&gt;为什么 h2 不行&lt;/h3&gt;&#xA;&lt;p&gt;因为 &lt;code&gt;net/http2&lt;/code&gt; 仅支持 &amp;ldquo;h2&amp;rdquo; 标识，而 &amp;ldquo;h2&amp;rdquo; 标识 HTTP/2 必须使用传输层安全性（TLS）的协议，此标识符用于 TLS 应用层协议协商字段以及识别 HTTP/2 over TLS。&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，也就 &lt;code&gt;net/http2&lt;/code&gt; 必须使用 TLS 来交互。通俗来讲就要用证书，那么理所当然，也就无法支持非 TLS 的情况了。&lt;/p&gt;&#xA;&lt;h3 id=&#34;寻找-h2c&#34;&gt;寻找 h2c&lt;/h3&gt;&#xA;&lt;p&gt;那这条路不行，我们再想想别的路？那就是 HTTP/2 规范中的 &amp;ldquo;h2c&amp;rdquo; 标识了，&amp;ldquo;h2c&amp;rdquo; 标识允许通过明文 TCP 运行 HTTP/2 的协议，此标识符用于 HTTP/1.1 升级标头字段以及标识 HTTP/2 over TCP。&lt;/p&gt;&#xA;&lt;p&gt;但是这条路，早在 2015 年就已经有在 &lt;a href=&#34;https://github.com/golang/go/issues/13128#issuecomment-153193762&#34;&gt;issue&lt;/a&gt; 中进行讨论，当时 @bradfitz 明确表示 “不打算支持 h2c，对仅支持 TLS 的情况非常满意，一年后再问我一次”，原文回复如下：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;We do not plan to support h2c. I don&amp;rsquo;t want to receive bug reports from users who get bitten by transparent proxies messing with h2c. Also, until there&amp;rsquo;s widespread browser support, it&amp;rsquo;s not interesting. I am also not interested in being the chicken or the egg to get browser support going. I&amp;rsquo;m very happy with the TLS-only situation, and things like &lt;a href=&#34;https://LetsEncrypt.org/&#34;&gt;https://LetsEncrypt.org/&lt;/a&gt; will make TLS much easier (and automatic) soon.&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-two</title>
      <link>https://note.lican.site/project/share2/</link>
      <pubDate>Tue, 18 Jun 2019 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share2/</guid>
      <description>&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#java&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#python&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%89%8D%E7%AB%AF&#34;&gt;前端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%95%99%E7%A8%8B&#34;&gt;教程&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%A7%BB%E5%8A%A8%E7%AB%AF&#34;&gt;移动端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D&#34;&gt;开源书籍&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E9%9B%86%E5%90%88&#34;&gt;资料集合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E9%9D%A2%E8%AF%95%E8%B5%84%E6%96%99&#34;&gt;面试资料&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%89%E8%B6%A3%E7%BD%91%E7%AB%99&#34;&gt;有趣网站&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%89%E8%B6%A3--%E5%AE%9E%E7%94%A8%E5%BC%80%E6%BA%90%E5%B7%A5%E5%85%B7&#34;&gt;有趣 / 实用开源工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0--%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD&#34;&gt;机器学习 / 人工智能&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E9%9D%9E%E5%BC%80%E6%BA%90%E7%9A%84%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7&#34;&gt;非开源的实用工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E5%AE%83&#34;&gt;其它&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;java&#34;&gt;Java&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doocs/advanced-java&#34;&gt;advanced-java&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;互联网 Java 工程师进阶知识完全扫盲：涵盖高并发、分布式、高可用、微服务等领域知识，后端同学必看，前端同学也可学习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I7ucNeWbS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/justauth/JustAuth&#34;&gt;JustAuth&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;史上最全的整合第三方登录的 Java 开源库，集成了二十多家国内外常用第三方平台，且提供简单易用的 API 让你快速接入&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I3vtXALCc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xkcoding/spring-boot-demo&#34;&gt;spring-boot-demo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个集成了 57 个 Spring Boot 常用组件 Demo 的项目，且每个 Demo 均有详细的 README 文件讲解说明，很不错的一份学习 Spring Boot 资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I3cCYeuxV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/halo-dev/halo&#34;&gt;halo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款个人独立博客系统，该系统部署简单快捷，并提供 Api 接口拓展行强，支持多款云存储，支持多款主题，支持 Web 端、 App 端管理后台，随时随地记录你的想法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hx3PscZMt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ityouknow/spring-boot-examples&#34;&gt;spring-boot-examples&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Spring Boot 教程、技术栈示例代码，快速简单上手教程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hj4vq2WjP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hollischuang/toBeTopJavaer&#34;&gt;toBeTopJavaer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了 Java 工程师成神之路所需要掌握的内容知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiTTRkCTT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LinShunKang/MyPerf4J&#34;&gt;MyPerf4J&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个针对高并发、低延迟应用设计的高性能 Java 性能监控和统计工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HbRuxt1rj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doocs/advanced-java&#34;&gt;advanced-java&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;互联网 Java 工程师进阶知识完全扫盲&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HbfMyC03g&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/saysky/ForestBlog&#34;&gt;ForestBlog&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单又漂亮的博客系统，该系统由 Spring + SpringMVC + Mybatis 框架实现，适合初学 SSM 和个人博客制作的同学学习&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImJg4o9yZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;python&#34;&gt;Python&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/30-seconds/30-seconds-of-python&#34;&gt;30-seconds-of-python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了一些简单且实用的 Python 脚本，让开发者可以在 30 秒内搞懂用上一个 Python 知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I7jann0ZG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wistbean/learn_python3_spider&#34;&gt;learn_python3_spider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份从 0 到 1 学习 Python 爬虫教程，内容含有如何抓包，各种爬虫常用的模块使用，实战教程，最后还教你如何反爬虫&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HDZypo4a5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thomasahle/sunfish&#34;&gt;sunfish&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;111 行 Python 代码能写出什么？一个简单却强大的国际象棋引擎&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hxlv29mcQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YeYzheng/KGQA-Based-On-medicine&#34;&gt;KGQA-Based-On-medicine&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于医药知识图谱的智能问答系统，支持疾病症状、疾病用药、药品查询等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxaTtmRx6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gto76/python-cheatsheet&#34;&gt;python-cheatsheet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Python 相关知识点速查表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hj0zSpaLP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wdkwdkwdk/fuck_illness&#34;&gt;fuck_illness&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;利用爬虫抓取并分析百万条疾病问答数据。附图是不同年龄段人的常患疾病，挺有意思的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HizROAB2w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/loadchange/amemv-crawler&#34;&gt;amemv-crawler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可爬取某音平台指定账号的所有视频&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhvSkFkbD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;前端&#34;&gt;前端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DataV-Team/DataV&#34;&gt;DataV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单易用基于 Vue 的数据可视化组件库，该库提供酷炫的 SVG 边框和装饰，常用的图表、飞线图、轮播表等等组件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Imqp4ECRw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ryanmcdermott/clean-code-javascript&#34;&gt;clean-code-javascript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 工程师 Ryan McDermott 根据 《Clean Code》总结了一份适用于 JavaScript 的软件工程指导准则《Clean Code JavaScript》。希望能帮你写出易读、易复用、易重构的 JavaScript 代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Il1m5vUnU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/trekhleb/javascript-algorithms&#34;&gt;javascript-algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;包含了多种基于 JavaScript 的算法与数据结构，每种算法和数据结构都有自己的 README，包含相关说明和链接，以便进一步阅读 (还有 YouTube 视频)&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkeuAhZGz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/metafizzy/zdog&#34;&gt;zdog&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可用于 3D 设计与动画制作的 JavaScript 库，设计灵活，操作简单，易于集成与上手&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkaaGEq68&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alyssaxuu/flowy&#34;&gt;flowy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级的 JavaScript 库，可用于快速创建流程图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IjXhccumr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antvis/G6&#34;&gt;G6&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款专业的图形可视化引擎，基于 JavaScript 构建&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IipmD0UiP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Geek-James/ddBuy&#34;&gt;ddBuy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Vue 开发的移动端电商项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IihvxFp60&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lefex/FE&#34;&gt;FE&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的前端课程，教新手从零到一学前端&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IiarbcUeu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HongqingCao/GitDataV&#34;&gt;GitDataV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 Vue 框架构建的 GitHub 数据可视化平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IcQIyopbn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/30-seconds/30-seconds-of-code&#34;&gt;30-seconds-of-code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了一些简单且实用的 JavaScript 代码，让开发者可以在 30 秒内搞懂并用上一个 JavaScript 知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IcEHaE5xL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Q-Angelo/Nodejs-Roadmap&#34;&gt;Nodejs-Roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份学习 Node.js 教程《Node.js 技术栈》，该教程是由一名 Node.js 开发者在学习历程中记录的知识点，侧重于 Node.js 服务端所涉及的技术栈&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HBT8SfgpG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pqina/filepond&#34;&gt;filepond&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个灵活且有趣的 JavaScript 文件上传库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HyiCk161H&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tehnokv/picojs&#34;&gt;picojs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;200 行 JavaScript 代码实现人脸检测&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxW1XCIIW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Hulkye/FrontEndNav&#34;&gt;FrontEndNav&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个网站上面收集了大量高质量的前端相关资源，其中包含前端学习资源、文档 API、模板插件、工具等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hvcl1uZLG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/airbnb/javascript&#34;&gt;javascript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份来自 Airbnb 团队开源的 JavaScript 编码规范指南，前端的同学可以学习下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hv6DT2yQ9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/arturbien/React95&#34;&gt;React95&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Windows 95 风格的 React 组件库也被整出来了&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqcOzBIV8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/foru17/front-end-collect&#34;&gt;front-end-collect&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有位开发者在 GitHub 上整理了一批前端开发相关的优质网站、博客、教程、书籍等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hv1l76MM3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/benhowdle89/grade&#34;&gt;grade&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 JavaScript 库 Grade.js，主要功能是从图片中提取两种主色，并生成互补渐变的背景&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HuK3xidhE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chvin/react-tetris&#34;&gt;react-tetris&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有个前端工程师在 GitHub 上用 React 搞了个俄罗斯方块小游戏，不仅好玩，技术实现原理也讲解非常到位&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtG67xwWF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jolaleye/cssfx&#34;&gt;cssfx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;它提供了一些优雅、酷炫的 CSS 动画效果，让你轻点鼠标便能直接复制样式，非常方便。做 Web 开发的同学可以收藏备用一下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Htv49csRw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/azl397985856/leetcode&#34;&gt;leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个最近比较火的 JavaScript LeetCode 题解项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsvcnzVFx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LyleMi/Learn-Web-Hacking&#34;&gt;Learn-Web-Hacking&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Web 安全学习笔记，帮你学点内网渗透、漏洞攻击、安全防御等基础知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrFWbBlrn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tnfe/TNFE-Weekly&#34;&gt;TNFE-Weekly&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;腾讯前端团队创办的技术周刊，每周定期分享小程序、H5 等前端领域技术内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmEPNC6M0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/picturepan2/instagram.css&#34;&gt;instagram.css&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个使用纯 CSS 实现 Instagram 滤镜效果类库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GoogleChromeLabs/quicklink&#34;&gt;quicklink&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 开源的一个前端库，利用空闲时间提前缓存页面上链接，加快链接网站的访问速度&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjHAEn2mn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/frontend-bootcamp&#34;&gt;frontend-bootcamp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软这两天刚开源的前端练习资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiCpnhwN0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/javascript-tutorial/en.javascript.info&#34;&gt;en.javascript.info&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 JavaScript 教程，主要讲解 JavaScript 语言的基本用法，浏览器事件的管理，动画效果及正则表达式的基础使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhN9UwwyK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apexcharts/apexcharts.js&#34;&gt;apexcharts.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 JavaScript 图表库，让开发者可以更轻松的构建可交互图表，可视化数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hh7x37T3e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/30-seconds/30-seconds-of-code&#34;&gt;30-seconds-of-code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了一些实用的 JavaScript 代码片段，让你在 30 秒内就能看懂并用上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgNSGtCOX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QiShaoXuan/css_tricks&#34;&gt;css_tricks&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;总结一些常用的 CSS 样式， 以及记录一些 CSS 的新属性和一点奇技淫巧&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HdGCv2vop&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/juliangarnier/anime&#34;&gt;anime&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级的 JavaScript 动画库，轻松实现各种酷炫的效果，支持 CSS 属性、SVG 和 DOM 属性等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HdnLwhdhR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chokcoco/CSS-Inspiration&#34;&gt;CSS-Inspiration&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 CSS 学习资料，以分类的形式，展示不同 CSS 属性或者不同的课题使用 CSS 来解决的各种方法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HbI43u29l&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;教程&#34;&gt;教程&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://developer.aliyun.com/special/tech-java&#34;&gt;Java 开发手册&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;始于阿里内部规约，在全球 Java 开发者共同努力下，已成为业界普遍遵循的开发规范。内容涵盖编程规约、异常日志、单元测试、安全规约、MySQL 数据库、工程规约、设计规约共七大维度&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HB6D9qfPV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mlcourse.ai/&#34;&gt;机器学习课程&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套免费开放的机器学习课程，由 Open Data Science 组织研发，主要注重理论与实践相结合，采用了特定的激励机制去引导学生深入学习，让学生在探索学习的过程中保有冲劲，不轻易感到枯燥或疲倦&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HASSLfFR2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yuque.com/computer/crush-course&#34;&gt;计算机科学速成课&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;免费的计算机视频课程，收集并翻译了 YouTube 上比较热门的计算机课程，内容包含计算机早期历史、中央处理器、编程原理、计算机网络、计算机安全等分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxiKyFd0J&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mitpress.ublish.com/ereader/7093/?preview=#page/1&#34;&gt;机器学习基础&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套可免费在线阅读的计算机课程，该书由纽约大学计算机科学几位教授共同编写，内容侧重于算法的分析和理论，每章均附有相关练习题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwQt4aEdr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yuque.com/docs/share/97bb24b7-fe20-49aa-96bf-36033cfebe6c&#34;&gt;现代化计算机科学自学指南&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中文版，里面收录了许多来自世界知名高校、顶尖教授与技术专家所编著的计算机课程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yuque.com/moeunion/wordpress&#34;&gt;零基础学 WordPress&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本教程通过对安装使用 WordPress 搭建自媒体站点的前期、中期、后期进行详细讲解，使读者全面了解和掌握作为一个自媒体网站站长应掌握的域名、服务器、WordPress 等方面的基础知识，同时通过实例站点与图书社区为读者提供了相关资源与服务，是一本绝无仅有、不可多得的技术书籍&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.huaxiaozhuan.com/&#34;&gt;AI 算法工程师手册&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该手册是作者多年以来学习总结的笔记整理，目前还在不断更新&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Huz3CzASi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yuque.com/ysfe/ykx/fedhb&#34;&gt;前端开发者手册2019&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该手册里面包含了前端开发相关的基础知识、常用工具、学习资源等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtOjvap8d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://exploringjs.com/impatient-js/&#34;&gt;JavaScript for impatient programmers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该本书编著于 ES2019 基础之上，将教授新手一些基础的、现代化的 JavaScript 编程知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ht2MEEYsD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jackfrued/Python-100-Days&#34;&gt;Python-100-Days&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份学习 Python 教程，涵盖 Python 初中高级知识点，规划在 100 天之内让你从新手到大师级别水平&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqUNHFAVc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/csev/py4e&#34;&gt;py4e&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费的 Python 编程教程《Python for Everybody》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqDAjfYAg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://fancyerii.github.io/2019/03/14/dl-book/&#34;&gt;深度学习理论与实战&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本免费的深度学习书籍，该书涵盖听觉、视觉、语言和强化学习四大领域，深入浅出的理论分析和详尽的代码分析&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpSzi5aI3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://frontendmasters.com/books/front-end-handbook/2019/&#34;&gt;Front end handbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本前端开发手册《Front end handbook》作者 Cody Lindley 是一名拥有 20 多年编程经验的前端工程师，手册包含前端开发的基础知识、常用工具、学习资源等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpzwErOQQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yuque.com/fe9/basic&#34;&gt;前端九部&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本前端中文入门课程《前端九部 - 入门者手册 2019》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpbX1gJNQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sxei/chrome-plugin-demo&#34;&gt;chrome-plugin-demo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Chrome 插件开发完整教程，并配套完整 Demo，可用来学习插件开发&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiDNlnUCZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cfenollosa/os-tutorial&#34;&gt;os-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源教程，教你如何从零开始构建一个操作系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhkSpDdTt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/machinelearningmindset/TensorFlow-Course&#34;&gt;TensorFlow-Course&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份清晰简洁、对开发者友好的 TensorFlow 教程。主要讲解 TensorFlow 的基础安装与入门使用，每个步骤都提供了详细的代码与文档讲解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgXjb0uRX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://lab.github.com/&#34;&gt;GitHub Learning Lab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 官方出的一个交互式学习课程，主要教授 GitHub 新手如何正确的使用 GitHub，如提交 commit、创建分支、发起 Pull Request 等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HceOMc6yT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;移动端&#34;&gt;移动端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mitesh77/Best-Flutter-UI-Templates&#34;&gt;Best-Flutter-UI-Templates&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的这个 Flutter UI 模板好赞啊！拿来做一些 App 应该会很好看&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IcxCNzPam&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lefex/iWeChat&#34;&gt;iWeChat&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过这个项目让你学习手机 App 的源码分析与破解过程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I1p4quItW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OpenFlutter/Flutter-Notebook&#34;&gt;Flutter-Notebook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份超级多 Flutter 相关功能 Demo 的集合，能帮助你快速学习 Flutter，十分适合新手&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HEU7oeXrq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Juanpe/About-SwiftUI&#34;&gt;About-SwiftUI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份有关 SwiftUI 资料集合，含有文档、例子、视频和教程等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HBAdOv2DB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CarGuo/gsy_flutter_book&#34;&gt;gsy_flutter_book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Flutter 完整开发实战详解系列，手把手教你如何从 0 开发一个完整的 Flutter App&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxMBt6diY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mobile-roadmap/android-developer-roadmap&#34;&gt;android-developer-roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Android 开发者知识技能图谱&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwiGD1vk8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FilledStacks/flutter-tutorials&#34;&gt;flutter-tutorials&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;南非一位移动开发者做的 Flutter 教程，内含视频讲解与源码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hw9g7w4uu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/stefanJi/Flutter4GitLab&#34;&gt;Flutter4GitLab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 Flutter 开源的 GitLab 客户端，让 GitLab 的一些操作通过 App 完成，方便开发者们使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hv5gEuZjg&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/indragiek/InAppViewDebugger&#34;&gt;InAppViewDebugger&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Facebook 有位开发者最近搞了个视图调试器，实现了类似 Reveal 的基础调试功能，以树状结构展示 App 视图，并能控制视图的显示隐藏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsJVEDED9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yagiz/Bagel&#34;&gt;Bagel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个实用的 iOS 网络调试工具，当你的 iOS 设备与 Mac 连接到同一网络时，便可在该工具上查看、监听手机 App 的网络请求数据，拿来抓包很方便&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrYNb21LD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/QMUI_iOS&#34;&gt;QMUI_iOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个致力于提高项目 UI 开发效率的解决方案，让开发者能专注于业务需求而无需耗费精力在基础代码的设计上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hj64PFmqP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/didi/DoraemonKit&#34;&gt;DoraemonKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能齐全的客户端（ iOS 、Android ）研发助手&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgDFuev5w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alibaba/flutter-go&#34;&gt;flutter-go&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Flutter 开发者帮助 App，包含 Flutter 常用 130+ 组件的中文文档与 Demo 演示&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hbpd45cvu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/m3sv/Flutter-for-Android-developers&#34;&gt;Flutter-for-Android-developers&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份为 Android 开发者学习 Flutter 准备的教程，适用于初学者&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HaldA979X&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;开源书籍&#34;&gt;开源书籍&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dexteryy/spellbook-of-modern-webdev&#34;&gt;spellbook-of-modern-webdev&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Spellbook of Modern Web Dev（现代 Web 开发魔法全书）》作者基于社区经验和数据统计，汇总了现代 web 开发中各个领域的主流项目、资源和经典文章，做了细粒度的分类梳理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Imxts33ml&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NLRX-WJC/Learn-Vue-Source-Code&#34;&gt;Learn-Vue-Source-Code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Vue 源码学习系列《逐行剖析 Vue.js 源码》作者记录其对 Vue 源码分为九大模块逐步学习的整个过程，以及对源码的一些理解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImeCtc8n5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/changkun/modern-cpp-tutorial&#34;&gt;modern-cpp-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Modern C++ Tutorial》一本开源的 C++ 教程，帮助开发者快速上手现代 C++ 特性&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Il93z8frv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chai2010/advanced-go-programming-book&#34;&gt;advanced-go-programming-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Go 语言高级编程》开源图书，涵盖 CGO、Go 汇编语言、RPC 实现、Protobuf 插件实现、Web 框架实现、分布式系统等高阶主题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IfYwFFElc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ShusenTang/Dive-into-DL-PyTorch&#34;&gt;Dive-into-DL-PyTorch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;将《动手学深度学习》（Dive into Deep Learning）原书中的 MXNet 代码实现改为 PyTorch 实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I7C1n860O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/datawhalechina/pumpkin-book&#34;&gt;pumpkin-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源免费机器学习书籍《南瓜书 PumpkinBook》，该书是对机器学习领域的经典入门教材周志华老师的《机器学习》书籍的一些细微补充，比如难理解的公式加以解析，以及补充具体的推导细节&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I3EUstQYR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Vay-keen/Machine-learning-learning-notes&#34;&gt;Machine-learning-learning-notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;周志华《机器学习》西瓜书精炼版笔记&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I1ZGg3zTE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LingCoder/OnJava8&#34;&gt;OnJava8&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本书籍《On Java 8》的中文翻译版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HDGHq2YZO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/d2l-ai/d2l-zh&#34;&gt;d2l-zh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源免费在线阅读教科书《动手学深度学习》，该书是加州大学伯克利分校 2019 年春学期 Introduction to Deep Learning 课程教材的中文翻译版。书籍内容全面介绍深度学习，不仅阐述算法原理，还可以运行它们，以获得交互式的学习体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hydjxwex6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yunlzheng/prometheus-book&#34;&gt;prometheus-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Prometheus 操作指南》该书内容由基础到进阶再到实战一步步深入，每章节后面还有个小结&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxUQU41K4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fengdu78/lihang-code&#34;&gt;lihang-code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《统计学习方法》机器学习的入门宝典，全面系统地介绍了统计学习的主要方法，叙述从具体问题或实例入手，由浅入深，阐明思路，给出必要的数学推导，便于读者掌握统计学习方法的实质，学会运用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hxw6BcxSF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jeroenjanssens/data-science-at-the-command-line&#34;&gt;data-science-at-the-command-line&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《命令行中的数据科学》由一名荷兰数据科学家 Jeroen Janssens 所编写，内容主要讲解了 80 多种实用的命令行工具，以及如何使用它们高效地获取、清洗、探索和建模数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hxsb3gFW2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/czy36mengfei/tensorflow2_tutorials_chinese&#34;&gt;tensorflow2_tutorials_chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Tensorflow 2 教程 基于官方教程的个人学习笔记，主要借鉴了一些 keras 构造神经网络的方法，中文讲解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwxC525uB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zibuyu/research_tao&#34;&gt;research_tao&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《NLP 研究入门之道》该书将系统地向你介绍 NLP（自然语言处理）科研入门、学术圈概貌、文献阅读、实验设计、论文撰写等知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jeffgerickson/algorithms&#34;&gt;Algorithms&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;伊利诺伊大学教授 Jeff 写的《算法》一书，这位老教授在 UIUC 教了 20 年的书，授课内容与经验都浓缩在这本书上了&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HoWffv26x&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nndl/nndl.github.io&#34;&gt;nndl.github.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的深度学习入门书籍《神经网络与深度学习》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HoQWsE32D&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/unknwon/the-way-to-go_ZH_CN&#34;&gt;the-way-to-go_ZH_CN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本 Go 入门教程《Go入门指南》，对于学习 Go 编程语言的爱好者来说，这本书无疑是最适合你的一本书籍，这里包含了当前最全面的学习资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HogmdbHjb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/the-road-to-learn-react/the-road-to-learn-react-chinese&#34;&gt;the-road-to-learn-react-chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;本免费的电子书《React 学习之道》，最简单、最实用的 React 实战教程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hoftqe0Gh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bestony/EasyWordPressBook&#34;&gt;EasyWordPressBook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的电子书「人人都能学会的 WordPress 实战课」，这本电子书将会教你最基础的 WordPress 使用、 优化、主题开发、 插件开发，以及如何在其他应用中接入 WordPress&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hm73lArsV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/christophM/interpretable-ml-book&#34;&gt;interpretable-ml-book&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《可解释的机器学习》由作者 Christoph Molnar 历时两年编写而成。书籍累计 250 多页、7.8 万词、1200 多次提交，感谢作者的无私贡献&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiR9nAUQR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zergtant/pytorch-handbook&#34;&gt;pytorch-handbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《PyTorch 中文手册》目标是帮助那些希望和使用 PyTorch 进行深度学习开发和研究的朋友快速入门&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhgKHlu6f&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/flutterchina/flutter-in-action&#34;&gt;flutter-in-action&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Flutter 中文网开源的电子书《Flutter实战》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HcVu1oXcO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;资料集合&#34;&gt;资料集合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/any86/any-rule&#34;&gt;any-rule&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理 60+ 条常用正则表达式， 并支持 Web / VsCode 插件 2 种查询方式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImmFHEUlL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alphaSeclab/awesome-reverse-engineering&#34;&gt;awesome-reverse-engineering&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了诸多与逆向工程相关的资源，覆盖了 Windows / Linux / macOS / Android / iOS / IoT 等操作系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkJwyiPMn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/andrews1022/web-development-2020-course-list&#34;&gt;web-development-2020-course-list&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Web 开发者 2020 年学习指南。其中包含常用的 Web 开发工具、设计软件、主流框架、基础知识、后端 &amp;amp; DevOps 技术堆栈等分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkCm5z0fU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tuvtran/project-based-learning&#34;&gt;project-based-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了一系列编程教程，教你如何从零开始构建应用，其中包含 C、C++、Java、PHP、JavaScript、Python 等主流编程语言，用于新手练习编程再适合不过了&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IjVDAkDLI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iptv-org/iptv&#34;&gt;iptv&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;牛逼了，这个 GitHub 项目收集了全球 8000 多个公共的 IPTV 频道，领域覆盖历史、教育、商业、电影、音乐&amp;hellip;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IjjVBszJL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qazbnm456/awesome-web-security&#34;&gt;awesome-web-security&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集汇总了 Web 安全相关的一些资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IcVYKrm4O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ownthink/KnowledgeGraphData&#34;&gt;KnowledgeGraphData&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;史上最大规模 1.4 亿中文知识图谱开源下载&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IckF7lj6h&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Awesome-Interview/Awesome-Interview&#34;&gt;Awesome-Interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了各大技术领域面试资料列表，含有前端、后端、客户端等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I1PMvac0b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/terkelg/awesome-creative-coding&#34;&gt;awesome-creative-coding&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心整理的创意编码资源列表，主要面向初中级学者，内容含有书籍、课程、工具和学习资源等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I1nv0BnkQ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ziishaned/learn-regex&#34;&gt;learn-regex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的一份非常棒的正则教程，每个知识点提供一个通俗易懂的例子说明&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I0LN1ewBb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jlevy/the-art-of-command-line&#34;&gt;the-art-of-command-line&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一篇在 GitHub 上拥有 6w+ Star 的文章《命令行的艺术》&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I0jvxiAhD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FeeiCN/Security-PPT&#34;&gt;Security-PPT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了来自各领域各公司会议分享的关于安全 PPT 的集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HFOGmp51T&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DeepGraphLearning/LiteratureDL4Graph&#34;&gt;LiteratureDL4Graph&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了近百篇关于图深度学习的论文列表集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HDeOhpjTO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mezod/awesome-indie&#34;&gt;awesome-indie&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外有一名开发者整理了一份帮助独立开发者赚钱的资源集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HCM8rdmFs&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guanguans/design-patterns-for-humans-cn&#34;&gt;design-patterns-for-humans-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Design patterns for humans》中文版，这是一份超全的设计模式讲解（共 23 种），每一种设计模式作者都尽可能使用通俗易懂的方式给大家解释，希望能帮助到大家更好的理解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HCCHWm0CD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rasbt/deeplearning-models&#34;&gt;deeplearning-models&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份汇集了各种深度学习架构、模型和技巧的资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HAuIZngCL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Wei-Xia/most-frequent-technology-english-words&#34;&gt;most-frequent-technology-english-words&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有位开发者收集整理了一份程序员工作中常见的英语词汇集合，这些都是来自英语类计算机书籍、文档、文章中高频常见的技术词汇&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HAliutbLr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0voice/from_coder_to_expert&#34;&gt;from_coder_to_expert&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有位开发者整理了各大公司内部里大牛分享的技术文档 PDF 或者 PPT&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HymK2jbsS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rasbt/deeplearning-models&#34;&gt;deeplearning-models&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理 TensorFlow 和 PyTorch 的各种深度学习架构、模型和技巧的集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HyeSXll5g&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dylanaraps/pure-bash-bible&#34;&gt;pure-bash-bible&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一位开发者将自己常用的任务脚本进行了整理，其中包括空白字符截取、数组翻转、数组循环、文件处理等 bash 代码片段，借助这些片段，可让你更快的搭建好脚本工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxLqpeRmw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jiansiting/Decryption-Tools&#34;&gt;Decryption-Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份勒索病毒解密工具的整理汇总&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxtKt6UG0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Bypass007/Emergency-Response-Notes&#34;&gt;Emergency-Response-Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集整理了从系统入侵到事件处理等相关案例的分析报告，其中包含蠕虫病毒、挖矿病毒、移动端劫持等常见案例&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hvvc1d2o6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yadox666/The-Hackers-Hardware-Toolkit&#34;&gt;The-Hackers-Hardware-Toolkit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了有关黑客所使用的工具集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hvg4nAXA4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/INTERMT/Awesome-PyTorch-Chinese&#34;&gt;Awesome-PyTorch-Chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 PyTorch 学习资源整理汇总，含有学习教程、手册、视频教程和实战项目等资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hu6M8ipk2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/firmai/industry-machine-learning&#34;&gt;industry-machine-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个项目收集整理了一些机器学习与数据科学相关的应用，其中包括会计、银行、保险、律师等多个行业的分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsTma7CXX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Weiwf/redis-mindmap&#34;&gt;redis-mindmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个项目总结了一些 Redis 常用的知识点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hswns4D1C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Quorafind/golang-developer-roadmap-cn&#34;&gt;golang-developer-roadmap-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Go 开发者路线图中文版来&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrgBls9gL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/orsanawwad/awesome-roadmaps&#34;&gt;awesome-roadmaps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;你们要的所有编程技能图谱都在这里了&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqdALlPLn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apachecn/AiLearning&#34;&gt;AiLearning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;机器学习、深度学习、自然语言处理相关的学习资料整理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hq9Fe1s8M&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/r0f1/datascience&#34;&gt;datascience&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份由维也纳数据科学家 Florian Rohrer 整理的 Python 数据科学清单，包含各种工具、代码片段、教程、博客等资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hq0eJb0L1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/521xueweihan/git-tips&#34;&gt;git-tips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;分享一些 Git 相关的使用技巧&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpgFF42m1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jaywcjlove/linux-command&#34;&gt;linux-command&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Linux 命令速查手册，手册共收集了 554+ 个 Linux 命令，用户可通过网站、Chrome 插件、Alfred Workflow 速查命令&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hp7johQa4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QSCTech/zju-icicles&#34;&gt;zju-icicles&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;浙江大学的课程攻略共享计划&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HoXRl8TDW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PKUanonym/REKCARC-TSC-UHT&#34;&gt;REKCARC-TSC-UHT&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;清华大学计算机系课程攻略&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HoQogwpbk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/public-apis/public-apis&#34;&gt;public-apis&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了大量公开的 API，让开发者可以快速集成到自己的产品中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HnSfLv8UL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lib-pku/libpku&#34;&gt;libpku&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集整理了北京大学相关的课程资料，内容包含人工智能、几何学、概率论、电动力学、算法设计与分析、世界通史、自然保护学等，十分全面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmhT7cbgF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RemoteML/bestofml&#34;&gt;bestofml&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集汇总了机器学习相关的资源，包括书籍、课程、博客、论文等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmgtR2q2U&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Alfred1984/interesting-python&#34;&gt;interesting-python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有趣的 Python 爬虫和数据分析小项目，可以用 Python 实现有趣的小项目，内容包括 Python 爬虫、Python 数据分析、机器学习、深度学习等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hme7JicmG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/greatghoul/remote-working&#34;&gt;remote-working&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集整理主要针对国内远程工作相关的资料集合，含有文章、书籍、工具、招聘网站和远程团队等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlOcmcmBc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amusi/TensorFlow-From-Zero-To-One&#34;&gt;TensorFlow-From-Zero-To-One&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位 TensorFlow 学习者整理的参考资料、笔记和代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlGlhu6jw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luong-komorebi/Awesome-Linux-Software&#34;&gt;Awesome-Linux-Software&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集整理了一批优质的 Linux 软件，包含电子书工具、命令行工具、文件管理器等多个分类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlAQkh97U&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yogykwan/acm-challenge-workbook&#34;&gt;acm-challenge-workbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《挑战程序设计竞赛》习题册攻略，含约 200 道题，可配合书籍或笔记，系统学习算法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlhZkiE8d&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rShetty/awesome-podcasts&#34;&gt;awesome-podcasts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集各大编程语言相关的播客列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hl4r76YmU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FrankFang/best-chinese-front-end-blogs&#34;&gt;best-chinese-front-end-blogs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了许多优质的前端中文博客&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkTDnF5QV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/USTC-Resource/USTC-Course&#34;&gt;USTC-Course&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中国科学技术大学课程资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HknIwaSEK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kr1s77/awesome-python-login-model&#34;&gt;awesome-python-login-model&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了各大网站模拟登录的爬虫脚本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkdZQiVXK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TheAlgorithms/Python&#34;&gt;Python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了许多基于 Python 实现的算法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hk9S788I2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/viatsko/awesome-vscode&#34;&gt;awesome-vscode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了许多实用的 VSCode 相关资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hk8uTrBqG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mahmoud/awesome-python-applications&#34;&gt;awesome-python-applications&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了许多基于 Python 开发的开源软件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hjya9dtlT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jobbole/awesome-design-cn&#34;&gt;awesome-design-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理设计师资源大全，含有 icon、Logo 设计、PhotoShop 插件、交互设计工具、流程图等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjsRnjPWq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sorrycc/awesome-f2e-libs&#34;&gt;awesome-f2e-libs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了前端常用的框架、工具和插件等资料集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiLEqp5cR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aliyr/Nodejs-Developer-Roadmap&#34;&gt;Nodejs-Developer-Roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2019 年新发布的 Node.js 开发者技术路线图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiyiorPqW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xingshaocheng/architect-awesome&#34;&gt;architect-awesome&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;后端架构师技术图谱，包含数据结构、常用算法、操作系统、设计模式、运维与技术支持等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hih0Ojmuk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/paubric/thisrepositorydoesnotexist&#34;&gt;thisrepositorydoesnotexist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了那些使用机器学习合成的内容，包括一些假脸、假猫、假房间、假二次元小姐姐&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hifrp5y1y&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/trekhleb/homemade-machine-learning&#34;&gt;homemade-machine-learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份十分全面的算法资源，主要分为监督学习、无监督学习和神经网络等几大类别，并提供了相关算法的原理介绍与 Demo 实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhzNS51lW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DovAmir/awesome-design-patterns&#34;&gt;awesome-design-patterns&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;汇总了与软件架构设计模式相关的资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhyessUnP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mezod/awesome-indie&#34;&gt;awesome-indie&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;帮独立开发者赚钱的资源整理，收集了相关社区、播客、书籍等资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhfzDr6wh&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cjbarber/ToolsOfTheTrade&#34;&gt;ToolsOfTheTrade&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集整理了一批高质量的工具与服务，帮助创业者或开发者快速搭建自己的产品，以金钱换时间。创业必备，重磅推荐！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhbrV8xP9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shockerli/php-awesome&#34;&gt;php-awesome&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;PHP 相关资源整理，每周更新&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hh4LU0bFZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apachecn/awesome-algorithm&#34;&gt;awesome-algorithm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;搜集了 LeetCode、HackRank、剑指 offer 等经典算法实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hh2BXfxpV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/LisaDziuba/Awesome-Design-Tools&#34;&gt;Awesome-Design-Tools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;搜集整理了许多设计相关的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgWwt2SGc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kujian/frontendDaily&#34;&gt;frontendDaily&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;前端开发技术日报，每日分享互联网最精彩的前端技术、前端资讯、后端编程、设计和资源等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgTbsEnXV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/the-akira/Computer-Science-Resources&#34;&gt;Computer-Science-Resources&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;搜集整理了互联网上计算机科学相关的学习资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgFeTu6hH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kmario23/deep-learning-drizzle&#34;&gt;deep-learning-drizzle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理深度学习、强化学习、机器学习、自然语言等等国外大学讲座的视频集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgEsbyuA9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/stanzhai/be-a-professional-programmer&#34;&gt;be-a-professional-programmer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了成为专业程序员路上用到的各种优秀资料、神器及框架&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hgr69qtWC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jobbole/awesome-java-cn&#34;&gt;awesome-java-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Java 资源大全中文版，内容包括构建工具、数据库、框架、模板、安全等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hgqjrv3qk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Ridter/Intranet_Penetration_Tips&#34;&gt;Intranet_Penetration_Tips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位开发者整理的一些内网渗透相关的 Tips，包含信息搜集、隐匿攻击、内网跨边界应用、横向渗透等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HeMboyh3J&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/trimstray/the-practical-linux-hardening-guide&#34;&gt;the-practical-linux-hardening-guide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份详细介绍了创建安全 Linux 生产系统所涉及的规划和工具指南&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HerKYFvqG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/skywind3000/awesome-cheatsheets&#34;&gt;awesome-cheatsheets&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理常用的编程语言、框架和开发工具的中文 Cheatsheet （速查表）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HeikuasF9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/charlax/professional-programming&#34;&gt;professional-programming&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了全栈程序员用到的各种优秀资料、工具及框架等资源集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/He8U0cnit&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yujiangshui/A-Programmers-Guide-to-English&#34;&gt;A-Programmers-Guide-to-English&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份专为程序员编写的英语学习指南&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HbyDyDBW8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VincentSit/ChinaMobilePhoneNumberRegex&#34;&gt;ChinaMobilePhoneNumberRegex&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一组匹配中国大陆手机号码的正则表达式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hb6m462Ju&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OI-wiki/OI-wiki&#34;&gt;OI-wiki&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个整合了编程竞赛有趣又实用的知识站点，内容含有竞赛中的基础知识、常见题型、解题思路以及常用工具等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ha2mA8bPA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/heibaiying/BigData-Notes&#34;&gt;BigData-Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份大数据入门指南&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImOL1yHQo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;面试资料&#34;&gt;面试资料&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/resumejob/awesome-resume&#34;&gt;awesome-resume&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了程序员简历常用例句集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImzPzvFvA&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xitu/google-interview-university&#34;&gt;google-interview-university&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套完整的学习手册帮助自己准备 Google 的面试&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Imw6cwlKB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/viraptor/reverse-interview&#34;&gt;reverse-interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份问题咨询清单，可用于面试时反问你想要面试的那家公司&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I6C28q5Qe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/haizlin/fe-interview&#34;&gt;fe-interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;前端面试每日 3+1，作者每天早上 5 点纯手工发布面试题，坚持至今已更新到 127 天&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I3m3t7X9c&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HarleysZhang/2019_algorithm_intern_information&#34;&gt;2019_algorithm_intern_information&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了各大公司的算法实习岗位信息集合，大部分岗位都是面向 2020 年毕业的学生，含有常见深度学习算法岗面试题及答案，暑期计算机视觉实习面经和总结&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0voice/interview_internal_reference&#34;&gt;interview_internal_reference&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 2019 年最新总结 BAT 等各大厂的技术面试题目，以及答案，分享给有需要的同学&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HDxgV9EJo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/grandyang/leetcode&#34;&gt;leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;880 道 LeetCode 题目解题代码 + 中文讲解，另外作者还开发了个 iOS 应用展示题目并提供其对题目的解法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HD4ZqzX33&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dyweb/awesome-resume-for-chinese&#34;&gt;awesome-resume-for-chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了一些适合中文的简历模板&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwMllvEjG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/colinlet/PHP-Interview-QA&#34;&gt;PHP-Interview-QA&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 PHP 面试问答项目，作者结合自身开发经验，所给出的 PHP 相关的知识解答。里面包含网络、数据结构与算法、Web 开发、数据库开发、设计模式等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwIBZrk1a&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wangzheng0822/algo&#34;&gt;algo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;数据结构和算法必知必会的 50 个代码实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvMRX38sM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lengyue1024/BAT_interviews&#34;&gt;BAT_interviews&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;BAT 大厂面试题及答案的收集与整理，其中包含机器学习、Linux、PHP、大数据、Python、Java、前端等内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvECw6Bsx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qiyuangong/leetcode&#34;&gt;leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;LeetCode 题解项目是英特尔员工写的 Python &amp;amp; Java 实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrdEH2PSi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/haoel/leetcode&#34;&gt;leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;LeetCode 题解项目 @左耳朵耗子 写的 C++ 实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrdEH2PSi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Advanced-Frontend/Daily-Interview-Question&#34;&gt;Daily-Interview-Question&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;每天一道前端大厂面试题，让你时刻保持危机感，不断精进自己的技能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmSbQ9gSH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yangshun/front-end-interview-handbook&#34;&gt;front-end-interview-handbook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;前端技术面试手册，含答案&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjGmZ8m4g&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/h5bp/Front-end-Developer-Interview-Questions&#34;&gt;Front-end-Developer-Interview-Questions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;前端开发者面试问题汇总整理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hjnmpsefu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Sroy20/machine-learning-interview-questions&#34;&gt;machine-learning-interview-questions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;汇总了一些与机器学习相关的面试问题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhR5rxtxD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huihut/interview&#34;&gt;interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;C/C++ 面试基础知识总结，送给准备换工作的开发者&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hh3N16f4P&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shengxinjing/programmer-job-blacklist&#34;&gt;programmer-job-blacklist&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由多位开发者共同维护的一份程序员找工作黑名单，仅供各位年后找工作参阅，具体实际情况请自行判断&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HeYKJqVfw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aylei/interview&#34;&gt;interview&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份写在 2019 年初的后端社招面试经历，作者写了自己在蚂蚁、头条、PingCAP 三家公司的面试经历，年后打算换工作的后端程序员可以看下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HeBburdhr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xiaoylu/leetcode_category&#34;&gt;leetcode_category&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份作者在刷 Leetcode 题目时记录下来的解题思路，且提供详细的注释，并且按问题类型整理出来&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImSGzcOCc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;有趣网站&#34;&gt;有趣网站&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;地址&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://getavatars.app/&#34;&gt;getavatars&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个很有趣的网站可以生成无限多的卡通头像，你总能找到一款适合你的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IeI4DmAMN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://bruno-simon.com/&#34;&gt;bruno-simon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;我见过的最酷主页，整个页面需要 3D 导航&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Idllq35Wi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zerosoul/chinese-colors&#34;&gt;chinese-colors&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可在网页上快速展示各类色系搭配的预览效果，并提供详细的颜色配值参考&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I6ifNowOG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://tophub.fun/main/home/hot&#34;&gt;鱼塘&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;整合各大社区平台今日热榜&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://www.atoolbox.net/&#34;&gt;atoolbox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个收集超多实用在线工具的网站，并且持续收集更新&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HuIStoDVa&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://learnxinyminutes.com/&#34;&gt;learnxinyminutes-docs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个特别牛逼的编程实训网站，上面拥有算法、数据结构、编程语言、开发工具相关的简短训练教程，部分内容支持中文，开发者们可以用这个网站来快速体验一门新技术，当然深入了解还是建议看官方文档&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtwzEsYsb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yikm.net/&#34;&gt;yikm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;最近有个开发者搞了个小霸王模拟器，里面提供魂斗罗、冒险岛、热血格斗传送、超级马里奥等经典游戏供玩家体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsUVzlhuC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://i18ns.com/&#34;&gt;i18ns&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有个 Android 开发者花了两年时间，收集了 1500 多万条 App 的翻译数据， 并做成了一个搜索网站，希望能帮助独立开发者以更低的成本、更高质量的完成 App 国际化工作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsAHl4qLD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://tool.lu/&#34;&gt;在线工具&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一批实用的在线工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrPmGt25u&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://socialmedia-class.org/highschool.html&#34;&gt;highschool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Python、NLP、Twitter API 三剑合一的新手入门课程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HrwU3360C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.toolnb.com/&#34;&gt;爱资料工具&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了许多超实用的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hrn5cfIgy&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://tools.miku.ac/&#34;&gt;MikuTools&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个网站上面有好多超级实用的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqsUz3m4Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://wexond.net/&#34;&gt;Wexond&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款精致、简洁、扩展性强的开源 Web 浏览器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hqj5IxIby&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://likexia.gitee.io/game/index.html#/&#34;&gt;GitHub Games&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个网站把 GitHub 上一些有趣的 HTML 小游戏进行了汉化，然后放到上面供人玩耍&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hn77ibjWI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://paperswithcode.com/&#34;&gt;paperswithcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该网站按照计算机的不同应用领域进行划分，收集并整理了众多开源项目，每个项目都包含着相关论文供学习参考，分类涵盖了计算机视觉、自然语言处理、医学、方法论、语音、游戏、机器人等多个领域&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgKJR1s9z&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;有趣--实用开源工具&#34;&gt;有趣 / 实用开源工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/liyasthomas/postwoman&#34;&gt;postwoman&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源、轻量级、快速且美观的 API 调试工具，用于替代 Postman，支持 Postman 绝大部分功能，从 Postman 换过来，基本上也没有什么学习成本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Imd32rEJE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ymm-tech/gods-pen&#34;&gt;gods-pen&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源运营工具：码良，可用于快速制作 H5 页面，用户无需掌握复杂的编程技术，通过简单拖拽、少量配置即可制作精美的页面，可用于营销场景下的页面制作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkZD4xp8t&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huginn/huginn&#34;&gt;huginn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的自动化工具，类似 IFTTT 的开源版应用，可通过开发者设定的某个事件来触发具体操作。比如你可以设定当 GitHubDaily 发送一条微博后，自动给你推送一封邮件提醒：&amp;ldquo;这货又发微博了&amp;rdquo;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkMhdyx5S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bytefury/crater&#34;&gt;crater&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源的 Web 与移动端发票应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkxlzEVBF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FiloSottile/mkcert&#34;&gt;mkcert&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;使用 mkcert 这款工具，即可零配置，一条命令在本地搭建受信任证书环境&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkjNmuk4Q&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CoatiSoftware/Sourcetrail&#34;&gt;Sourcetrail&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款跨平台开发神器，借助可交互式的图形界面操作，让你可以快速阅读项目源码，提升开发效率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ik6DvCNOz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/doocs/md&#34;&gt;md&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的前端编辑器，主要对微信排版做了适配&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389Ij41gdqvJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Y2Z/monolith&#34;&gt;monolith&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你想保存某个网页到电脑上，可以试下这个开源项目，有别于普通页面的保存操作，monolith 会通过命令行一次性打包页面中所有 CSS，图片和 JavaScript 等资源，而后生成一个单独的 HTML5 文档，方便你更好的保存与分享&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ij2M2E29i&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chaitin/xray&#34;&gt;xray&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大且完善的安全评估工具，该工具由多名经验丰富的一线安全从业者呕心打造而成，支持的漏洞检测类型有 XSS 漏洞、SQL 注入、命令/代码注入、文件上传等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImFqCjI0b&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yinxin630/fiora&#34;&gt;fiora&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款有趣的在线聊天应用。基于 node.js, mongodb, socket.io 和 react 编写&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Iil2JDvmT&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vasanthv/jsonbox&#34;&gt;jsonbox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;该工具为开发者提供一个特定链接，通过向这个链接发送 HTTP 请求，可以用来存储、读取、修改 JSON 数据&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I7VgIs9B5&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ksky521/nodeppt&#34;&gt;nodeppt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能将 Markdown 文档转成高大上 PPT 的开源工具，支持图表、流程图、数学符号、自定义主题配色以及样式等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I0CZngraF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gramener/comicgen&#34;&gt;comicgen&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个很有趣的库，在线制作漫画人物并可将制作的人物图片放在你的网站中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HEKGTl4Vv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/soimort/translate-shell&#34;&gt;translate-shell&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在终端下使用的翻译工具，支持切换 Google Translate、Bing Translator、Yandex.Translate 和 Apertium 翻译引擎&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kefranabg/readme-md-generator&#34;&gt;readme-md-generator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能帮你生成漂亮的 REAMDE.md 文件小工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HANzZ3oll&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/idealclover/Love-Gift&#34;&gt;Love-Gift&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位开发者做了个网站，当做送给女朋友的情人节礼物&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HAzY6DatJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Roujack/mathAI&#34;&gt;mathAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个拍照做题程序。输入一张包含数学计算题的图片，输出识别出的数学计算式以及计算结果&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hys2OxDkZ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/plibither8/2048.cpp&#34;&gt;2048.cpp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用 C++ 写的一款高逼格在终端玩的 2048 游戏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HyojrzAP6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hui-ho/WebStack-Laravel&#34;&gt;WebStack-Laravel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的网址导航项目，拥有完整的前后台，可搭建部署自己收藏的网址导航站点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxZXvh8gw&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lvxianchao/the-fucking-github&#34;&gt;the-fucking-github&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个高颜值 Chrome 浏览器插件，可以用来很方便地查看、整理、搜索你已经 Star 过的项目和搜索 Github 上的项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HxxtPsSHb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sentialx/multrin&#34;&gt;multrin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源应用窗口聚合工具，能将 Windows 系统上打开的应用窗口聚合在一起，类似浏览器标签页一样，可以快速管理和切换&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hxo3kAE4k&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GNOME/gimp&#34;&gt;gimp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款功能强大且免费开源的图片处理工具，并支持 macOS、Windows 及 Linux 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hx9k486Vv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/timqian/star-history&#34;&gt;star-history&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在线查看 GitHub Star 历史上涨记录的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwCUQD0Kx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/FavioVazquez/ds-cheatsheets&#34;&gt;ds-cheatsheets&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;数据科学相关的速查表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hws77xZia&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mayneyao/gsbg&#34;&gt;gsbg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;如果你喜欢如附图一样的随机彩色块图片，那么可以用这款工具来生成&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/synox/youtube-dl-interactive&#34;&gt;youtube-dl-interactive&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;YouTube 视频终端下载工具，主要在 youtube-dl 基础上优化了用户操作体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hwk3RfEwb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YGYOOO/WeChat-Shelter&#34;&gt;WeChat-Shelter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Chrome 插件可以把某信伪装成云笔记，看着挺适合聊天摸鱼的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hw6U0Bcon&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cloudkj/scar&#34;&gt;scar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一键部署你的静态网站，并给其加上 HTTPS、全球 CDN、自定义域名等功能，用这个工具就可以做到！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvQp8acI7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SpaceVim/SpaceVim&#34;&gt;SpaceVim&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;SpaceVim 是一个社区驱动的模块化的 Vim IDE，以模块的方式组织管理插件以及相关配置，为不同的语言开发量身定制了相关的开发模块，该模块提供代码自动补全， 语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱即用的 Vim IDE&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvO30EQXr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lawliet01/DIYGame&#34;&gt;DIYGame&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上一款在线游戏设计工具，用户在无任何技术背景的情况下，可随意打造一款属于自己的冒险游戏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvD36e4xt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ascoders/gaea-editor&#34;&gt;gaea-editor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可以让你在浏览器上快速设计一个简单的网站，有点像 Strikingly 旗下的一款产品「上线了」的简陋版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hvxy8pGWJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Eugeny/terminus&#34;&gt;terminus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费开源、高颜值、可自定义配置的终端 Terminus，并支持 Windows、MacOS、Linux 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvlLwmWG7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sherlonWang/logodiy&#34;&gt;logodiy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单的在线 Logo 制作工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HuaHFEGTr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hiroppy/fusuma&#34;&gt;fusuma&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过编写 Markdown 来快速生成演讲幻灯片&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtApLeNo4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/makegirlsmoe/makegirlsmoe_web&#34;&gt;makegirlsmoe_web&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个二次元头像生成器，它通过设置发色、肤色、配饰等属性来随机生成一个二次元角色。另外这个项目还上链了，如果你觉得生成的二次元角色比较好看，可以直接到链上跟别人进行交易&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtlDEmDSG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/terminal&#34;&gt;terminal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软发布且开源了一款新的命令行终端工具 Windows Terminal&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ht5Bk8y03&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aimerforreimu/auxpi&#34;&gt;auxpi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;它通过对多个图床平台进行整合，使得一个图床挂掉的时候，会自动将图片分发到其它图床上，让图片外链成为不死链！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsLr1mmg1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HFO4/gameboy.live&#34;&gt;gameboy.live&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个项目在终端上面打造了一个 Gameboy 模拟器，让你可以直接在终端上面玩掌上游戏，牛逼啊！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hsrt1vVMt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/taylorconor/quinesnake&#34;&gt;quinesnake&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在代码里面玩贪吃蛇&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hs0iwtuCc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/EtherDream/jsproxy&#34;&gt;jsproxy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 JS 实现的网络调试工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hr6RU2o4C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mikolajdobrucki/ikonate&#34;&gt;ikonate&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个十分牛逼的图标库 Ikonate，上面的所有图标完全开源，皆可商用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqMWZ92rP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/waynecz/dadda-translate-crx&#34;&gt;dadda-translate-crx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高颜值的划词翻译插件，自带生词簿及吐司弹词记忆，可与有道、扇贝单词同步&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqMWDhBCc&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Louiszhai/tool&#34;&gt;tool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Mac 生产力工具链推荐&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqkF909yG&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Ji4n1ng/OpenInTerminal&#34;&gt;OpenInTerminal&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Mac 小工具，它支持一键在终端中打开当前目录或选中目录&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hq1PUkypY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jhuangtw-dev/xg2xg&#34;&gt;xg2xg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 一名前员工在 GitHub 上分享了他在 Google 工作时日常会使用的一些工具，以及外界对应的替代方案&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpoIV2PSH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YMFE/yapi&#34;&gt;yapi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个高效、易用、功能强大、可视化的 API 管理平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HoMOKCOmF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/WarpPrism/AutoPiano&#34;&gt;AutoPiano&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的这个 Web 钢琴应用（AutoPiano）让音乐爱好者可以在线练琴&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Ho1GJ57x6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kyleduo/TinyPNG4Mac&#34;&gt;TinyPNG4Mac&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源的图片无损压缩客户端 TinyPNG4Mac，该工具提供了 PNG 图片的 “几乎无损” 压缩服务，你可以通过简单的拖拽完成对 PNG 图片的压缩，无需打开浏览器，无需手动下载图片&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HnW69rZjW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ericandrewlewis/emoji-mosaic&#34;&gt;emoji-mosaic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个有趣的工具，能根据原图配色，将图片转为用 emoji 填充的新图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HnKoH9RK4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cnlh/nps&#34;&gt;nps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款轻量级、功能强大的内网穿透代理服务器，支持 TCP、UDP 流量转发，内网 HTTP、Socks5代理等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HnDkjvfhn&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/youyuge34/PI-REC&#34;&gt;PI-REC&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;通过与 AI 结合的方式，帮你快速将手绘草稿转为成品图，随便画几笔就能转成完整画像，简直堪称手残党的福音&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmXGNkKjt&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/helloxz/imgurl&#34;&gt;imgurl&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单、纯粹的图床程序，支持拽拖、多图、粘贴、URL 上传，可裁剪、压缩、鉴黄图片，自动生成缩略图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmAI50BdI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mas-cli/mas&#34;&gt;mas&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Mac 应用商店命令行工具，支持搜索、安装、更新应用等操作，用起来很方便&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmcWFmtbD&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DimitarPetrov/stegify&#34;&gt;stegify&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款神奇的命令行工具，能将任意文件隐藏到图片里面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hm37OeCGp&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vvo/gifify&#34;&gt;gifify&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款将视频转换成 GIF 图的工具，支持任何格式的视频以及选取某个时间段转换&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlXCR2q2k&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zdict/zdict&#34;&gt;zdict&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个运行在终端的在线字典工具，支持多款字典切换查询，查询结果高亮等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlPzB4gWe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/VKSRC/Github-Monitor&#34;&gt;Github-Monitor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于监控 GitHub 代码仓库的系统，企业可利用该系统及时发现内部代码泄露&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlrpPpGWd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sylnsfar/qrcode&#34;&gt;qrcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;二维码生成器，支持生成普通二维码、带图片的艺术二维码和动态二维码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hlni6uVsd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/traduora/traduora&#34;&gt;traduora&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源翻译平台，支持多人协作在线翻译，可导入导出 JSON、CSV、YAML 等多种文本格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HldVNp97O&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sherlock-project/sherlock&#34;&gt;sherlock&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源脚本，可在各大社交平台检查用户名是否被占用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hlcunnhqd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antonmedv/fx&#34;&gt;fx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;优化终端命令行 JSON 查阅体验，支持展开 JSON 数据，访问单个数据点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hl8yPqXwl&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/infinitered/nsfwjs&#34;&gt;nsfwjs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的黄图鉴别工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hl33SdQfX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/mozilla/send&#34;&gt;send&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 mozilla 开源的一款简单、私密的文件分享服务，支持设置分享文件的下载次数、有效天数，并可对文件进行加密&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkPHQmIW9&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ksky521/nodeppt&#34;&gt;nodeppt&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可能是迄今为止最好的网页版演示库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkGhlvc7R&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/devhubapp/devhub&#34;&gt;devhub&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款跨平台的 GitHub 通知管理客户端，帮助开发者更好的收集、整理、查看 GitHub 消息&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkwQQC0xz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AShujiao/vscode-maxPlus&#34;&gt;vscode-maxPlus&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 VSCode 插件，让你能在 vscode 上划水看游戏资讯&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HksJ8if5F&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/olive-editor/olive&#34;&gt;olive&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的视频编辑器，支持 Windows、macOS、Linux 等主流桌面平台，推荐给想用 Final Cut Pro 却囊中羞涩的同学&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkjiCyGxC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vladocar/screenshoteer&#34;&gt;screenshoteer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;使用命令行一键截取网页图片&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjR18Bx9W&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nondanee/vsc-netease-music&#34;&gt;vsc-netease-music&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 VSCode 插件，让你能在 vscode 上划水听音乐&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjdVUEAAE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Vincedream/NodeMail&#34;&gt;NodeMail&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Node 的爬虫脚本，每天定时给女朋友发一封暖心邮件，非单身狗的程序员可以试用下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hja0nzdXe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wigl/iSimulator&#34;&gt;iSimulator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款实用的 GUI 工具，可用于控制模拟器和管理模拟器里安装的应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiWEl80bW&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Molunerfinn/PicGo&#34;&gt;PicGo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款简单易用的图片上传工具，支持自定义第三方图床&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiJiiAAEd&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/notable/notable&#34;&gt;notable&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的高颜值、跨平台的 Markdown 编辑器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiHIT4imo&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/postlight/mercury-parser&#34;&gt;mercury-parser&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Web 内容提取工具。开发者可通过 JavaScript 与 CSS 选择器来定制解析器，以获取页面上指定内容&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HisSwz8rP&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zrk1993/read-vscode-e&#34;&gt;read-vscode-e&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 VSCode 插件，让你能在 vscode 上划水看小说&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HiqrjtIFI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jkpang/PPRows&#34;&gt;PPRows&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款在 Mac 上计算你写了多少行代码的工具，支持同时检测多文件夹代码，自定义检测的文件类型等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HijmW7MYE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hustcc/lint-md&#34;&gt;lint-md&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于检查中文 Markdown 编写格式规范的命令行工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HibvR77oL&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Neulana/douban-movie-extension&#34;&gt;douban-movie-extension&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Chrome 浏览器扩展，在豆瓣电影页面增加电影资源模块，帮你轻松找到电影资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hi60UvUqu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kyleneideck/BackgroundMusic&#34;&gt;BackgroundMusic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 Mac 音频工具，可以在播放其他音频时，自动暂停所有背景音乐，播放结束后再次恢复背景音乐，并支持控制单个应用的音量&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hi25mgCCK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/oldj/SwitchHosts&#34;&gt;SwitchHosts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款快速切换 Hosts 工具，支持 Win，Mac 和 Linux&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhWApFnyu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/QL-Win/QuickLook&#34;&gt;QuickLook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;给 Windows 用户的福利，让 Windows 用户可以用上 Mac 系统的文件预览功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgY5SEElB&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/transloadit/uppy&#34;&gt;uppy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 JavaScript 的文件上传工具，可无缝集成到任何应用。支持从本地磁盘、远程 urls、Google Drive、Dropbox、Instagram、snap 等位置上传文件，并在线预览编辑&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgUalh24R&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/deepred5/daily-anime&#34;&gt;daily-anime&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源的 VSCode 插件，让你能在 VSCode 上划水追番&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhHFLwPce&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/agalwood/Motrix&#34;&gt;Motrix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款全能的下载工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgAwExNvV&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cjbassi/gotop&#34;&gt;gotop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个酷炫的命令行活动监视器，基于 Go 语言编写&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hgjf5x6Tb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AirtestProject&#34;&gt;AirtestProject&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个网易开发的 UI 界面自动化测试工具，主要使用图像识别技术来定位页面具体的 UI 元素，这也就意味着它可以在不使用任何代码注入的情况下完成自动化测试&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HdplOtzj1&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dreamans/syncd&#34;&gt;syncd&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款使用 Go 语言开发的代码部署工具，它具有简单、高效、易用等特点，可以提高团队的工作效率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HcjM2jeRb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ecmadao/hacknical&#34;&gt;hacknical&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个生成可视化 GitHub 简历的网站&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HaRqC5A6C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/iikira/BaiduPCS-Go&#34;&gt;BaiduPCS-Go&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个仿 Linux shell 文件处理命令的百度网盘命令行客户端，支持 Windows, macOS, linux, 移动设备等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HauE4mekH&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nvbn/thefuck&#34;&gt;thefuck&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;输错命令后，fuck 一下，自动帮你更正命令，解气又实用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgsFzhOg2&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DIYgod/RSSHub&#34;&gt;RSSHub&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量、易于扩展的 RSS 生成器，它可以给任何奇奇怪怪的内容生成 RSS 订阅源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/He3p24W3S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/t9tio/cloudquery&#34;&gt;cloudquery&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款能给任意网站生成 API 的工具，开发者通过点击页面元素即可选择生成内容，非常方便，搞前端的同学可以了解下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HdyIz2DSx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/0xHJK/music-dl&#34;&gt;music-dl&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;使用 Python 开发的一个可从网易云音乐、QQ音乐、酷狗音乐等搜索和下载最优音质歌曲的工具，支持多线程搜索和下载，还可以对搜索结果去重&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HcM3xbOla&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;机器学习--人工智能&#34;&gt;机器学习 / 人工智能&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Fabsqrt/BitTigerLab&#34;&gt;BitTigerLab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;计算机科学中文学习笔记&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IcH3ipq5C&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gxtrobot/bustag&#34;&gt;bustag&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于机器学习的老司机车牌自动推荐系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IasqikBsx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ossu/computer-science&#34;&gt;computer-science&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的计算机科学教学资源，可用于自学编程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I6TDmhBfv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/ai-edu&#34;&gt;ai-edu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软在 GitHub 上开源了一份 AI 教学资源，主要服务于国内学生、教师以及 IT 从业人员。&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I6LnVBo4e&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apachecn/ai-roadmap&#34;&gt;ai-roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;来自 ApacheCN 开源组织整理的一份 AI 人工智能路线图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I0sW28AMe&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shunliz/Machine-Learning&#34;&gt;Machine-Learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;机器学习原理笔记整理。前半部分关注数学基础，机器学习和深度学习理论。后半部分关注工程实践和理论应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HvRMn0al7&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Doragd/Chinese-Chatbot-PyTorch-Implementation&#34;&gt;Chinese-Chatbot-PyTorch-Implementation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个利用有趣中文语料库 qingyun 训练出来的中文聊天机器人&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hu8lydUVK&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/machinelearningmindset/machine-learning-course&#34;&gt;machine-learning-course&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份机器学习课程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtXlDrUaM&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/amitness/learning&#34;&gt;learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国外一名开发者分享的数据科学学习计划，旨在每日不断精进学习，以提升自己的技术水平&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HsPere8j6&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fritzlabs/Awesome-Mobile-Machine-Learning&#34;&gt;Awesome-Mobile-Machine-Learning&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;移动端上的机器学习资源整理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqLnd9dIF&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/virgili0/Virgilio&#34;&gt;Virgilio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份机器学习指南，该指南可作为你机器学习的导师，为你提供完整学习路径，让你了解更多工具的使用，掌握更多技能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpW70c0JE&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ShiqiYu/libfacedetection&#34;&gt;libfacedetection&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;堪称史上最快图像中人脸检测的开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HmlYOfcAu&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/luanfujun/deep-painterly-harmonization&#34;&gt;deep-painterly-harmonization&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于深度学习的开源项目，让图片可以毫无违和感的融入到绘画作品中，这波操作太强了！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjV8QBljR&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yaoguangluo/Deta_Parser&#34;&gt;Deta_Parser&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个每秒高达 2700 万混合分词， 高精准确率，支持病句分析，词性，词频统计，自由扩充词库的快速神经网络中文分词包&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hi7Dxwr7V&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wzpan/wukong-robot&#34;&gt;wukong-robot&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单、灵活、优雅的中文语音对话机器人/智能音箱项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhSES4lL0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/knazeri/edge-connect&#34;&gt;edge-connect&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;加拿大安大略理工大学开源的图像自动修复方法，可由线到面逐步修复受损或被打码的图像，也可进行图像拼接、移除、编辑等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhuiVnXVj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ageitgey/face_recognition&#34;&gt;face_recognition&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;号称世界上最简单的人脸识别库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgueYxAsI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/graykode/nlp-tutorial&#34;&gt;nlp-tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份基于 TensorFlow 和 Pytorch 的自然语言处理教程，该课程主要面向深度学习开发者&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgaBhsYXY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zeusees/HyperDL-Tutorial&#34;&gt;HyperDL-Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份深度学习相关的系列文章，作者总结了在深度学习实践中的一些经验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HeVBT8K8w&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/openai/spinningup&#34;&gt;spinningup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 OpenAI 发布的一份深度强化学习教学资源集，内容包括易懂的深度强化学习代码示例、算法、习题、文档和教程等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hdxc0tvmN&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/geeeeeeeeek/git-recipes&#34;&gt;git-recipes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的 Git 中文教程，源于国外社区的优秀文章和个人实践&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hdel1pSPz&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/fighting41love/funNLP&#34;&gt;funNLP&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个作者在文本中抽取结构化信息时，整理出所用到 GitHub 上的资源整合，内容包括：中英文敏感词、语言检测、中外手机/电话归属地/运营商查询、名字推断性别、手机号抽取、身份证抽取等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hd4UvDdep&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wwxFromTju/awesome-reinforcement-learning-zh&#34;&gt;awesome-reinforcement-learning-zh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份强化学习从入门到放弃的资料汇总&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HctcwvT2n&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;非开源的实用工具&#34;&gt;非开源的实用工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;地址&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://projectnaptha.com/&#34;&gt;Project Naptha&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;超级实用的 Chrome 插件，可选中、复制、编辑图片中的内嵌文字！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IcO7FsbX3&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mathpix.com/&#34;&gt;Mathpix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这款工具能将带数学公式的截图一键转成 latex 代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hozgx9mUC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.remove.bg/&#34;&gt;removebg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google Chrome 的技术经理推荐的一款工具能帮你快速移除任何图片的背景&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HnzoMqRTU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://jeasonstudio.github.io/oxygen-demo/&#34;&gt;OXYGEN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这个网站可以帮你生成手绘风格的流程图或架构图，写文章的时候随手插入几张应该很有艺术感&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HpaYwf2Pv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://monitor.firefox.com/&#34;&gt;Firefox Monitor&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;国内外不少知名企业都曾经被拖库，为此 Firefox 专门搞了这么一个工具，来帮助用户检查自己的信息是否被泄露&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hpq69C8aO&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codeimg.io/&#34;&gt;codeimg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款免费在线把源代码生成高逼格的图片工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/I0a52r5GX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://toolinbox.net/iPic/&#34;&gt;iPic&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Mac 上一个图床神器，可通过快捷键将本地图片上传到服务器，并自动生成 Markdown 图片格式的排版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hae4LEBqC&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;其它&#34;&gt;其它&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;地址&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://www.yuque.com/yuque/blog/yuque-info-tech-encyclopedia&#34;&gt;语雀 IT 百科&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份高质量的 IT 百科知识库，上面涵盖诸多互联网技术领域的内容，具有一定的学习和参考价值&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HweL52O9M&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/llitfkitfk/go-best-practice&#34;&gt;go-best-practice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一篇对国外文章《Go 语言实战: 编写可维护 Go 语言代码建议》的中文翻译版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/ImgYA92VY&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/microsoft/api-guidelines&#34;&gt;api-guidelines&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软官方出品的 REST API 指导规范，希望能帮助开发者更好的设计接口&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkGYffcVS&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xxjwxc/uber_go_guide_cn&#34;&gt;uber_go_guide_cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Uber 团队出的 Go 语言编码规范，有人给翻译了中文版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IkqCXhIsb&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/home-assistant/home-assistant&#34;&gt;home-assistant&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的智能家居系统，你可以利用它来追踪并控制家里的智能设备，如灯光、温度、声音等。另外，Home Assistant 还提供了交互友好的管理后台，可自定义控制面板，并支持跨终端使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/IknV59FKk&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Binaryify/NeteaseCloudMusicApi&#34;&gt;NeteaseCloudMusicApi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有位开发者整了个网易云音乐非官方 API，共有 100 多个接口，感觉还挺全面的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HwaDmpthI&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/developer-learning/night-reading-go&#34;&gt;night-reading-go&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;每周会通过在线直播的方式，向开发者分享 Go 相关的技术话题，于 Slack 上沟通交流编程技术话题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hv2UwEUtq&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nusr/hacker-laws-zh&#34;&gt;hacker-laws-zh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;主要收录了一些最常见的定律、原则以及模式，并对它们进行简要的讲解&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HuAD2ss1G&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shinima/battle-city&#34;&gt;battle-city&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上开源的这个坦克大战小游戏还原度好高啊，好玩得停不下来！还可以双人组队！&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HugcDaYy0&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Remix-Design/RemixIcon&#34;&gt;RemixIcon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套开源图标库 Remix Icon，主要面向设计师和开发者的开源图标库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HtYQZi0eJ&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/robb0wen/synthwave-vscode&#34;&gt;synthwave-vscode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款有点骚的 VS Code 主题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hsj9wsRZj&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MSWorkers/support.996.ICU&#34;&gt;support.996.ICU&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微软和 GitHub 员工宣布支持 996.ICU 运动！如果你也想支持这一运动，可提交 PR 到该项目的支持者名单中&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqWvF0wrr&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kasuganosoras/cxk-ball&#34;&gt;cxk-ball&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;有个在 GitHub 上写了个蔡徐坤打篮球的小游戏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HqO7GxyD8&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/instantbox/instantbox&#34;&gt;instantbox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让你能在不到 30 秒的时间内得到一个干净、开箱即用的临时 Linux 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HlKgP86Rx&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aksakalli/gtop&#34;&gt;gtop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个使用 Node.js 实现的终端系统监控面板&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HllUSdvDU&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zhaoolee/ChromeAppHeroes&#34;&gt;ChromeAppHeroes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Chrome 插件英雄榜，为优秀的 Chrome 插件写一本中文说明书&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HkrlT72sv&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zenozeng/Free-Chinese-Fonts&#34;&gt;Free-Chinese-Fonts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收录了一些免费的中文字体&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjChS7CJX&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pwxcoo/chinese-xinhua&#34;&gt;chinese-xinhua&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中华新华字典数据库，包括常用歇后语、成语、词语和汉字&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HjjqSai6g&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Micropoor/Micro8&#34;&gt;Micro8&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源的渗透攻击教程，适用于初中级安全从业人员，乙方安全测试，甲方安全自检，网络安全爱好者&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HhOJkpaOi&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imthenachoman/How-To-Secure-A-Linux-Server&#34;&gt;How-To-Secure-A-Linux-Server&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;这份文档将指导你如何让 Linux 服务器更加安全&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/HgbnZ9e8S&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GitHub-Laziji/VBlog&#34;&gt;VBlog&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个借助 GitHub Pages 和 GitHub API 搭建的可动态发布文章的博客，如果你还在纠结于自己的博客系统用什么搭建&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Hd6zX0Gv4&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>Go1.12 defer 会有性能损耗，尽量不要用？</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-06-16-defer-loss/</link>
      <pubDate>Sun, 16 Jun 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-06-16-defer-loss/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wuUYV.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;上个月在 @polaris @轩脉刃 的全栈技术群里看到一个小伙伴问 &lt;strong&gt;“说 defer 在栈退出时执行，会有性能损耗，尽量不要用，这个怎么解？”&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;恰好前段时间写了一篇 &lt;a href=&#34;https://segmentfault.com/a/1190000019303572&#34;&gt;《深入理解 Go defer》&lt;/a&gt; 去详细剖析 &lt;code&gt;defer&lt;/code&gt; 关键字。那么这一次简单结合前文对这个问题进行探讨一波，希望对你有所帮助，但在此之前希望你花几分钟，自己思考一下答案，再继续往下看。&lt;/p&gt;&#xA;&lt;h2 id=&#34;测试&#34;&gt;测试&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DoDefer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }(&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DoNotDefer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;key&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;基准测试：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BenchmarkDoDefer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;testing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;N&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;DoDefer&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.com/EDDYCJY/blog&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BenchmarkDoNotDefer&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;testing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;N&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;DoNotDefer&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;煎鱼&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.com/EDDYCJY/blog&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go test -bench=. -benchmem -run=none&#xA;goos: darwin&#xA;goarch: amd64&#xA;pkg: github.com/EDDYCJY/awesomeDefer&#xA;BenchmarkDoDefer-4          20000000            91.4 ns/op        48 B/op          1 allocs/op&#xA;BenchmarkDoNotDefer-4       30000000            41.6 ns/op        48 B/op          1 allocs/op&#xA;PASS&#xA;ok      github.com/EDDYCJY/awesomeDefer 3.234s&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从结果上来，使用 &lt;code&gt;defer&lt;/code&gt; 后的函数开销确实比没使用高了不少，这损耗用到哪里去了呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>深入理解 Go defer</title>
      <link>https://note.lican.site/posts/posts/go/defer/2019-05-27-defer/</link>
      <pubDate>Mon, 27 May 2019 12:30:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/defer/2019-05-27-defer/</guid>
      <description>&lt;p&gt;在上一章节 《深入理解 Go panic and recover》中，我们发现了 &lt;code&gt;defer&lt;/code&gt; 与其关联性极大，还是觉得非常有必要深入一下。希望通过本章节大家可以对 &lt;code&gt;defer&lt;/code&gt; 关键字有一个深刻的理解，那么我们开始吧。你先等等，请排好队，我们这儿采取后进先出 LIFO 的出站方式&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;特性&#34;&gt;特性&lt;/h2&gt;&#xA;&lt;p&gt;我们简单的过一下 &lt;code&gt;defer&lt;/code&gt; 关键字的基础使用，让大家先有一个基础的认知&lt;/p&gt;&#xA;&lt;h3 id=&#34;一延迟调用&#34;&gt;一、延迟调用&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;end.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go&#xA;2019/05/19 21:15:02 end.&#xA;2019/05/19 21:15:02 EDDYCJY.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;二后进先出&#34;&gt;二、后进先出&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strconv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Itoa&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;end.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go&#xA;2019/05/19 21:19:17 end.&#xA;2019/05/19 21:19:17 EDDYCJY5.&#xA;2019/05/19 21:19:17 EDDYCJY4.&#xA;2019/05/19 21:19:17 EDDYCJY3.&#xA;2019/05/19 21:19:17 EDDYCJY2.&#xA;2019/05/19 21:19:17 EDDYCJY1.&#xA;2019/05/19 21:19:17 EDDYCJY0.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;三运行时间点&#34;&gt;三、运行时间点&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9; &lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;defer.EDDYCJY.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;main.EDDYCJY.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>深入理解 Go panic and recover</title>
      <link>https://note.lican.site/posts/posts/go/panic/2019-05-21-panic-and-recover/</link>
      <pubDate>Tue, 21 May 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/panic/2019-05-21-panic-and-recover/</guid>
      <description>&lt;p&gt;作为一个 gophper，我相信你对于 &lt;code&gt;panic&lt;/code&gt; 和 &lt;code&gt;recover&lt;/code&gt; 肯定不陌生，但是你有没有想过。当我们执行了这两条语句之后。底层到底发生了什么事呢？前几天和同事刚好聊到相关的话题，发现其实大家对这块理解还是比较模糊的。希望这篇文章能够从更深入的角度告诉你为什么，它到底做了什么事？&lt;/p&gt;&#xA;&lt;h2 id=&#34;思考&#34;&gt;思考&lt;/h2&gt;&#xA;&lt;h3 id=&#34;一为什么会中止运行&#34;&gt;一、为什么会中止运行&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;&#x9;panic(&amp;#34;EDDYCJY.&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go&#xA;panic: EDDYCJY.&#xA;&#xA;goroutine 1 [running]:&#xA;main.main()&#xA;&#x9;/Users/eddycjy/go/src/github.com/EDDYCJY/awesomeProject/main.go:4 +0x39&#xA;exit status 2&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;请思考一下，为什么执行 &lt;code&gt;panic&lt;/code&gt; 后会导致应用程序运行中止？（而不是单单说执行了 &lt;code&gt;panic&lt;/code&gt; 所以就结束了这么含糊）&lt;/p&gt;&#xA;&lt;h3 id=&#34;二为什么不会中止运行&#34;&gt;二、为什么不会中止运行&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;&#x9;defer func() {&#xA;&#x9;&#x9;if err := recover(); err != nil {&#xA;&#x9;&#x9;&#x9;log.Printf(&amp;#34;recover: %v&amp;#34;, err)&#xA;&#x9;&#x9;}&#xA;&#x9;}()&#xA;&#xA;&#x9;panic(&amp;#34;EDDYCJY.&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go &#xA;2019/05/11 23:39:47 recover: EDDYCJY.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;请思考一下，为什么加上 &lt;code&gt;defer&lt;/code&gt; + &lt;code&gt;recover&lt;/code&gt; 组合就可以保护应用程序？&lt;/p&gt;&#xA;&lt;h3 id=&#34;三不设置-defer-行不&#34;&gt;三、不设置 defer 行不&lt;/h3&gt;&#xA;&lt;p&gt;上面问题二是 &lt;code&gt;defer&lt;/code&gt; + &lt;code&gt;recover&lt;/code&gt; 组合，那我去掉 &lt;code&gt;defer&lt;/code&gt; 是不是也可以呢？如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>我要在栈上。不，你应该在堆上</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-05-20-stack-heap/</link>
      <pubDate>Mon, 20 May 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-05-20-stack-heap/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wK39K.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们在写代码的时候，有时候会想这个变量到底分配到哪里了？这时候可能会有人说，在栈上，在堆上。信我准没错&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;但从结果上来讲你还是一知半解，这可不行，万一被人懵了呢。今天我们一起来深挖下 Go 在这块的奥妙，自己动手丰衣足食&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ID&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;int64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Avatar&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetUserInfo&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;User&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;ID&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;13746731&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Avatar&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://avatars0.githubusercontent.com/u/13746731&amp;#34;&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;GetUserInfo&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;开局就是一把问号，带着问题进行学习。请问 main 调用 &lt;code&gt;GetUserInfo&lt;/code&gt; 后返回的 &lt;code&gt;&amp;amp;User{...}&lt;/code&gt;。这个变量是分配到栈上了呢，还是分配到堆上了？&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是堆栈&#34;&gt;什么是堆/栈&lt;/h2&gt;&#xA;&lt;p&gt;在这里并不打算详细介绍堆栈，仅简单介绍本文所需的基础知识。如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;堆（Heap）：一般来讲是人为手动进行管理，手动申请、分配、释放。一般所涉及的内存大小并不定，一般会存放较大的对象。另外其分配相对慢，涉及到的指令动作也相对多&lt;/li&gt;&#xA;&lt;li&gt;栈（Stack）：由编译器进行管理，自动申请、分配、释放。一般不会太大，我们常见的函数参数（不同平台允许存放的数量不同），局部变量等等都会存放在栈上&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;今天我们介绍的 Go 语言，它的堆栈分配是通过 Compiler 进行分析，GC 去管理的，而对其的分析选择动作就是今天探讨的重点&lt;/p&gt;&#xA;&lt;h2 id=&#34;什么是逃逸分析&#34;&gt;什么是逃逸分析&lt;/h2&gt;&#xA;&lt;p&gt;在编译程序优化理论中，逃逸分析是一种确定指针动态范围的方法，简单来说就是分析在程序的哪些地方可以访问到该指针&lt;/p&gt;&#xA;&lt;p&gt;通俗地讲，逃逸分析就是确定一个变量要放堆上还是栈上，规则如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;是否有在其他地方（非局部）被引用。只要&lt;strong&gt;有可能&lt;/strong&gt;被引用了，那么它&lt;strong&gt;一定&lt;/strong&gt;分配到堆上。否则分配到栈上&lt;/li&gt;&#xA;&lt;li&gt;即使没有被外部引用，但对象过大，无法存放在栈区上。依然有可能分配到堆上&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;对此你可以理解为，逃逸分析是编译器用于决定变量分配到堆上还是栈上的一种行为&lt;/p&gt;&#xA;&lt;h2 id=&#34;在什么阶段确立逃逸&#34;&gt;在什么阶段确立逃逸&lt;/h2&gt;&#xA;&lt;p&gt;在编译阶段确立逃逸，注意并不是在运行时&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么需要逃逸&#34;&gt;为什么需要逃逸&lt;/h2&gt;&#xA;&lt;p&gt;这个问题我们可以反过来想，如果变量都分配到堆上了会出现什么事情？例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;垃圾回收（GC）的压力不断增大&lt;/li&gt;&#xA;&lt;li&gt;申请、分配、回收内存的系统开销增大（相对于栈）&lt;/li&gt;&#xA;&lt;li&gt;动态分配产生一定量的内存碎片&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;其实总的来说，就是频繁申请、分配堆内存是有一定 “代价” 的。会影响应用程序运行的效率，间接影响到整体系统。因此 “按需分配” 最大限度的灵活利用资源，才是正确的治理之道。这就是为什么需要逃逸分析的原因，你觉得呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;怎么确定是否逃逸&#34;&gt;怎么确定是否逃逸&lt;/h2&gt;&#xA;&lt;p&gt;第一，通过编译器命令，就可以看到详细的逃逸分析过程。而指令集 &lt;code&gt;-gcflags&lt;/code&gt; 用于将标识参数传递给 Go 编译器，涉及如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;code&gt;-m&lt;/code&gt; 会打印出逃逸分析的优化策略，实际上最多总共可以用 4 个 &lt;code&gt;-m&lt;/code&gt;，但是信息量较大，一般用 1 个就可以了&lt;/p&gt;</description>
    </item>
    <item>
      <title>为什么遍历 Go map 是无序的</title>
      <link>https://note.lican.site/posts/posts/go/map/2019-04-07-why-map-no-order/</link>
      <pubDate>Sun, 07 Apr 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map/2019-04-07-why-map-no-order/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;http://wx2.sinaimg.cn/large/006fVPCvly1g1s1ah84k8j30k70dvaac.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有的小伙伴没留意过 Go map 输出顺序，以为它是稳定的有序的；有的小伙伴知道是无序的，但却不知道为什么？有的却理解错误？今天我们将通过本文，揭开 &lt;code&gt;for range map&lt;/code&gt; 的 “神秘” 面纱，看看它内部实现到底是怎么样的，输出顺序到底是怎么样？&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY2&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY3&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY4&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY5&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;k: %v, v: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;k&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;假设运行这段代码，输出结果是按顺序？还是无序输出呢？&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2019/04/03 23:27:29 k: 3, v: EDDYCJY4&#xA;2019/04/03 23:27:29 k: 4, v: EDDYCJY5&#xA;2019/04/03 23:27:29 k: 0, v: EDDYCJY1&#xA;2019/04/03 23:27:29 k: 1, v: EDDYCJY2&#xA;2019/04/03 23:27:29 k: 2, v: EDDYCJY3&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从输出结果上来讲，是非固定顺序输出的，也就是每次都不一样（标题也讲了）。但这是为什么呢？&lt;/p&gt;&#xA;&lt;p&gt;首先&lt;strong&gt;建议你先自己想想原因&lt;/strong&gt;。其次我在面试时听过一些说法。有人说因为是哈希的所以就是无（乱）序等等说法。当时我是有点 ？？？&lt;/p&gt;&#xA;&lt;p&gt;这也是这篇文章出现的原因，希望大家可以一起研讨一下，理清这个问题 ：）&lt;/p&gt;</description>
    </item>
    <item>
      <title>简单围观一下有趣的 //go: 指令</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-03-31-go-ins/</link>
      <pubDate>Sun, 31 Mar 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-03-31-go-ins/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;http://wx2.sinaimg.cn/large/006fVPCvly1g1m1bplu3mj30xc0m8myg.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;如果你平时有翻看源码的习惯，你肯定会发现。咦，怎么有的方法上面总是写着 &lt;code&gt;//go:&lt;/code&gt;  这类指令呢。他们到底是干嘛用的？&lt;/p&gt;&#xA;&lt;p&gt;今天我们一同揭开他们的面纱，我将简单给你介绍一下，它们都负责些什么&lt;/p&gt;&#xA;&lt;h2 id=&#34;golinkname&#34;&gt;go:linkname&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;//go:linkname localname importpath.name&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;该指令指示编译器使用 &lt;code&gt;importpath.name&lt;/code&gt; 作为源代码中声明为 &lt;code&gt;localname&lt;/code&gt; 的变量或函数的目标文件符号名称。但是由于这个伪指令，可以破坏类型系统和包模块化。因此只有引用了 unsafe 包才可以使用&lt;/p&gt;&#xA;&lt;p&gt;简单来讲，就是 &lt;code&gt;importpath.name&lt;/code&gt; 是 &lt;code&gt;localname&lt;/code&gt; 的符号别名，编译器实际上会调用 &lt;code&gt;localname&lt;/code&gt; 。但前提是使用了 &lt;code&gt;unsafe&lt;/code&gt; 包才能使用&lt;/p&gt;&#xA;&lt;h3 id=&#34;案例&#34;&gt;案例&lt;/h3&gt;&#xA;&lt;h4 id=&#34;timetimego&#34;&gt;time/time.go&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;...&#xA;func now() (sec int64, nsec int32, mono int64)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;runtimetimestubgo&#34;&gt;runtime/timestub.go&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;import _ &amp;#34;unsafe&amp;#34; // for go:linkname&#xA;&#xA;//go:linkname time_now time.now&#xA;func time_now() (sec int64, nsec int32, mono int64) {&#xA;&#x9;sec, nsec = walltime()&#xA;&#x9;return sec, nsec, nanotime() - startNano&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在这个案例中可以看到 &lt;code&gt;time.now&lt;/code&gt;，它并没有具体的实现。如果你初看可能会懵逼。这时候建议你全局搜索一下源码，你就会发现其实现在 &lt;code&gt;runtime.time_now&lt;/code&gt; 中&lt;/p&gt;&#xA;&lt;p&gt;配合先前的用法解释，可得知在 runtime 包中，我们声明了 &lt;code&gt;time_now&lt;/code&gt; 方法是 &lt;code&gt;time.now&lt;/code&gt; 的符号别名。并且在文件头引入了 &lt;code&gt;unsafe&lt;/code&gt; 达成前提条件&lt;/p&gt;</description>
    </item>
    <item>
      <title>深入理解 Go map：赋值和扩容迁移</title>
      <link>https://note.lican.site/posts/posts/go/map/2019-03-24-map-assign/</link>
      <pubDate>Sun, 24 Mar 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map/2019-03-24-map-assign/</guid>
      <description>&lt;h2 id=&#34;概要&#34;&gt;概要&lt;/h2&gt;&#xA;&lt;p&gt;在 &lt;a href=&#34;https://book.eddycjy.com/golang/map/map-access.html&#34;&gt;上一章节&lt;/a&gt; 中，数据结构小节里讲解了大量基础字段，可能你会疑惑需要 #&amp;amp;（！……#（！￥！ 来干嘛？接下来我们一起简单了解一下基础概念。再开始研讨今天文章的重点内容。我相信这样你能更好的读懂这篇文章&lt;/p&gt;&#xA;&lt;h3 id=&#34;哈希函数&#34;&gt;哈希函数&lt;/h3&gt;&#xA;&lt;p&gt;哈希函数，又称散列算法、散列函数。主要作用是通过特定算法将数据根据一定规则组合重新生成得到一个&lt;strong&gt;散列值&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;而在哈希表中，其生成的散列值常用于寻找其键映射到哪一个桶上。而一个好的哈希函数，应当尽量少的出现哈希冲突，以此保证操作哈希表的时间复杂度（但是哈希冲突在目前来讲，是无法避免的。我们需要 “解决” 它）&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://wx3.sinaimg.cn/large/006fVPCvly1g161h7r7hgj30is0dmjro.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;链地址法&#34;&gt;链地址法&lt;/h3&gt;&#xA;&lt;p&gt;在哈希操作中，相当核心的一个处理动作就是 “哈希冲突” 的解决。而在 Go map 中采用的就是 &amp;ldquo;链地址法 &amp;quot; 去解决哈希冲突，又称 &amp;ldquo;拉链法&amp;rdquo;。其主要做法是数组 + 链表的数据结构，其溢出节点的存储内存都是动态申请的，因此相对更灵活。而每一个元素都是一个链表。如下图：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;http://wx4.sinaimg.cn/large/006fVPCvly1g1dw2b8t0ej30e60cy747.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;桶溢出桶&#34;&gt;桶/溢出桶&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hmap&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;buckets&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;extra&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mapextra&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mapextra&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;overflow&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;[]&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;oldoverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;[]&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nextOverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在上章节中，我们介绍了 Go map 中的桶和溢出桶的概念，在其桶中只能存储 8 个键值对元素。当超过 8 个时，将会使用溢出桶进行存储或进行扩容&lt;/p&gt;&#xA;&lt;p&gt;你可能会有疑问，hint 大于 8 又会怎么样？答案很明显，性能问题，其时间复杂度改变（也就是执行效率出现问题）&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;概要复习的差不多后，接下来我们将一同研讨 Go map 的另外三个核心行为：赋值、扩容、迁移。正式开始我们的研讨之旅吧 ：）&lt;/p&gt;&#xA;&lt;h2 id=&#34;赋值&#34;&gt;赋值&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; make(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;m&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;函数原型&#34;&gt;函数原型&lt;/h3&gt;&#xA;&lt;p&gt;在 map 的赋值动作中，依旧是针对 32/64 位、string、pointer 类型有不同的转换处理，总的函数原型如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>深入理解 Go map：初始化和访问元素</title>
      <link>https://note.lican.site/posts/posts/go/map/2019-03-05-map-access/</link>
      <pubDate>Tue, 05 Mar 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/map/2019-03-05-map-access/</guid>
      <description>&lt;p&gt;从本文开始咱们一起探索 Go map 里面的奥妙吧，看看它的内在是怎么构成的，又分别有什么值得留意的地方？&lt;/p&gt;&#xA;&lt;p&gt;第一篇将探讨&lt;strong&gt;初始化和访问元素&lt;/strong&gt;相关板块，咱们带着疑问去学习，例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;初始化的时候会马上分配内存吗？&lt;/li&gt;&#xA;&lt;li&gt;底层数据是如何存储的？&lt;/li&gt;&#xA;&lt;li&gt;底层是如何使用 key 去寻找数据的？&lt;/li&gt;&#xA;&lt;li&gt;底层是用什么方式解决哈希冲突的？&lt;/li&gt;&#xA;&lt;li&gt;数据类型那么多，底层又是怎么处理的呢？&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;数据结构&#34;&gt;数据结构&lt;/h2&gt;&#xA;&lt;p&gt;首先我们一起看看 Go map 的基础数据结构，先有一个大致的印象&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3dLgjH.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;hmap&#34;&gt;hmap&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hmap&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;flags&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;         &lt;span style=&#34;color:#66d9ef&#34;&gt;uint8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;noverflow&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uint16&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;hash0&lt;/span&gt;     &lt;span style=&#34;color:#66d9ef&#34;&gt;uint32&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;buckets&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;oldbuckets&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pointer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nevacuate&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;extra&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mapextra&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mapextra&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;overflow&lt;/span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;[]&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;oldoverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;[]&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nextOverflow&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;bmap&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;count：map 的大小，也就是 len() 的值。代指 map 中的键值对个数&lt;/li&gt;&#xA;&lt;li&gt;flags：状态标识，主要是 goroutine 写入和扩容机制的相关状态控制。并发读写的判断条件之一就是该值&lt;/li&gt;&#xA;&lt;li&gt;B：桶，最大可容纳的元素数量，值为 &lt;strong&gt;负载因子（默认 6.5） * 2 ^ B&lt;/strong&gt;，是 2 的指数&lt;/li&gt;&#xA;&lt;li&gt;noverflow：溢出桶的数量&lt;/li&gt;&#xA;&lt;li&gt;hash0：哈希因子&lt;/li&gt;&#xA;&lt;li&gt;buckets：保存当前桶数据的指针地址（指向一段连续的内存地址，主要存储键值对数据）&lt;/li&gt;&#xA;&lt;li&gt;oldbuckets，保存旧桶的指针地址&lt;/li&gt;&#xA;&lt;li&gt;nevacuate：迁移进度&lt;/li&gt;&#xA;&lt;li&gt;extra：原有 buckets 满载后，会发生扩容动作，在 Go 的机制中使用了增量扩容，如下为细项：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;overflow&lt;/code&gt; 为 &lt;code&gt;hmap.buckets&lt;/code&gt; （当前）溢出桶的指针地址&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;oldoverflow&lt;/code&gt; 为 &lt;code&gt;hmap.oldbuckets&lt;/code&gt; （旧）溢出桶的指针地址&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;nextOverflow&lt;/code&gt; 为空闲溢出桶的指针地址&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在这里我们要注意几点，如下：&lt;/p&gt;</description>
    </item>
    <item>
      <title>for-loop 与 json.Unmarshal 性能分析概要</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-02-17-for-loop-json-unmarshal/</link>
      <pubDate>Sun, 17 Feb 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-02-17-for-loop-json-unmarshal/</guid>
      <description>&lt;p&gt;在项目中，常常会遇到循环交换赋值的数据处理场景，尤其是 RPC，数据交互格式要转为 Protobuf，赋值是无法避免的。一般会有如下几种做法：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;for&lt;/li&gt;&#xA;&lt;li&gt;for range&lt;/li&gt;&#xA;&lt;li&gt;json.Marshal/Unmarshal&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这时候又面临 “选择困难症”，用哪个好？又想代码量少，又担心性能有没有影响啊&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;为了弄清楚这个疑惑，接下来将分别编写三种使用场景。来简单看看它们的性能情况，看看谁更 “好”&lt;/p&gt;&#xA;&lt;h2 id=&#34;功能代码&#34;&gt;功能代码&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;name&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Age&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;age&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Avatar&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;avatar&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;type&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;name&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Age&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;age&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Avatar&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;avatar&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;type&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MAX&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;10000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;InitPerson&lt;/span&gt;() []&lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;persons&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;MAX&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;persons&lt;/span&gt; = append(&lt;span style=&#34;color:#a6e22e&#34;&gt;persons&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Name&lt;/span&gt;:   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Age&lt;/span&gt;:    &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Avatar&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.com/EDDYCJY&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Type&lt;/span&gt;:   &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Person&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;persons&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ForStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ForRangeStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JsonToStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;againPerson&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt;) ([]&lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unmarshal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;againPerson&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;againPerson&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;JsonIteratorToStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;againPerson&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt;) ([]&lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jsonIter&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;jsoniter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ConfigCompatibleWithStandardLibrary&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jsonIter&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unmarshal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;againPerson&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;againPerson&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;测试代码&#34;&gt;测试代码&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BenchmarkForStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;testing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;InitPerson&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; len(&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ResetTimer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;N&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ForStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;count&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BenchmarkForRangeStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;testing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;InitPerson&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ResetTimer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;N&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ForRangeStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BenchmarkJsonToStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;testing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;InitPerson&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;againPersons&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Marshal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatalf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;json.Marshal err: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ResetTimer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;N&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;JsonToStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;againPersons&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;BenchmarkJsonIteratorToStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;testing&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;B&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;InitPerson&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;againPersons&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;AgainPerson&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;json&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Marshal&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;person&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatalf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;json.Marshal err: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ResetTimer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;N&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;JsonIteratorToStruct&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;againPersons&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;测试结果&#34;&gt;测试结果&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BenchmarkForStruct-4              &#x9;  500000&#x9;      3289 ns/op&#x9;       0 B/op&#x9;       0 allocs/op&#xA;BenchmarkForRangeStruct-4         &#x9;  200000&#x9;      9178 ns/op&#x9;       0 B/op&#x9;       0 allocs/op&#xA;BenchmarkJsonToStruct-4           &#x9;     100&#x9;  19173117 ns/op&#x9; 2618509 B/op&#x9;   40036 allocs/op&#xA;BenchmarkJsonIteratorToStruct-4   &#x9;     300&#x9;   4116491 ns/op&#x9; 3694017 B/op&#x9;   30047 allocs/op&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从测试结果来看，性能排名为：for &amp;lt; for range &amp;lt; json-iterator &amp;lt; encoding/json。接下来我们看看是什么原因导致了这样子的排名？&lt;/p&gt;</description>
    </item>
    <item>
      <title>来，控制一下 goroutine 的并发数量</title>
      <link>https://note.lican.site/posts/posts/go/talk/2019-01-20-control-goroutine/</link>
      <pubDate>Sun, 20 Jan 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2019-01-20-control-goroutine/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wnOsJ.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;userCount&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;math&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MaxInt64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;userCount&lt;/span&gt;; &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;++&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;    &lt;span style=&#34;color:#75715e&#34;&gt;// 做一些各种各样的业务逻辑处理&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;go func: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sleep&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Second&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这里，假设 &lt;code&gt;userCount&lt;/code&gt; 是一个外部传入的参数（不可预测，有可能值非常大），有人会全部丢进去循环。想着全部都并发 goroutine 去同时做某一件事。觉得这样子会效率会更高，对不对！&lt;/p&gt;&#xA;&lt;p&gt;那么，你觉得这里有没有什么问题？&lt;/p&gt;&#xA;&lt;h2 id=&#34;噩梦般的开始&#34;&gt;噩梦般的开始&lt;/h2&gt;&#xA;&lt;p&gt;当然，在&lt;strong&gt;特定场景下&lt;/strong&gt;，问题可大了。因为在本文被丢进去同时并发的可是一个极端值。我们可以一起观察下图的指标分析，看看情况有多 “崩溃”。下图是上述代码的表现：&lt;/p&gt;&#xA;&lt;h3 id=&#34;输出结果&#34;&gt;输出结果&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;...&#xA;go func: 5839&#xA;go func: 5840&#xA;go func: 5841&#xA;go func: 5842&#xA;go func: 5915&#xA;go func: 5524&#xA;go func: 5916&#xA;go func: 8209&#xA;go func: 8264&#xA;signal: killed&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果你自己执行过代码，在 “输出结果” 上你会遇到如下问题：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;系统资源占用率不断上涨&lt;/li&gt;&#xA;&lt;li&gt;输出一定数量后：控制台就不再刷新输出最新的值了&lt;/li&gt;&#xA;&lt;li&gt;信号量：signal: killed&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;系统负载&#34;&gt;系统负载&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wnxd1.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;cpu&#34;&gt;CPU&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wuKW8.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go Slice 最大容量大小是怎么来的</title>
      <link>https://note.lican.site/posts/posts/go/slice/2019-01-06-why-slice-max/</link>
      <pubDate>Sun, 06 Jan 2019 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/slice/2019-01-06-why-slice-max/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wnHRU.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在《深入理解 Go Slice》中，我们提到了 “根据其类型大小去获取能够申请的最大容量大小” 的处理逻辑。今天我们将更深入地去探究一下，底层到底做了什么东西，涉及什么知识点？&lt;/p&gt;&#xA;&lt;p&gt;Go Slice 对应代码如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;makeslice&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;et&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;_type&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cap&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxElements&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxSliceCap&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;et&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; uintptr(&lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;) &amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxElements&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cap&lt;/span&gt; &amp;lt; &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;||&lt;/span&gt; uintptr(&lt;span style=&#34;color:#a6e22e&#34;&gt;cap&lt;/span&gt;) &amp;gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxElements&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mallocgc&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;et&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;uintptr(&lt;span style=&#34;color:#a6e22e&#34;&gt;cap&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;et&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;slice&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;p&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;len&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;cap&lt;/span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;根据想要追寻的逻辑，定位到了 &lt;code&gt;maxSliceCap&lt;/code&gt; 方法，它会根据&lt;strong&gt;当前类型的大小获取到了所允许的最大容量大小&lt;/strong&gt;来进行阈值判断，也就是安全检查。这是浅层的了解，我们继续追下去看看还做了些什么？&lt;/p&gt;&#xA;&lt;h2 id=&#34;maxslicecap&#34;&gt;maxSliceCap&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxSliceCap&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;elemsize&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elemsize&lt;/span&gt; &amp;lt; uintptr(len(&lt;span style=&#34;color:#a6e22e&#34;&gt;maxElems&lt;/span&gt;)) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxElems&lt;/span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;elemsize&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;elemsize&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;maxelems&#34;&gt;maxElems&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maxElems&lt;/span&gt; = [&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;uintptr&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;^uintptr(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;7&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;8&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;11&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;12&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;13&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;14&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;15&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;16&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;17&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;18&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;19&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;21&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;22&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;23&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;24&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;25&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;26&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;27&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;28&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;29&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;31&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;maxAlloc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;32&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;maxElems&lt;/code&gt; 是包含一些预定义的切片最大容量值的查找表，索引是切片元素的类型大小。而值看起来 “奇奇怪怪” 不大眼熟，都是些什么呢。主要是以下三个核心点：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;^uintptr(0)&lt;/li&gt;&#xA;&lt;li&gt;maxAlloc&lt;/li&gt;&#xA;&lt;li&gt;maxAlloc / typeSize&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;uintptr0&#34;&gt;^uintptr(0)&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;uintptr: %v\n&amp;#34;&lt;/span&gt;, uintptr(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;^uintptr: %v\n&amp;#34;&lt;/span&gt;, ^uintptr(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>在 Go 中恰到好处的内存对齐</title>
      <link>https://note.lican.site/posts/posts/go/talk/2018-12-26-go-memory-align/</link>
      <pubDate>Wed, 26 Dec 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2018-12-26-go-memory-align/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3wuT0A.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Part1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在开始之前，希望你计算一下 &lt;code&gt;Part1&lt;/code&gt; 共占用的大小是多少呢？&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;bool size: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(bool(&lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;int32 size: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(int32(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;int8 size: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(int8(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;int64 size: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(int64(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;byte size: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(byte(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;string size: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;EDDYCJY&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;bool size: 1&#xA;int32 size: 4&#xA;int8 size: 1&#xA;int64 size: 8&#xA;byte size: 1&#xA;string size: 16&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这么一算，&lt;code&gt;Part1&lt;/code&gt; 这一个结构体的占用内存大小为 1+4+1+8+1 = 15 个字节。相信有的小伙伴是这么算的，看上去也没什么毛病&lt;/p&gt;&#xA;&lt;p&gt;真实情况是怎么样的呢？我们实际调用看看，如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Part1&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;b&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int32&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;byte&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;part1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Part1&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;part1 size: %d, align: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sizeof&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;part1&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Alignof&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;part1&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;</description>
    </item>
    <item>
      <title>有点不安全却又一亮的 Go unsafe.Pointer</title>
      <link>https://note.lican.site/posts/posts/go/pkg/2018-12-15-unsafe/</link>
      <pubDate>Sat, 15 Dec 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/pkg/2018-12-15-unsafe/</guid>
      <description>&lt;p&gt;在上一篇文章《深入理解 Go Slice》中，大家会发现其底层数据结构使用了 &lt;code&gt;unsafe.Pointer&lt;/code&gt;。因此想着再介绍一下其关联知识&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在大家学习 Go 的时候，肯定都学过 “Go 的指针是不支持指针运算和转换” 这个知识点。为什么呢？&lt;/p&gt;&#xA;&lt;p&gt;首先，Go 是一门静态语言，所有的变量都必须为标量类型。不同的类型不能够进行赋值、计算等跨类型的操作。那么指针也对应着相对的类型，也在 Compile 的静态类型检查的范围内。同时静态语言，也称为强类型。也就是一旦定义了，就不能再改变它&lt;/p&gt;&#xA;&lt;h2 id=&#34;错误示例&#34;&gt;错误示例&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main(){&#xA;&#x9;num := 5&#xA;&#x9;numPointer := &amp;amp;num&#xA;&#xA;&#x9;flnum := (*float32)(numPointer)&#xA;&#x9;fmt.Println(flnum)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;输出结果：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# command-line-arguments&#xA;...: cannot convert numPointer (type *int) to type *float32&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在示例中，我们创建了一个 &lt;code&gt;num&lt;/code&gt; 变量，值为 5，类型为 &lt;code&gt;int&lt;/code&gt;。取了其对于的指针地址后，试图强制转换为 &lt;code&gt;*float32&lt;/code&gt;，结果失败&amp;hellip;&lt;/p&gt;&#xA;&lt;h2 id=&#34;unsafe&#34;&gt;unsafe&lt;/h2&gt;&#xA;&lt;p&gt;针对刚刚的 “错误示例”，我们可以采用今天的男主角 &lt;code&gt;unsafe&lt;/code&gt; 标准库来解决。它是一个神奇的包，在官方的诠释中，有如下概述：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;围绕 Go 程序内存安全及类型的操作&lt;/li&gt;&#xA;&lt;li&gt;很可能会是不可移植的&lt;/li&gt;&#xA;&lt;li&gt;不受 Go 1 兼容性指南的保护&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;简单来讲就是，不怎么推荐你使用。因为它是 unsafe（不安全的），但是在特殊的场景下，使用了它。可以打破 Go 的类型和内存安全机制，让你获得眼前一亮的惊喜效果 😄&lt;/p&gt;&#xA;&lt;h3 id=&#34;pointer&#34;&gt;Pointer&lt;/h3&gt;&#xA;&lt;p&gt;为了解决这个问题，需要用到 &lt;code&gt;unsafe.Pointer&lt;/code&gt;。它表示任意类型且可寻址的指针值，可以在不同的指针类型之间进行转换（类似 C 语言的 void * 的用途）&lt;/p&gt;</description>
    </item>
    <item>
      <title>深入理解 Go Slice</title>
      <link>https://note.lican.site/posts/posts/go/slice/2018-12-11-slice/</link>
      <pubDate>Tue, 11 Dec 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/slice/2018-12-11-slice/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3dXSeA.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;是什么&#34;&gt;是什么&lt;/h2&gt;&#xA;&lt;p&gt;在 Go 中，Slice（切片）是抽象在 Array（数组）之上的特殊类型。为了更好地了解 Slice，第一步需要先对 Array 进行理解。深刻了解 Slice 与 Array 之间的区别后，就能更好的对其底层一番摸索 😄&lt;/p&gt;&#xA;&lt;h2 id=&#34;用法&#34;&gt;用法&lt;/h2&gt;&#xA;&lt;h3 id=&#34;array&#34;&gt;Array&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt; = &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nums: %v\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;n: %d\n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;n&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们可得知在 Go 中，数组类型需要指定长度和元素类型。在上述代码中，可得知 &lt;code&gt;[3]int{}&lt;/code&gt; 表示 3 个整数的数组，并进行了初始化。底层数据存储为一段连续的内存空间，通过固定的索引值（下标）进行检索&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://s2.ax1x.com/2020/02/27/3dXASS.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;数组在声明后，其元素的初始值（也就是零值）为 0。并且该变量可以直接使用，不需要特殊操作&lt;/p&gt;&#xA;&lt;p&gt;同时数组的长度是固定的，它的长度是类型的一部分，因此 &lt;code&gt;[3]int&lt;/code&gt; 和 &lt;code&gt;[4]int&lt;/code&gt; 在类型上是不同的，不能称为 “一个东西”&lt;/p&gt;&#xA;&lt;h4 id=&#34;输出结果&#34;&gt;输出结果&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;nums: [1 0 0]&#xA;n: 2&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;slice&#34;&gt;Slice&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; [&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;] = &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;dnums&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nums&lt;/span&gt;[:]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dnums: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;dnums&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Slice 是对 Array 的抽象，类型为 &lt;code&gt;[]T&lt;/code&gt;。在上述代码中，&lt;code&gt;dnums&lt;/code&gt; 变量通过 &lt;code&gt;nums[:]&lt;/code&gt; 进行赋值。需要注意的是，Slice 和 Array 不一样，它不需要指定长度。也更加的灵活，能够自动扩容&lt;/p&gt;</description>
    </item>
    <item>
      <title>fmt 标准库 --- Print* 是怎么样输出的？</title>
      <link>https://note.lican.site/posts/posts/go/pkg/2018-12-04-fmt/</link>
      <pubDate>Tue, 04 Dec 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/pkg/2018-12-04-fmt/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;fmt&amp;#34;&#xA;)&#xA;&#xA;func main() {&#xA;&#x9;fmt.Println(&amp;#34;Hello World!&amp;#34;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;标准开场见多了，那内部标准库又是怎么输出这段英文的呢？今天一起来围观下源码吧 🤭&lt;/p&gt;&#xA;&lt;h2 id=&#34;原型&#34;&gt;原型&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func Print(a ...interface{}) (n int, err error) {&#xA;&#x9;return Fprint(os.Stdout, a...)&#xA;}&#xA;&#xA;func Println(a ...interface{}) (n int, err error) {&#xA;&#x9;return Fprintln(os.Stdout, a...)&#xA;}&#xA;&#xA;func Printf(format string, a ...interface{}) (n int, err error) {&#xA;&#x9;return Fprintf(os.Stdout, format, a...)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;Print：使用默认格式说明符打印格式并写入标准输出。当两者都不是字符串时，在操作数之间添加空格&lt;/li&gt;&#xA;&lt;li&gt;Println：同上，不同的地方是始终在操作数之间添加空格，并附加换行符&lt;/li&gt;&#xA;&lt;li&gt;Printf：根据格式说明符进行格式化并写入标准输出&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;以上三类就是最常见的格式化 I/O 的方法，我们将基于此去进行拆解描述&lt;/p&gt;&#xA;&lt;h2 id=&#34;执行流程&#34;&gt;执行流程&lt;/h2&gt;&#xA;&lt;h3 id=&#34;案例一print&#34;&gt;案例一：Print&lt;/h3&gt;&#xA;&lt;p&gt;在这里我们使用 &lt;code&gt;Print&lt;/code&gt; 方法做一个分析，便于后面的加深理解 😄&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func Print(a ...interface{}) (n int, err error) {&#xA;&#x9;return Fprint(os.Stdout, a...)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;Print&lt;/code&gt; 使用默认格式说明符打印格式并写入标准输出。另外当两者都为非空字符串时将插入一个空格&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用 Gomock 进行单元测试</title>
      <link>https://note.lican.site/posts/posts/go/talk/2018-11-25-gomock/</link>
      <pubDate>Sun, 25 Nov 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2018-11-25-gomock/</guid>
      <description>&lt;p&gt;在实际项目中，需要进行单元测试的时候。却往往发现有一大堆依赖项。这时候就是 &lt;a href=&#34;https://github.com/golang/mock&#34;&gt;Gomock&lt;/a&gt; 大显身手的时候了&lt;/p&gt;&#xA;&lt;p&gt;Gomock 是 Go 语言的一个 mock 框架，官方的那种 🤪&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get -u github.com/golang/mock/gomock&#xA;$ go install github.com/golang/mock/mockgen&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;第一步：我们将安装 gomock 第三方库和 mock 代码的生成工具 mockgen。而后者可以大大的节省我们的工作量。只需要了解其使用方式就可以&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;第二步：输入 &lt;code&gt;mockgen&lt;/code&gt; 验证代码生成工具是否安装正确。若无法正常响应，请检查 &lt;code&gt;bin&lt;/code&gt; 目录下是否包含该二进制文件&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;用法&#34;&gt;用法&lt;/h3&gt;&#xA;&lt;p&gt;在 &lt;code&gt;mockgen&lt;/code&gt; 命令中，支持两种生成模式：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;source：从源文件生成 mock 接口（通过 -source 启用）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mockgen -source=foo.go [other options]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;reflect：通过使用反射程序来生成 mock 接口。它通过传递两个非标志参数来启用：导入路径和逗号分隔的接口列表&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mockgen database/sql/driver Conn,Driver&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;从本质上来讲，两种方式生成的 mock 代码并没有什么区别。因此选择合适的就可以了&lt;/p&gt;&#xA;&lt;h2 id=&#34;写测试用例&#34;&gt;写测试用例&lt;/h2&gt;&#xA;&lt;p&gt;在本文将模拟一个简单 Demo 来编写测试用例，熟悉整体的测试流程&lt;/p&gt;&#xA;&lt;h3 id=&#34;步骤&#34;&gt;步骤&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;想清楚整体逻辑&lt;/li&gt;&#xA;&lt;li&gt;定义想要（模拟）依赖项的 interface（接口）&lt;/li&gt;&#xA;&lt;li&gt;使用 &lt;code&gt;mockgen&lt;/code&gt; 命令对所需 mock 的 interface 生成 mock 文件&lt;/li&gt;&#xA;&lt;li&gt;编写单元测试的逻辑，在测试中使用 mock&lt;/li&gt;&#xA;&lt;li&gt;进行单元测试的验证&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;├── mock&#xA;├── person&#xA;│   └── male.go&#xA;└── user&#xA;    ├── user.go&#xA;    └── user_test.go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;编写&#34;&gt;编写&lt;/h3&gt;&#xA;&lt;h4 id=&#34;interface-方法&#34;&gt;interface 方法&lt;/h4&gt;&#xA;&lt;p&gt;打开 person/male.go 文件，写入以下内容：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十」分布式链路追踪 gRPC &#43; Opentracing &#43; Zipkin</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-20-zipkin/</link>
      <pubDate>Sat, 20 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-20-zipkin/</guid>
      <description>&lt;p&gt;在实际应用中，你做了那么多 Server 端，写了 N 个 RPC 方法。想看看方法的指标，却无处下手？&lt;/p&gt;&#xA;&lt;p&gt;本文将通过 gRPC + Opentracing + Zipkin 搭建一个&lt;strong&gt;分布式链路追踪系统&lt;/strong&gt;来实现查看整个系统的链路、性能等指标。&lt;/p&gt;&#xA;&lt;h2 id=&#34;opentracing&#34;&gt;Opentracing&lt;/h2&gt;&#xA;&lt;h3 id=&#34;是什么&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;p&gt;OpenTracing 通过提供平台无关、厂商无关的API，使得开发人员能够方便的添加（或更换）追踪系统的实现&lt;/p&gt;&#xA;&lt;p&gt;不过 OpenTracing 并不是标准。因为 CNCF 不是官方标准机构，但是它的目标是致力为分布式追踪创建更标准的 API 和工具&lt;/p&gt;&#xA;&lt;h3 id=&#34;名词解释&#34;&gt;名词解释&lt;/h3&gt;&#xA;&lt;h4 id=&#34;trace&#34;&gt;Trace&lt;/h4&gt;&#xA;&lt;p&gt;一个 trace 代表了一个事务或者流程在（分布式）系统中的执行过程&lt;/p&gt;&#xA;&lt;h4 id=&#34;span&#34;&gt;Span&lt;/h4&gt;&#xA;&lt;p&gt;一个 span 代表在分布式系统中完成的单个工作单元。也包含其他 span 的 “引用”，这允许将多个 spans 组合成一个完整的 Trace&lt;/p&gt;&#xA;&lt;p&gt;每个 span 根据 OpenTracing 规范封装以下内容：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;操作名称&lt;/li&gt;&#xA;&lt;li&gt;开始时间和结束时间&lt;/li&gt;&#xA;&lt;li&gt;key:value span Tags&lt;/li&gt;&#xA;&lt;li&gt;key:value span Logs&lt;/li&gt;&#xA;&lt;li&gt;SpanContext&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;tags&#34;&gt;Tags&lt;/h4&gt;&#xA;&lt;p&gt;Span tags（跨度标签）可以理解为用户自定义的 Span 注释。便于查询、过滤和理解跟踪数据&lt;/p&gt;&#xA;&lt;h4 id=&#34;logs&#34;&gt;Logs&lt;/h4&gt;&#xA;&lt;p&gt;Span logs（跨度日志）可以记录 Span 内特定时间或事件的日志信息。主要用于捕获特定 Span 的日志信息以及应用程序本身的其他调试或信息输出&lt;/p&gt;&#xA;&lt;h4 id=&#34;spancontext&#34;&gt;SpanContext&lt;/h4&gt;&#xA;&lt;p&gt;SpanContext 代表跨越进程边界，传递到子级 Span 的状态。常在追踪示意图中创建上下文时使用&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载九」gRPC Deadlines</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-16-deadlines/</link>
      <pubDate>Tue, 16 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-16-deadlines/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在前面的章节中，已经介绍了 gRPC 的基本用法。那你想想，让它这么裸跑真的没问题吗？&lt;/p&gt;&#xA;&lt;p&gt;那么，肯定是有问题了。今天将介绍 gRPC Deadlines 的用法，这一个必备技巧。内容也比较简单&lt;/p&gt;&#xA;&lt;h2 id=&#34;deadlines&#34;&gt;Deadlines&lt;/h2&gt;&#xA;&lt;p&gt;Deadlines 意指截止时间，在 gRPC 中强调 TL;DR（Too long, Don&amp;rsquo;t read）并建议&lt;strong&gt;始终设定截止日期&lt;/strong&gt;，为什么呢？&lt;/p&gt;&#xA;&lt;h3 id=&#34;为什么要设置&#34;&gt;为什么要设置&lt;/h3&gt;&#xA;&lt;p&gt;当未设置 Deadlines 时，将采用默认的 DEADLINE_EXCEEDED（这个时间非常大）&lt;/p&gt;&#xA;&lt;p&gt;如果产生了阻塞等待，就会造成大量正在进行的请求都会被保留，并且所有请求都有可能达到最大超时&lt;/p&gt;&#xA;&lt;p&gt;这会使服务面临资源耗尽的风险，例如内存，这会增加服务的延迟，或者在最坏的情况下可能导致整个进程崩溃&lt;/p&gt;&#xA;&lt;h2 id=&#34;grpc&#34;&gt;gRPC&lt;/h2&gt;&#xA;&lt;h3 id=&#34;client&#34;&gt;Client&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func main() {&#xA;    ...&#xA;&#x9;ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Duration(5 * time.Second)))&#xA;&#x9;defer cancel()&#xA;&#xA;&#x9;client := pb.NewSearchServiceClient(conn)&#xA;&#x9;resp, err := client.Search(ctx, &amp;amp;pb.SearchRequest{&#xA;&#x9;&#x9;Request: &amp;#34;gRPC&amp;#34;,&#xA;&#x9;})&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;statusErr, ok := status.FromError(err)&#xA;&#x9;&#x9;if ok {&#xA;&#x9;&#x9;&#x9;if statusErr.Code() == codes.DeadlineExceeded {&#xA;&#x9;&#x9;&#x9;&#x9;log.Fatalln(&amp;#34;client.Search err: deadline&amp;#34;)&#xA;&#x9;&#x9;&#x9;}&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;log.Fatalf(&amp;#34;client.Search err: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;log.Printf(&amp;#34;resp: %s&amp;#34;, resp.GetResponse())&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;context.WithDeadline：会返回最终上下文截止时间。第一个形参为父上下文，第二个形参为调整的截止时间。若父级时间早于子级时间，则以父级时间为准，否则以子级时间为最终截止时间&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func WithDeadline(parent Context, d time.Time) (Context, CancelFunc) {&#xA;&#x9;if cur, ok := parent.Deadline(); ok &amp;amp;&amp;amp; cur.Before(d) {&#xA;&#x9;&#x9;// The current deadline is already sooner than the new one.&#xA;&#x9;&#x9;return WithCancel(parent)&#xA;&#x9;}&#xA;&#x9;c := &amp;amp;timerCtx{&#xA;&#x9;&#x9;cancelCtx: newCancelCtx(parent),&#xA;&#x9;&#x9;deadline:  d,&#xA;&#x9;}&#xA;&#x9;propagateCancel(parent, c)&#xA;&#x9;dur := time.Until(d)&#xA;&#x9;if dur &amp;lt;= 0 {&#xA;&#x9;&#x9;c.cancel(true, DeadlineExceeded) // deadline has already passed&#xA;&#x9;&#x9;return c, func() { c.cancel(true, Canceled) }&#xA;&#x9;}&#xA;&#x9;c.mu.Lock()&#xA;&#x9;defer c.mu.Unlock()&#xA;&#x9;if c.err == nil {&#xA;&#x9;&#x9;c.timer = time.AfterFunc(dur, func() {&#xA;&#x9;&#x9;&#x9;c.cancel(true, DeadlineExceeded)&#xA;&#x9;&#x9;})&#xA;&#x9;}&#xA;&#x9;return c, func() { c.cancel(true, Canceled) }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;context.WithTimeout：很常见的另外一个方法，是便捷操作。实际上是对于 WithDeadline 的封装&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) {&#xA;&#x9;return WithDeadline(parent, time.Now().Add(timeout))&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;status.FromError：返回 GRPCStatus 的具体错误码，若为非法，则直接返回 &lt;code&gt;codes.Unknown&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;server&#34;&gt;Server&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type SearchService struct{}&#xA;&#xA;func (s *SearchService) Search(ctx context.Context, r *pb.SearchRequest) (*pb.SearchResponse, error) {&#xA;&#x9;for i := 0; i &amp;lt; 5; i++  {&#xA;&#x9;&#x9;if ctx.Err() == context.Canceled {&#xA;&#x9;&#x9;&#x9;return nil, status.Errorf(codes.Canceled, &amp;#34;SearchService.Search canceled&amp;#34;)&#xA;&#x9;&#x9;}&#xA;&#xA;&#x9;&#x9;time.Sleep(1 * time.Second)&#xA;&#x9;}&#xA;&#xA;&#x9;return &amp;amp;pb.SearchResponse{Response: r.GetRequest() + &amp;#34; Server&amp;#34;}, nil&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而在 Server 端，由于 Client 已经设置了截止时间。Server 势必要去检测它&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载八」对 RPC 方法做自定义认证</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-14-per-rpc-credentials/</link>
      <pubDate>Sun, 14 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-14-per-rpc-credentials/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在前面的章节中，我们介绍了两种（证书算一种）可全局认证的方法：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/EDDYCJY/blog/blob/master/grpc/grpc-tls.md&#34;&gt;TLS 证书认证&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/EDDYCJY/blog/blob/master/grpc/ca-tls.md&#34;&gt;基于 CA 的 TLS 证书认证&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/EDDYCJY/blog/blob/master/grpc/interceptor.md&#34;&gt;Unary and Stream interceptor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;而在实际需求中，常常会对某些模块的 RPC 方法做特殊认证或校验。今天将会讲解、实现这块的功能点&lt;/p&gt;&#xA;&lt;h2 id=&#34;课前知识&#34;&gt;课前知识&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type PerRPCCredentials interface {&#xA;    GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error)&#xA;    RequireTransportSecurity() bool&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在 gRPC 中默认定义了 PerRPCCredentials，它就是本章节的主角，是 gRPC 默认提供用于自定义认证的接口，它的作用是将所需的安全认证信息添加到每个 RPC 方法的上下文中。其包含 2 个方法：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GetRequestMetadata：获取当前请求认证所需的元数据（metadata）&lt;/li&gt;&#xA;&lt;li&gt;RequireTransportSecurity：是否需要基于 TLS 认证进行安全传输&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;目录结构&#34;&gt;目录结构&lt;/h2&gt;&#xA;&lt;p&gt;新建 simple_token_server/server.go 和 simple_token_client/client.go，目录结构如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go-grpc-example&#xA;├── client&#xA;│   ├── simple_client&#xA;│   ├── simple_http_client&#xA;│   ├── simple_token_client&#xA;│   └── stream_client&#xA;├── conf&#xA;├── pkg&#xA;├── proto&#xA;├── server&#xA;│   ├── simple_http_server&#xA;│   ├── simple_server&#xA;│   ├── simple_token_server&#xA;│   └── stream_server&#xA;└── vendor&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;grpc&#34;&gt;gRPC&lt;/h2&gt;&#xA;&lt;h3 id=&#34;client&#34;&gt;Client&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;package main&#xA;&#xA;import (&#xA;&#x9;&amp;#34;context&amp;#34;&#xA;&#x9;&amp;#34;log&amp;#34;&#xA;&#xA;&#x9;&amp;#34;google.golang.org/grpc&amp;#34;&#xA;&#xA;&#x9;&amp;#34;github.com/EDDYCJY/go-grpc-example/pkg/gtls&amp;#34;&#xA;&#x9;pb &amp;#34;github.com/EDDYCJY/go-grpc-example/proto&amp;#34;&#xA;)&#xA;&#xA;const PORT = &amp;#34;9004&amp;#34;&#xA;&#xA;type Auth struct {&#xA;&#x9;AppKey    string&#xA;&#x9;AppSecret string&#xA;}&#xA;&#xA;func (a *Auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {&#xA;&#x9;return map[string]string{&amp;#34;app_key&amp;#34;: a.AppKey, &amp;#34;app_secret&amp;#34;: a.AppSecret}, nil&#xA;}&#xA;&#xA;func (a *Auth) RequireTransportSecurity() bool {&#xA;&#x9;return true&#xA;}&#xA;&#xA;func main() {&#xA;&#x9;tlsClient := gtls.Client{&#xA;&#x9;&#x9;ServerName: &amp;#34;go-grpc-example&amp;#34;,&#xA;&#x9;&#x9;CertFile:   &amp;#34;../../conf/server/server.pem&amp;#34;,&#xA;&#x9;}&#xA;&#x9;c, err := tlsClient.GetTLSCredentials()&#xA;&#x9;if err != nil {&#xA;&#x9;&#x9;log.Fatalf(&amp;#34;tlsClient.GetTLSCredentials err: %v&amp;#34;, err)&#xA;&#x9;}&#xA;&#xA;&#x9;auth := Auth{&#xA;&#x9;&#x9;AppKey:    &amp;#34;eddycjy&amp;#34;,&#xA;&#x9;&#x9;AppSecret: &amp;#34;20181005&amp;#34;,&#xA;&#x9;}&#xA;&#x9;conn, err := grpc.Dial(&amp;#34;:&amp;#34;+PORT, grpc.WithTransportCredentials(c), grpc.WithPerRPCCredentials(&amp;amp;auth))&#xA;&#x9;...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在 Client 端，重点实现 &lt;code&gt;type PerRPCCredentials interface&lt;/code&gt; 所需的方法，关注两点即可：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载七」让你的服务同时提供 HTTP 接口</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-12-grpc-http/</link>
      <pubDate>Fri, 12 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-12-grpc-http/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;接口需要提供给其他业务组访问，但是 RPC 协议不同无法内调，对方问能否走 HTTP 接口，怎么办？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;微信（公众号、小程序）等第三方回调接口只支持 HTTP 接口，怎么办&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我相信你在实际工作中都会遇到如上问题，在 gRPC 中都是有解决方案的，本章节将会进行介绍 🤔&lt;/p&gt;&#xA;&lt;h2 id=&#34;为什么可以同时提供-http-接口&#34;&gt;为什么可以同时提供 HTTP 接口&lt;/h2&gt;&#xA;&lt;p&gt;关键一点，gRPC 的协议是基于 HTTP/2 的，因此应用程序能够在单个 TCP 端口上提供 HTTP/1.1 和 gRPC 接口服务（两种不同的流量）&lt;/p&gt;&#xA;&lt;h2 id=&#34;怎么同时提供-http-接口&#34;&gt;怎么同时提供 HTTP 接口&lt;/h2&gt;&#xA;&lt;h3 id=&#34;检测协议&#34;&gt;检测协议&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;if r.ProtoMajor == 2 &amp;amp;&amp;amp; strings.Contains(r.Header.Get(&amp;#34;Content-Type&amp;#34;), &amp;#34;application/grpc&amp;#34;) {&#xA;    server.ServeHTTP(w, r)&#xA;} else {&#xA;    mux.ServeHTTP(w, r)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;流程&#34;&gt;流程&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;检测请求协议是否为 HTTP/2&lt;/li&gt;&#xA;&lt;li&gt;判断 Content-Type 是否为 application/grpc（gRPC 的默认标识位）&lt;/li&gt;&#xA;&lt;li&gt;根据协议的不同转发到不同的服务处理&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;grpc&#34;&gt;gRPC&lt;/h2&gt;&#xA;&lt;h3 id=&#34;tls&#34;&gt;TLS&lt;/h3&gt;&#xA;&lt;p&gt;在前面的章节，为了便于展示因此没有简单封装&lt;/p&gt;&#xA;&lt;p&gt;在本节需复用代码，重新封装了，可详见：&lt;a href=&#34;https://github.com/EDDYCJY/go-grpc-example/tree/master/pkg/gtls&#34;&gt;go-grpc-example&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;目录结构&#34;&gt;目录结构&lt;/h3&gt;&#xA;&lt;p&gt;新建 simple_http_client、simple_http_server 目录，目录结构如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go-grpc-example&#xA;├── client&#xA;│   ├── simple_client&#xA;│   ├── simple_http_client&#xA;│   └── stream_client&#xA;├── conf&#xA;├── pkg&#xA;│   └── gtls&#xA;├── proto&#xA;├── server&#xA;│   ├── simple_http_server&#xA;│   ├── simple_server&#xA;│   └── stream_server&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;server&#34;&gt;Server&lt;/h3&gt;&#xA;&lt;p&gt;在 simple_http_server 目录下新建 server.go，写入文件内容：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载六」Unary and Stream interceptor</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-10-interceptor/</link>
      <pubDate>Wed, 10 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-10-interceptor/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;我想在每个 RPC 方法的前或后做某些事情，怎么做？&lt;/p&gt;&#xA;&lt;p&gt;本章节将要介绍的拦截器（interceptor），就能帮你在合适的地方实现这些功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;有几种方法&#34;&gt;有几种方法&lt;/h2&gt;&#xA;&lt;p&gt;在 gRPC 中，大类可分为两种 RPC 方法，与拦截器的对应关系是：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;普通方法：一元拦截器（grpc.UnaryInterceptor）&lt;/li&gt;&#xA;&lt;li&gt;流方法：流拦截器（grpc.StreamInterceptor）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;看一看&#34;&gt;看一看&lt;/h2&gt;&#xA;&lt;h3 id=&#34;grpcunaryinterceptor&#34;&gt;grpc.UnaryInterceptor&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func UnaryInterceptor(i UnaryServerInterceptor) ServerOption {&#xA;&#x9;return func(o *options) {&#xA;&#x9;&#x9;if o.unaryInt != nil {&#xA;&#x9;&#x9;&#x9;panic(&amp;#34;The unary server interceptor was already set and may not be reset.&amp;#34;)&#xA;&#x9;&#x9;}&#xA;&#x9;&#x9;o.unaryInt = i&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;函数原型：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type UnaryServerInterceptor func(ctx context.Context, req interface{}, info *UnaryServerInfo, handler UnaryHandler) (resp interface{}, err error)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;通过查看源码可得知，要完成一个拦截器需要实现 &lt;code&gt;UnaryServerInterceptor&lt;/code&gt; 方法。形参如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ctx context.Context：请求上下文&lt;/li&gt;&#xA;&lt;li&gt;req interface{}：RPC 方法的请求参数&lt;/li&gt;&#xA;&lt;li&gt;info *UnaryServerInfo：RPC 方法的所有信息&lt;/li&gt;&#xA;&lt;li&gt;handler UnaryHandler：RPC 方法本身&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;grpcstreaminterceptor&#34;&gt;grpc.StreamInterceptor&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func StreamInterceptor(i StreamServerInterceptor) ServerOption&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;函数原型：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载五」基于 CA 的 TLS 证书认证</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-08-ca-tls/</link>
      <pubDate>Mon, 08 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-08-ca-tls/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在上一章节中，我们提出了一个问题。就是如何保证证书的可靠性和有效性？你如何确定你 Server、Client 的证书是对的呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;ca&#34;&gt;CA&lt;/h2&gt;&#xA;&lt;p&gt;为了保证证书的可靠性和有效性，在这里可引入 CA 颁发的根证书的概念。其遵守 X.509 标准&lt;/p&gt;&#xA;&lt;h3 id=&#34;根证书&#34;&gt;根证书&lt;/h3&gt;&#xA;&lt;p&gt;根证书（root certificate）是属于根证书颁发机构（CA）的公钥证书。我们可以通过验证 CA 的签名从而信任 CA ，任何人都可以得到 CA 的证书（含公钥），用以验证它所签发的证书（客户端、服务端）&lt;/p&gt;&#xA;&lt;p&gt;它包含的文件如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;公钥&lt;/li&gt;&#xA;&lt;li&gt;密钥&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;生成-key&#34;&gt;生成 Key&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl genrsa -out ca.key 2048&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;生成密钥&#34;&gt;生成密钥&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl req -new -x509 -days 7200 -key ca.key -out ca.pem&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;填写信息&#34;&gt;填写信息&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Country Name (2 letter code) []:&#xA;State or Province Name (full name) []:&#xA;Locality Name (eg, city) []:&#xA;Organization Name (eg, company) []:&#xA;Organizational Unit Name (eg, section) []:&#xA;Common Name (eg, fully qualified host name) []:go-grpc-example&#xA;Email Address []:&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;server&#34;&gt;Server&lt;/h3&gt;&#xA;&lt;h4 id=&#34;生成-csr&#34;&gt;生成 CSR&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl req -new -key server.key -out server.csr&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&#34;填写信息-1&#34;&gt;填写信息&lt;/h5&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Country Name (2 letter code) []:&#xA;State or Province Name (full name) []:&#xA;Locality Name (eg, city) []:&#xA;Organization Name (eg, company) []:&#xA;Organizational Unit Name (eg, section) []:&#xA;Common Name (eg, fully qualified host name) []:go-grpc-example&#xA;Email Address []:&#xA;&#xA;Please enter the following &amp;#39;extra&amp;#39; attributes&#xA;to be sent with your certificate request&#xA;A challenge password []:&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;CSR 是 Cerificate Signing Request 的英文缩写，为证书请求文件。主要作用是 CA 会利用 CSR 文件进行签名使得攻击者无法伪装或篡改原有证书&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载四」TLS 证书认证</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-10-07-grpc-tls/</link>
      <pubDate>Sun, 07 Oct 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-10-07-grpc-tls/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;在前面的章节里，我们介绍了 gRPC 的四种 API 使用方式。是不是很简单呢 😀&lt;/p&gt;&#xA;&lt;p&gt;此时存在一个安全问题，先前的例子中 gRPC Client/Server 都是明文传输的，会不会有被窃听的风险呢？&lt;/p&gt;&#xA;&lt;p&gt;从结论上来讲，是有的。在明文通讯的情况下，你的请求就是裸奔的，有可能被第三方恶意篡改或者伪造为“非法”的数据&lt;/p&gt;&#xA;&lt;h2 id=&#34;抓个包&#34;&gt;抓个包&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/15e68df2ba9aa7cace3e26e35c79f200.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/ebebd3ea7d306ad2fcd311f1d8b46cc0.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;嗯，明文传输无误。这是有问题的，接下将改造我们的 gRPC，以便于解决这个问题 😤&lt;/p&gt;&#xA;&lt;h2 id=&#34;证书生成&#34;&gt;证书生成&lt;/h2&gt;&#xA;&lt;h3 id=&#34;私钥&#34;&gt;私钥&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl ecparam -genkey -name secp384r1 -out server.key&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;自签公钥&#34;&gt;自签公钥&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl req -new -x509 -sha256 -key server.key -out server.pem -days 3650&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;填写信息&#34;&gt;填写信息&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Country Name (2 letter code) []:&#xA;State or Province Name (full name) []:&#xA;Locality Name (eg, city) []:&#xA;Organization Name (eg, company) []:&#xA;Organizational Unit Name (eg, section) []:&#xA;Common Name (eg, fully qualified host name) []:go-grpc-example&#xA;Email Address []:&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;生成完毕&#34;&gt;生成完毕&lt;/h3&gt;&#xA;&lt;p&gt;生成证书结束后，将证书相关文件放到 conf/ 下，目录结构：&lt;/p&gt;</description>
    </item>
    <item>
      <title>log 标准库</title>
      <link>https://note.lican.site/posts/posts/go/pkg/2018-09-28-log/</link>
      <pubDate>Fri, 28 Sep 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/pkg/2018-09-28-log/</guid>
      <description>&lt;h2 id=&#34;日志&#34;&gt;日志&lt;/h2&gt;&#xA;&lt;h3 id=&#34;输出&#34;&gt;输出&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;2018/09/28 20:03:08 EDDYCJY Blog...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;构成&#34;&gt;构成&lt;/h3&gt;&#xA;&lt;p&gt;[日期]&amp;lt;空格&amp;gt;[时分秒]&amp;lt;空格&amp;gt;[内容]&amp;lt;\n&amp;gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;源码剖析&#34;&gt;源码剖析&lt;/h2&gt;&#xA;&lt;h3 id=&#34;logger&#34;&gt;Logger&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;type Logger struct {&#xA;&#x9;mu     sync.Mutex &#xA;&#x9;prefix string&#xA;&#x9;flag   int&#xA;&#x9;out    io.Writer&#xA;&#x9;buf    []byte&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ol&gt;&#xA;&lt;li&gt;mu：互斥锁，用于确保原子的写入&lt;/li&gt;&#xA;&lt;li&gt;prefix：每行需写入的日志前缀内容&lt;/li&gt;&#xA;&lt;li&gt;flag：设置日志辅助信息（时间、文件名、行号）的写入。可选如下标识位：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;const (&#xA;&#x9;Ldate         = 1 &amp;lt;&amp;lt; iota       // value: 1&#xA;&#x9;Ltime                           // value: 2&#xA;&#x9;Lmicroseconds                   // value: 4&#xA;&#x9;Llongfile                       // value: 8&#xA;&#x9;Lshortfile                      // value: 16&#xA;&#x9;LUTC                            // value: 32&#xA;&#x9;LstdFlags     = Ldate | Ltime   // value: 3&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;Ldate：当地时区的格式化日期：2009/01/23&lt;/li&gt;&#xA;&lt;li&gt;Ltime：当地时区的格式化时间：01:23:23&lt;/li&gt;&#xA;&lt;li&gt;Lmicroseconds：在 Ltime 的基础上，增加微秒的时间数值显示&lt;/li&gt;&#xA;&lt;li&gt;Llongfile：完整的文件名和行号：/a/b/c/d.go:23&lt;/li&gt;&#xA;&lt;li&gt;Lshortfile：当前文件名和行号：d.go：23，会覆盖 Llongfile 标识&lt;/li&gt;&#xA;&lt;li&gt;LUTC：如果设置 Ldate 或 Ltime，且设置 LUTC，则优先使用 UTC 时区而不是本地时区&lt;/li&gt;&#xA;&lt;li&gt;LstdFlags：Logger 的默认初始值（Ldate 和 Ltime）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;out：io.Writer&lt;/li&gt;&#xA;&lt;li&gt;buf：用于存储将要写入的日志内容&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;new&#34;&gt;New&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;func New(out io.Writer, prefix string, flag int) *Logger {&#xA;&#x9;return &amp;amp;Logger{out: out, prefix: prefix, flag: flag}&#xA;}&#xA;&#xA;var std = New(os.Stderr, &amp;#34;&amp;#34;, LstdFlags)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;New 方法用于初始化 Logger，接受三个初始参数，可以定制化而在 log 包内默认会初始一个 std，它指向标准输入流。而默认的标准输出、标准错误就是显示器（输出到屏幕上），标准输入就是键盘。辅助的时间信息默认为 &lt;code&gt;Ldate | Ltime&lt;/code&gt;，也就是 &lt;code&gt;2009/01/23 01:23:23&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载三」gRPC Streaming, Client and Server</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-09-24-stream-client-server/</link>
      <pubDate>Mon, 24 Sep 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-09-24-stream-client-server/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本章节将介绍 gRPC 的流式，分为三种类型：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Server-side streaming RPC：服务器端流式 RPC&lt;/li&gt;&#xA;&lt;li&gt;Client-side streaming RPC：客户端流式 RPC&lt;/li&gt;&#xA;&lt;li&gt;Bidirectional streaming RPC：双向流式 RPC&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;流&#34;&gt;流&lt;/h2&gt;&#xA;&lt;p&gt;任何技术，因为有痛点，所以才有了存在的必要性。如果您想要了解 gRPC 的流式调用，请继续&lt;/p&gt;&#xA;&lt;h3 id=&#34;图&#34;&gt;图&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/8812038d20ffece377c0e4901c9a9231.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;gRPC Streaming 是基于 HTTP/2 的，后续章节再进行详细讲解&lt;/p&gt;&#xA;&lt;h3 id=&#34;为什么不用-simple-rpc&#34;&gt;为什么不用 Simple RPC&lt;/h3&gt;&#xA;&lt;p&gt;流式为什么要存在呢，是 Simple RPC 有什么问题吗？通过模拟业务场景，可得知在使用 Simple RPC 时，有如下问题：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;数据包过大造成的瞬时压力&lt;/li&gt;&#xA;&lt;li&gt;接收数据包时，需要所有数据包都接受成功且正确后，才能够回调响应，进行业务处理（无法客户端边发送，服务端边处理）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;为什么用-streaming-rpc&#34;&gt;为什么用 Streaming RPC&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;大规模数据包&lt;/li&gt;&#xA;&lt;li&gt;实时场景&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;模拟场景&#34;&gt;模拟场景&lt;/h4&gt;&#xA;&lt;p&gt;每天早上 6 点，都有一批百万级别的数据集要同从 A 同步到 B，在同步的时候，会做一系列操作（归档、数据分析、画像、日志等）。这一次性涉及的数据量确实大&lt;/p&gt;&#xA;&lt;p&gt;在同步完成后，也有人马上会去查阅数据，为了新的一天筹备。也符合实时性。&lt;/p&gt;&#xA;&lt;p&gt;两者相较下，这个场景下更适合使用 Streaming RPC&lt;/p&gt;&#xA;&lt;h2 id=&#34;grpc&#34;&gt;gRPC&lt;/h2&gt;&#xA;&lt;p&gt;在讲解具体的 gRPC 流式代码时，会&lt;strong&gt;着重在第一节讲解&lt;/strong&gt;，因为三种模式其实是不同的组合。希望你能够注重理解，举一反三，其实都是一样的知识点 👍&lt;/p&gt;&#xA;&lt;h3 id=&#34;目录结构&#34;&gt;目录结构&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ tree go-grpc-example&#xA;go-grpc-example&#xA;├── client&#xA;│   ├── simple_client&#xA;│   │   └── client.go&#xA;│   └── stream_client&#xA;│       └── client.go&#xA;├── proto&#xA;│   ├── search.proto&#xA;│   └── stream.proto&#xA;└── server&#xA;    ├── simple_server&#xA;    │   └── server.go&#xA;    └── stream_server&#xA;        └── server.go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;增加 stream_server、stream_client 存放服务端和客户端文件，proto/stream.proto 用于编写 IDL&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载二」gRPC Client and Server</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-09-23-client-and-server/</link>
      <pubDate>Sun, 23 Sep 2018 12:30:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-09-23-client-and-server/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;本章节将使用 Go 来编写 gRPC Server 和 Client，让其互相通讯。在此之上会使用到如下库：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;google.golang.org/grpc&lt;/li&gt;&#xA;&lt;li&gt;github.com/golang/protobuf/protoc-gen-go&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;h3 id=&#34;grpc&#34;&gt;gRPC&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u google.golang.org/grpc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;protocol-buffers-v3&#34;&gt;Protocol Buffers v3&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all-3.5.1.zip&#xA;unzip protobuf-all-3.5.1.zip&#xA;cd protobuf-3.5.1/&#xA;./configure&#xA;make&#xA;make install&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;检查是否安装成功&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;protoc --version&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;若出现以下错误，执行 &lt;code&gt;ldconfig&lt;/code&gt; 命名就能解决这问题&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;protoc: error while loading shared libraries: libprotobuf.so.15: cannot open shared object file: No such file or directory&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;protoc-plugin&#34;&gt;Protoc Plugin&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u github.com/golang/protobuf/protoc-gen-go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;安装环境若有问题，可参考我先前的文章 &lt;a href=&#34;https://segmentfault.com/a/1190000013339403&#34;&gt;《介绍与环境安装》&lt;/a&gt; 内有详细介绍，不再赘述&lt;/p&gt;&#xA;&lt;h2 id=&#34;grpc-1&#34;&gt;gRPC&lt;/h2&gt;&#xA;&lt;p&gt;本小节开始正式编写 gRPC 相关的程序，一起上车吧 😄&lt;/p&gt;&#xA;&lt;h3 id=&#34;图示&#34;&gt;图示&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://image.eddycjy.com/415d9544fce1e774e1095ab99b6cc015.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;目录结构&#34;&gt;目录结构&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ tree go-grpc-example&#xA;go-grpc-example&#xA;├── client&#xA;├── proto&#xA;│   └── search.proto&#xA;└── server.go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;idl&#34;&gt;IDL&lt;/h3&gt;&#xA;&lt;h4 id=&#34;编写&#34;&gt;编写&lt;/h4&gt;&#xA;&lt;p&gt;在 proto 文件夹下的 search.proto 文件中，写入如下内容：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载一」gRPC及相关介绍</title>
      <link>https://note.lican.site/posts/posts/go/grpc/2018-09-22-install/</link>
      <pubDate>Sat, 22 Sep 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc/2018-09-22-install/</guid>
      <description>&lt;p&gt;项目地址：https://github.com/EDDYCJY/go-grpc-example&lt;/p&gt;&#xA;&lt;p&gt;作为开篇章，将会介绍 gRPC 相关的一些知识。简单来讲 gRPC 是一个 基于 HTTP/2 协议设计的 RPC 框架，它采用了 Protobuf 作为 IDL&lt;/p&gt;&#xA;&lt;p&gt;你是否有过疑惑，它们都是些什么？本文将会介绍一些常用的知识和概念，更详细的会给出手册地址去深入&lt;/p&gt;&#xA;&lt;h2 id=&#34;一rpc&#34;&gt;一、RPC&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是-rpc&#34;&gt;什么是 RPC&lt;/h3&gt;&#xA;&lt;p&gt;RPC 代指远程过程调用（Remote Procedure Call），它的调用包含了传输协议和编码（对象序列号）协议等等。允许运行于一台计算机的程序调用另一台计算机的子程序，而开发人员无需额外地为这个交互作用编程&lt;/p&gt;&#xA;&lt;h4 id=&#34;实际场景&#34;&gt;实际场景：&lt;/h4&gt;&#xA;&lt;p&gt;有两台服务器，分别是 A、B。在 A 上的应用 C 想要调用 B 服务器上的应用 D，它们可以直接本地调用吗？&lt;br&gt;&#xA;答案是不能的，但走 RPC 的话，十分方便。因此常有人称使用 RPC，就跟本地调用一个函数一样简单&lt;/p&gt;&#xA;&lt;h3 id=&#34;rpc-框架&#34;&gt;RPC 框架&lt;/h3&gt;&#xA;&lt;p&gt;我认为，一个完整的 RPC 框架，应包含负载均衡、服务注册和发现、服务治理等功能，并具有可拓展性便于流量监控系统等接入&lt;br&gt;&#xA;那么它才算完整的，当然了。有些较单一的 RPC 框架，通过组合多组件也能达到这个标准&lt;/p&gt;&#xA;&lt;p&gt;你认为呢？&lt;/p&gt;&#xA;&lt;h3 id=&#34;常见-rpc-框架&#34;&gt;常见 RPC 框架&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://grpc.io/&#34;&gt;gRPC&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/apache/thrift&#34;&gt;Thrift&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/smallnest/rpcx&#34;&gt;Rpcx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/apache/incubator-dubbo&#34;&gt;Dubbo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;比较一下&#34;&gt;比较一下&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;\&lt;/th&gt;&#xA;          &lt;th&gt;跨语言&lt;/th&gt;&#xA;          &lt;th&gt;多 IDL&lt;/th&gt;&#xA;          &lt;th&gt;服务治理&lt;/th&gt;&#xA;          &lt;th&gt;注册中心&lt;/th&gt;&#xA;          &lt;th&gt;服务管理&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;gRPC&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Thrift&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Rpcx&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Dubbo&lt;/td&gt;&#xA;          &lt;td&gt;×&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;为什么要-rpc&#34;&gt;为什么要 RPC&lt;/h3&gt;&#xA;&lt;p&gt;简单、通用、安全、效率&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 大杀器之性能剖析 PProf</title>
      <link>https://note.lican.site/posts/posts/go/tools/2018-09-15-go-tool-pprof/</link>
      <pubDate>Sat, 15 Sep 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/tools/2018-09-15-go-tool-pprof/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;写了几吨代码，实现了几百个接口。功能测试也通过了，终于成功的部署上线了&lt;/p&gt;&#xA;&lt;p&gt;结果，性能不佳，什么鬼？😭&lt;/p&gt;&#xA;&lt;h2 id=&#34;想做性能分析&#34;&gt;想做性能分析&lt;/h2&gt;&#xA;&lt;h3 id=&#34;pprof&#34;&gt;PProf&lt;/h3&gt;&#xA;&lt;p&gt;想要进行性能优化，首先瞩目在 Go 自身提供的工具链来作为分析依据，本文将带你学习、使用 Go 后花园，涉及如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;runtime/pprof：采集程序（非 Server）的运行数据进行分析&lt;/li&gt;&#xA;&lt;li&gt;net/http/pprof：采集 HTTP Server 的运行时数据进行分析&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;是什么&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;p&gt;pprof 是用于可视化和分析性能分析数据的工具&lt;/p&gt;&#xA;&lt;p&gt;pprof 以 &lt;a href=&#34;https://github.com/google/pprof/blob/master/proto/profile.proto&#34;&gt;profile.proto&lt;/a&gt; 读取分析样本的集合，并生成报告以可视化并帮助分析数据（支持文本和图形报告）&lt;/p&gt;&#xA;&lt;p&gt;profile.proto 是一个 Protocol Buffer v3 的描述文件，它描述了一组 callstack 和 symbolization 信息， 作用是表示统计分析的一组采样的调用栈，是很常见的 stacktrace 配置文件格式&lt;/p&gt;&#xA;&lt;h3 id=&#34;支持什么使用模式&#34;&gt;支持什么使用模式&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Report generation：报告生成&lt;/li&gt;&#xA;&lt;li&gt;Interactive terminal use：交互式终端使用&lt;/li&gt;&#xA;&lt;li&gt;Web interface：Web 界面&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;可以做什么&#34;&gt;可以做什么&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CPU Profiling：CPU 分析，按照一定的频率采集所监听的应用程序 CPU（含寄存器）的使用情况，可确定应用程序在主动消耗 CPU 周期时花费时间的位置&lt;/li&gt;&#xA;&lt;li&gt;Memory Profiling：内存分析，在应用程序进行堆分配时记录堆栈跟踪，用于监视当前和历史内存使用情况，以及检查内存泄漏&lt;/li&gt;&#xA;&lt;li&gt;Block Profiling：阻塞分析，记录 goroutine 阻塞等待同步（包括定时器通道）的位置&lt;/li&gt;&#xA;&lt;li&gt;Mutex Profiling：互斥锁分析，报告互斥锁的竞争情况&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;一个简单的例子&#34;&gt;一个简单的例子&lt;/h2&gt;&#xA;&lt;p&gt;我们将编写一个简单且有点问题的例子，用于基本的程序初步分析&lt;/p&gt;&#xA;&lt;h3 id=&#34;编写-demo-文件&#34;&gt;编写 demo 文件&lt;/h3&gt;&#xA;&lt;p&gt;（1）demo.go，文件内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net/http&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;net/http/pprof&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-pprof-example/data&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;go&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;data&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://github.com/EDDYCJY&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ListenAndServe&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0.0.0.0:6060&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;（2）data/d.go，文件内容：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十七」用Nginx部署Go应用</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-09-01-nginx/</link>
      <pubDate>Sat, 01 Sep 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-09-01-nginx/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Nginx。&lt;/li&gt;&#xA;&lt;li&gt;反向代理。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;简单部署后端服务。&lt;/p&gt;&#xA;&lt;h2 id=&#34;做什么&#34;&gt;做什么&lt;/h2&gt;&#xA;&lt;p&gt;在本章节，我们将简单介绍 Nginx 以及使用 Nginx 来完成对 &lt;a href=&#34;https://github.com/EDDYCJY/go-gin-example&#34;&gt;go-gin-example&lt;/a&gt; 的部署，会实现反向代理和简单负载均衡的功能。&lt;/p&gt;&#xA;&lt;h2 id=&#34;nginx&#34;&gt;Nginx&lt;/h2&gt;&#xA;&lt;h3 id=&#34;是什么&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;p&gt;Nginx 是一个 Web Server，可以用作反向代理、负载均衡、邮件代理、TCP / UDP、HTTP 服务器等等，它拥有很多吸引人的特性，例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;以较低的内存占用率处理 10,000 多个并发连接（每 10k 非活动 HTTP 保持活动连接约 2.5 MB ）&lt;/li&gt;&#xA;&lt;li&gt;静态服务器（处理静态文件）&lt;/li&gt;&#xA;&lt;li&gt;正向、反向代理&lt;/li&gt;&#xA;&lt;li&gt;负载均衡&lt;/li&gt;&#xA;&lt;li&gt;通过 OpenSSL 对 TLS / SSL 与 SNI 和 OCSP 支持&lt;/li&gt;&#xA;&lt;li&gt;FastCGI、SCGI、uWSGI 的支持&lt;/li&gt;&#xA;&lt;li&gt;WebSockets、HTTP/1.1 的支持&lt;/li&gt;&#xA;&lt;li&gt;Nginx + Lua&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;请右拐谷歌或百度，安装好 Nginx 以备接下来的使用&lt;/p&gt;&#xA;&lt;h3 id=&#34;简单讲解&#34;&gt;简单讲解&lt;/h3&gt;&#xA;&lt;h4 id=&#34;常用命令&#34;&gt;常用命令&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;nginx：启动 Nginx&lt;/li&gt;&#xA;&lt;li&gt;nginx -s stop：立刻停止 Nginx 服务&lt;/li&gt;&#xA;&lt;li&gt;nginx -s reload：重新加载配置文件&lt;/li&gt;&#xA;&lt;li&gt;nginx -s quit：平滑停止 Nginx 服务&lt;/li&gt;&#xA;&lt;li&gt;nginx -t：测试配置文件是否正确&lt;/li&gt;&#xA;&lt;li&gt;nginx -v：显示 Nginx 版本信息&lt;/li&gt;&#xA;&lt;li&gt;nginx -V：显示 Nginx 版本信息、编译器和配置参数的信息&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;涉及配置&#34;&gt;涉及配置&lt;/h4&gt;&#xA;&lt;p&gt;1、 proxy_pass：配置&lt;strong&gt;反向代理的路径&lt;/strong&gt;。需要注意的是如果 proxy_pass 的 url 最后为&#xA;/，则表示绝对路径。否则（不含变量下）表示相对路径，所有的路径都会被代理过去&lt;/p&gt;</description>
    </item>
    <item>
      <title>「番外」请入门 Makefile</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-08-26-makefile/</link>
      <pubDate>Sun, 26 Aug 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-08-26-makefile/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;写一个 Makefile&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;含一定复杂度的软件工程，基本上都是先编译 A，再依赖 B，再编译 C&amp;hellip;，最后才执行构建。如果每次都人为编排，又或是每新来一个同事就问你项目 D 怎么构建、重新构建需要注意什么&amp;hellip;等等情况，岂不是要崩溃？&lt;/p&gt;&#xA;&lt;p&gt;我们常常会在开源项目中发现 Makefile，你是否有过疑问？&lt;/p&gt;&#xA;&lt;p&gt;本章节会简单介绍 Makefile 的使用方式，最后建议深入学习。&lt;/p&gt;&#xA;&lt;h2 id=&#34;怎么解决&#34;&gt;怎么解决&lt;/h2&gt;&#xA;&lt;p&gt;对于构建编排，Docker 有 Dockerfile ，在 Unix 中有神器 &lt;a href=&#34;https://en.wikipedia.org/wiki/Make_%28software%29&#34;&gt;Make&lt;/a&gt; &amp;hellip;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;make&#34;&gt;Make&lt;/h2&gt;&#xA;&lt;h3 id=&#34;是什么&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;p&gt;Make 是一个构建自动化工具，会在当前目录下寻找 Makefile 或 makefile 文件。如果存在，会依据 Makefile 的&lt;strong&gt;构建规则&lt;/strong&gt;去完成构建&lt;/p&gt;&#xA;&lt;p&gt;当然了，实际上 Makefile 内都是你根据 make 语法规则，自己编写的特定 Shell 命令等&lt;/p&gt;&#xA;&lt;p&gt;它是一个工具，规则也很简单。在支持的范围内，编译 A， 依赖 B，再编译 C，完全没问题&lt;/p&gt;&#xA;&lt;h3 id=&#34;规则&#34;&gt;规则&lt;/h3&gt;&#xA;&lt;p&gt;Makefile 由多条规则组成，每条规则都以一个 target（目标）开头，后跟一个 : 冒号，冒号后是这一个目标的 prerequisites（前置条件）&lt;/p&gt;&#xA;&lt;p&gt;紧接着新的一行，必须以一个 tab 作为开头，后面跟随 command（命令），也就是你希望这一个 target 所执行的构建命令&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[target] ... : [prerequisites] ...&#xA;&amp;lt;tab&amp;gt;[command]&#xA;    ...&#xA;    ...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;target：一个目标代表一条规则，可以是一个或多个文件名。也可以是某个操作的名字（标签），称为&lt;strong&gt;伪目标（phony）&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;prerequisites：前置条件，这一项是&lt;strong&gt;可选参数&lt;/strong&gt;。通常是多个文件名、伪目标。它的作用是 target 是否需要重新构建的标准，如果前置条件不存在或有过更新（文件的最后一次修改时间）则认为 target 需要重新构建&lt;/li&gt;&#xA;&lt;li&gt;command：构建这一个 target 的具体命令集&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;简单的例子&#34;&gt;简单的例子&lt;/h3&gt;&#xA;&lt;p&gt;本文将以 &lt;a href=&#34;https://github.com/EDDYCJY/go-gin-example&#34;&gt;go-gin-example&lt;/a&gt; 去编写 Makefile 文件，请跨入 make 的大门&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十六」在图片上绘制文字</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-07-07-font/</link>
      <pubDate>Sat, 07 Jul 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-07-07-font/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;字体库使用&lt;/li&gt;&#xA;&lt;li&gt;图片合成&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;主要实现&lt;strong&gt;合并后的海报上绘制文字&lt;/strong&gt;的功能（这个需求也是常见的很了），内容比较简单。&lt;/p&gt;&#xA;&lt;h2 id=&#34;实现&#34;&gt;实现&lt;/h2&gt;&#xA;&lt;p&gt;这里使用的是 &lt;a href=&#34;https://github.com/EDDYCJY/go-gin-example/blob/master/runtime/fonts/msyhbd.ttc&#34;&gt;微软雅黑&lt;/a&gt; 的字体，请点击进行下载并&lt;strong&gt;存放到 runtime/fonts 目录&lt;/strong&gt;下（字体文件占 16 MB 大小）&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get -u github.com/golang/freetype&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;绘制文字&#34;&gt;绘制文字&lt;/h3&gt;&#xA;&lt;p&gt;打开 service/article_service/article_poster.go 文件，增加绘制文字的业务逻辑，如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DrawText&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;JPG&lt;/span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;draw&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Image&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Merged&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;File&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Title&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;X0&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Y0&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Size0&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;float64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;SubTitle&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;X1&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Y1&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Size1&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;float64&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;a&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ArticlePosterBg&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;DrawPoster&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;DrawText&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;fontName&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fontSource&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RuntimeRootPath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FontSavePath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fontName&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fontSourceBytes&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ioutil&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fontSource&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;trueTypeFont&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;freetype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ParseFont&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;fontSourceBytes&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;freetype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewContext&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetDPI&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;72&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetFont&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;trueTypeFont&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetFontSize&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Size0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetClip&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JPG&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Bounds&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetDst&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JPG&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetSrc&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;image&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Black&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;pt&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;freetype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pt&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;X0&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Y0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DrawString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Title&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;pt&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetFontSize&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Size1&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;fc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DrawString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SubTitle&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;freetype&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Pt&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;X1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Y1&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;jpeg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Merged&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;d&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JPG&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里主要使用了 freetype 包，分别涉及如下细项：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十五」生成二维码、合并海报</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-07-05-image/</link>
      <pubDate>Thu, 05 Jul 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-07-05-image/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;图片生成&lt;/li&gt;&#xA;&lt;li&gt;二维码生成&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在文章的详情页中，我们常常会需要去宣传它，而目前最常见的就是发海报了，今天我们将实现如下功能：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;生成二维码&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;合并海报（背景图 + 二维码）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;实现&#34;&gt;实现&lt;/h2&gt;&#xA;&lt;p&gt;首先，你需要在 App 配置项中增加二维码及其海报的存储路径，我们约定配置项名称为 &lt;code&gt;QrCodeSavePath&lt;/code&gt;，值为 &lt;code&gt;qrcode/&lt;/code&gt;，经过多节连载的你应该能够完成，若有不懂可参照 &lt;a href=&#34;https://github.com/EDDYCJY/go-gin-example/blob/master/conf/app.ini#L14&#34;&gt;go-gin-example&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;生成二维码&#34;&gt;生成二维码&lt;/h2&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get -u github.com/boombuler/barcode&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;工具包&#34;&gt;工具包&lt;/h3&gt;&#xA;&lt;p&gt;考虑生成二维码这一动作贴合工具包的定义，且有公用的可能性，新建 pkg/qrcode/qrcode.go 文件，写入内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;qrcode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;image/jpeg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/boombuler/barcode&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/boombuler/barcode/qr&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/pkg/file&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/pkg/setting&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/pkg/util&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;QrCode&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Width&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Height&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Ext&lt;/span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Level&lt;/span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;qr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ErrorCorrectionLevel&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Mode&lt;/span&gt;   &lt;span style=&#34;color:#a6e22e&#34;&gt;qr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Encoding&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;EXT_JPG&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.jpg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;NewQrCode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;height&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;level&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;qr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ErrorCorrectionLevel&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;qr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Encoding&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCode&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCode&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;:    &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Width&lt;/span&gt;:  &lt;span style=&#34;color:#a6e22e&#34;&gt;width&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Height&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;height&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Level&lt;/span&gt;:  &lt;span style=&#34;color:#a6e22e&#34;&gt;level&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Mode&lt;/span&gt;:   &lt;span style=&#34;color:#a6e22e&#34;&gt;mode&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Ext&lt;/span&gt;:    &lt;span style=&#34;color:#a6e22e&#34;&gt;EXT_JPG&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodePath&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCodeSavePath&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeFullPath&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RuntimeRootPath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCodeSavePath&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeFullUrl&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PrefixUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodePath&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeFileName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;util&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EncodeMD5&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;value&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCode&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeExt&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Ext&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCode&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;CheckEncode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeFileName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeExt&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CheckNotExist&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;QrCode&lt;/span&gt;) &lt;span style=&#34;color:#a6e22e&#34;&gt;Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeFileName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetQrCodeExt&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;CheckNotExist&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;src&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;qr&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;URL&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Level&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Mode&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;barcode&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Scale&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Width&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;q&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Height&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MustOpen&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;defer&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Close&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;jpeg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Encode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;f&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;path&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里主要聚焦 &lt;code&gt;func (q *QrCode) Encode&lt;/code&gt; 方法，做了如下事情：&lt;/p&gt;</description>
    </item>
    <item>
      <title>分享-one</title>
      <link>https://note.lican.site/project/share1/</link>
      <pubDate>Mon, 18 Jun 2018 20:18:00 +0800</pubDate>
      <guid>https://note.lican.site/project/share1/</guid>
      <description>&lt;h3 id=&#34;目录&#34;&gt;目录&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#draft-false&#34;&gt;draft: false&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95&#34;&gt;目录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#android&#34;&gt;Android&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#ios&#34;&gt;iOS&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#python&#34;&gt;Python&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#java&#34;&gt;Java&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#javascript&#34;&gt;JavaScript&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%89%8D%E7%AB%AF&#34;&gt;前端&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%B7%A5%E5%85%B7&#34;&gt;工具&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E8%B5%84%E6%96%99%E6%95%B4%E5%90%88&#34;&gt;资料整合&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#go&#34;&gt;Go&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&#34;&gt;机器学习&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#vue--react&#34;&gt;Vue / React&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%8C%BA%E5%9D%97%E9%93%BE&#34;&gt;区块链&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E9%9D%A2%E8%AF%95&#34;&gt;面试&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%B0%8F%E7%A8%8B%E5%BA%8F&#34;&gt;小程序&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E7%AE%97%E6%B3%95&#34;&gt;算法&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E4%BB%96&#34;&gt;其他&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#%E9%9D%9Egithub%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7--%E5%B9%B2%E8%B4%A7&#34;&gt;非GitHub实用工具 / 干货&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;android&#34;&gt;Android&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/matrix&#34;&gt;Matrix&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由腾讯开源的的 APM（Application Performance Manage）系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Tencent/matrix.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H8Yn764h2?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151870800&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/MMKV&#34;&gt;MMKV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;微信开源的一个基于 mmap 内存映射的 key-value 组件，底层序列化/反序列化使用 protobuf 实现，性能高，稳定性强&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Tencent/MMKV.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GBoNeaAij?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538656849300&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huanghaibin-dev/CalendarView&#34;&gt;CalendarView&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Android 上一个优雅、高度自定义、性能高效的日历控件，完美支持周视图，支持标记、自定义颜色、农历等，任意控制月视图显示、任意日期拦截条件、自定义周起始等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/huanghaibin-dev/CalendarView.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GBfmJEw43?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538656952139&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JavaNoober/BackgroundLibrary&#34;&gt;BackgroundLibrary&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;无需自定义 View，直接添加属性便可以实现 shape、selector 效果&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/JavaNoober/BackgroundLibrary.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GzkMg6reW?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658191739&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huangyz0918/AndroidWM&#34;&gt;AndroidWM&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量级的 Android 图片水印框架，支持隐形水印和加密水印&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/huangyz0918/AndroidWM.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GyOwNv9SH?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658460844&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/heimashi/kotlin_tips&#34;&gt;kotlin_tips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份汇总 Kotlin 相对于 Java 的优势，以及怎么用 Kotlin 去简洁、务实、高效、安全开发的 Tips&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/heimashi/kotlin_tips.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GyF6inoJQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CarGuo/GSYVideoPlayer&#34;&gt;GSYVideoPlayer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 IJKPlayer（兼容系统MediaPlayer与EXOPlayer2），实现了多功能的视频播放器，支持 HTTPS，弹幕，滤镜、水印、Gif 截图，片头广告、中间广告，多个同时播放等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/CarGuo/GSYVideoPlayer.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GynQL0Ygn?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658654387&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pqpo/SmartCamera&#34;&gt;SmartCamera&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Android 相机拓展库，提供了一个高度可定制的实时扫描模块能够实时采集并且识别相机内物体边框是否吻合指定区域&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/pqpo/SmartCamera.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GwGxQchak?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gonghuiyuan516/AndroidArchitectureArticle&#34;&gt;AndroidArchitectureArticle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Android 架构文章大全，整理了各大产商实践经验，以及优秀的架构文章&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/gonghuiyuan516/AndroidArchitectureArticle.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gw4PR7EaD?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1535886809242&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zjun615/RulerView&#34;&gt;RuleView&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一系列卷尺 Android 控件，包含：基本卷尺控件（体重尺，或其它）、金额卷尺控件、时间卷尺控件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/zjun615/RulerView.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GvLYR5vhB?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/caiyonglong/MusicLake&#34;&gt;MusicLake&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;音乐播放器，可播放本地音乐，百度音乐，QQ音乐，虾米音乐，网易云音乐&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/caiyonglong/MusicLake.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtJFIum3h?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/git-xuhao/KotlinMvp&#34;&gt;KotlinMvp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Kotlin+MVP+Retrofit+RxJava+Glide 等架构实现仿开眼 App 项目，UI 简约&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/git-xuhao/KotlinMvp.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtuzqbFtM?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wzx54321/LockDemo&#34;&gt;LockDemo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个封装了指纹识别、图形密码手势密码识别、aliOCR 识别 个人使用，可根据需求添加&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wzx54321/LockDemo.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GsqzWbqWj?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime#_rnd1536071968719&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tz28/Chinese-number-gestures-recognition&#34;&gt;Chinese-number-gestures-recognition&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于卷积神经网络的数字手势识别安卓 APP，主要功能为：通过手机摄像头识别做出的数字手势，能够识别数字0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 对应的手势&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/tz28/Chinese-number-gestures-recognition.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GrORWsEMD?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HJ-Money/MTransition&#34;&gt;MTransition&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Android 上的页面切换动画库，它可以让一些复杂的、自定义的页面切换动画更加简单地实现出来，节省开发成本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/HJ-Money/MTransition.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Grd9XFEt1?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536073370649&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/whataa/pandora&#34;&gt;Pandora&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款无需 ROOT、可以直接在 应用内 查看和修改包括网络、数据库、UI 等的 Android 工具箱，适合开发和测试阶段的各种问题的快速定位&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/whataa/pandora.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gott1gwRt?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536074744432&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Bakumon/MoneyKeeper&#34;&gt;MoneyKeeper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款纯粹、轻量、高颜值的 Android 记账应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Bakumon/MoneyKeeper.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GlqV6p8WF?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536076012573&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ome450901/SimpleRatingBar&#34;&gt;SimpleRatingBar&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以轻松定制炫酷动画的 Android 评分控件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/ome450901/SimpleRatingBar.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gj9vEfvED?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536161207838&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DingMouRen/LayoutManagerGroup&#34;&gt;LayoutManagerGroup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个利用自定义 RecyclerView 的 LayoutManager 实现多个炫酷 Android 列表效果开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/DingMouRen/LayoutManagerGroup.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GiHea1ej9?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536161299788&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eleme/UETool&#34;&gt;UETool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;饿了么开发团队开源的一个各方人员（设计师、程序员、测试）都可以使用的 Android 调试工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/eleme/UETool.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GhW5GiLgk?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/BolexLiu/AutoEx&#34;&gt;AutoEx&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个帮助 Android 开发者，让项目在崩溃时从异常堆栈中，自动寻找 Stack Overflow 的回答&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/BolexLiu/AutoEx.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GfvfJjgnN?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536162512803&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CainKernel/CainCamera&#34;&gt;CainCamera&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款美颜类相机，提供了实时美颜、滤镜、拍照、静态图片的美化、特效、裁剪旋转、夜景增强和抠图虚化等等功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/CainKernel/CainCamera.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GbQZOosK6?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/heimashi/kotlin_tips&#34;&gt;kotlin_tips&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份汇总 Kotlin 相对于 Java 的优势，以及怎么用 Kotlin 去简洁、务实、高效、安全开发的 Tips，提高你的生产力&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/heimashi/kotlin_tips.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GakIQt5ZG?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536164747608&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/totond/TextPathView&#34;&gt;TextPathView&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个把文字转化为路径动画然后展现出来的自定义控件，挺有意思的一个开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/totond/TextPathView.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G8vASxMIv?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536407376475&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jd-alexander/LikeButton&#34;&gt;LikeButton&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款类似 Twitter 酷炫点赞动画效果的开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jd-alexander/LikeButton.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G69s2ucQX?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536408289007&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TonnyL/Charles&#34;&gt;Charles&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个非常漂亮的 Android 本地多媒体选择器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/TonnyL/Charles.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G50Lt7nWO?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Blankj/AndroidStandardDevelop&#34;&gt;AndroidStandardDevelop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;目前最完善的一份安卓开发规范总结资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Blankj/AndroidStandardDevelop.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G27E29zM7?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TonnyL/Mango&#34;&gt;Mango&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个完全使用 Kotlin 开发的 Dribbble 第三方安卓客户端&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/TonnyL/Mango.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FFNGUiAqb?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536410351912&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zixun/GodEye&#34;&gt;AndroidGodEye&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可以在 PC 浏览器中实时监控 Android App 内存泄漏，卡顿，CPU使用率等等信息的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/zixun/GodEye.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FDP8s89XS?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/evrencoskun/TableView&#34;&gt;TableView&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于显示复杂的数据结构和呈现由行, 列和单元格组成的表格数据开源库, 支持列宽度动态自动计算, 行列点击监听触摸交互等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/evrencoskun/TableView.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FDr6MdFeq?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536411658307&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;ios&#34;&gt;iOS&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Meituan-Dianping/Graver&#34;&gt;Graver&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款高效的 UI 渲染框架，它以更低的资源消耗来构建十分流畅的 UI 界面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Meituan-Dianping/Graver.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H97NBlqbm?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151778877&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/JonyFang/FFPopup&#34;&gt;FFPopup&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个轻量的自定义弹窗组件，提供多种弹窗样式 &amp;amp; 展示动画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/JonyFang/FFPopup.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H71HIvW2r?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/eBay/HeadGazeLib&#34;&gt;Ebay&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;利用 ARKit 和 iPhone X 的原深感摄像头实现了免触摸、完全用头和眼睛导航的用户界面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/eBay/HeadGazeLib.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GzNGkEdqR?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/huri000/SwiftEntryKit&#34;&gt;SwiftEntryKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简洁易用的 iOS 通知/弹出框的开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/huri000/SwiftEntryKit.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GsA0r5Ygz?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/meituan/EasyReact&#34;&gt;EasyReact&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于响应式编程范式的客户端开发框架，开发者可以使用此框架轻松地解决客户端的异步问题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/meituan/EasyReact.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GqPg6666k?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CocoaDebug/CocoaDebug&#34;&gt;CocoaDebug&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一行代码实现 APP 网络日志监控&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/CocoaDebug/CocoaDebug.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gqx2ifVVm?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AudioKit/AudioKitSynthOne&#34;&gt;AudioKitSynthOne&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;AudioKit 开源酷酷的音响合成器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/AudioKit/AudioKitSynthOne.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GpHfubvtB?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/whbalzac/WHWeatherAnimation&#34;&gt;WHWeatherAnimation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;使用 Objective-C 开发的一组不同天气展示的 iOS 动画效果，含有太阳，云，雨，雷暴，雪几种天气效果&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/whbalzac/WHWeatherAnimation.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gpo20moK2?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536074369706&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/overboming/ZCAnimatedLabel&#34;&gt;ZCAnimatedLabel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个拥有多种炫酷的文字显示或消失 iOS 动画效果库，并且易于扩展&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/overboming/ZCAnimatedLabel.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SherlockQi/HeavenMemoirs&#34;&gt;HeavenMemoirs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个利用 ARKit 写的 AR 相册，将图片视频等，放置在真实世界中，同时支持播放视频，背景音乐并添加文字&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/SherlockQi/HeavenMemoirs.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gl846pADE?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HDB-Li/LLDebugTool&#34;&gt;LLDebugTool&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款针对开发者和测试者的调试工具，它可以帮助你在非Xcode的情况下，进行数据分析和操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/HDB-Li/LLDebugTool.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gj059na3N?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536161263161&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aozhimin/iOS-Monitor-Platform&#34;&gt;iOS-Monitor-Platform&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份记录 iOS 性能监控 SDK Wedjat（华狄特）开发过程的调研和整理, 分为两部分基础性能篇和网络篇&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/aozhimin/iOS-Monitor-Platform.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gi5waw9iC?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CaliCastle/PopMenu&#34;&gt;PopMenu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用 Swift 写的酷炫可定制的 iOS 弹出菜单&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/CaliCastle/PopMenu.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GgzfcCpdY?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cgoldsby/LoginCritter&#34;&gt;LoginCritter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个监听用户登录输入邮箱地址密码时有趣的 iOS 交互效果库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/cgoldsby/LoginCritter.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gf2YepXRo?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rob2468/HttpServerDebug&#34;&gt;HttpServerDebug&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 iOS APP 开发效率工具，能够在 iOS APP 脱离 Xcode 后，进行现场调试&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/rob2468/HttpServerDebug.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GeTYSacbP?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/SoySauceLab/CollectionKit&#34;&gt;CollectionKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于构建可组合数据驱动的集合视图的 Swift 框架，内置丰富的布局和动效&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/SoySauceLab/CollectionKit.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GaN0l3hPs?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536164502763&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AAChartKit/AAChartKit&#34;&gt;AAChartKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个极其精美而又强大的 iOS 图表组件库，支持柱状图、条形图、折线图、曲线等等各种类型的多达几十种的信息图图表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/AAChartKit/AAChartKit.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G9zAmz08G?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536406949195&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/LKImageKit&#34;&gt;LKImageKit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个高性能的图片框架，包括了图片控件，图片下载、内存缓存、磁盘缓存、图片解码、图片处理等一系列能力&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Tencent/LKImageKit.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G8cJT9ZA0?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apple/swift-nio&#34;&gt;swift-nio&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;个事件驱动的非阻塞的网络框架，用来写高性能网络应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/apple/swift-nio.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G5y3s5rjw?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yyued/SVGAPlayer-iOS&#34;&gt;SVGAPlayer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 YY UED 团队开源的一个能让开发者在 iOS/Android/Web 中轻松播放 SVGA 格式动画的开源库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/yyued/SVGAPlayer-iOS.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FFEgpr9E0?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/OpenMarshall/WBDownloader&#34;&gt;WBDownloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;抓取、下载微博视频的 iOS 客户端&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/OpenMarshall/WBDownloader.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FEYzc0mGO?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Lax/iOS-Swift-Demos&#34;&gt;iOS-Swift-Demos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集并分类整理的 Swift 开发学习资料，包括 Apple 官方提供的示例代码和文档，以及 GitHub上的项目和国内外开发者的技术博客&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Lax/iOS-Swift-Demos.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FDwl74NeD?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;python&#34;&gt;Python&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HT524/500LineorLess_CN&#34;&gt;500LineorLess_CN&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《500 Lines or Less》Python 书中文翻译版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/HT524/500LineorLess_CN.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H65fG8rrj?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152894174&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/leisurelicht/wtfpython-cn&#34;&gt;wtfpython-cn&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了一些有趣且鲜为人知的 Python 特性&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/leisurelicht/wtfpython-cn.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H5txGoaY8?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/facert/awesome-spider&#34;&gt;awesome-spider&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了各种爬虫案例 Demo 资料，方便学习如何爬虫&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/facert/awesome-spider.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GDdVc51x7?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546100007881&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jxlwqq/id-validator.py&#34;&gt;id-validator&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;中华人民共和国居民身份证、港澳居民居住证以及台湾居民居住证号码验证工具（PHP Composer 版），支持 15 位与 18 位号码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jxlwqq/id-validator.py.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GAuefEWcY?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538657209873&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shidenggui/easyquotation&#34;&gt;Easyquotation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;快速获取新浪/腾讯的全市场行情, 网络正常的情况下只需要 200+ms&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/shidenggui/easyquotation.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GvagSAn0o?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/getredash/redash&#34;&gt;Redash&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的 BI 工具，提供了基于 web 的数据库查询和数据可视化功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/getredash/redash.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GuRpTeDO1?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jumpserver/jumpserver&#34;&gt;Jumpserver&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;全球首款完全开源的堡垒机，是符合 4A 的专业运维审计系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jumpserver/jumpserver.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtWQU8fha?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nbedos/termtosvg&#34;&gt;Termtosvg&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用 Python 编写的 Linux 终端记录机，可将终端命令行会话过程生成独立的 SVG 动画，很炫酷喔装逼用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/nbedos/termtosvg.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GoCTwqw50?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536074678224&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/moyuanz/DevilYuan&#34;&gt;DevilYuan&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个由 Python 编写的可视化股票量化系统，支持选股，历史数据自动下载，策略回测及参数优化，实盘交易和常用的统计功能&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/moyuanz/DevilYuan.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GmuUzse3G?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/darknessomi/musicbox&#34;&gt;MusicBox&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 Python 编写的一款高品质、简洁优雅的网易云音乐命令行版本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/darknessomi/musicbox.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GlhuAA6Iz?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536076072605&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/vipstone/faceai&#34;&gt;faceai&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款入门级的人脸、视频、文字检测以及识别的项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/vipstone/faceai.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gl8sfEv9v?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536076170442&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bbfamily/abu&#34;&gt;abu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于 Python 的免费开源量化交易&amp;amp;量化投资架构系统，支持股票、期货、外汇、数字货币 (BTC\ETH\LTC\ETC\BCC) 等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/bbfamily/abu.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GdPygyccu?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536163355987&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shobrook/rebound&#34;&gt;rebound&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一旦 Python 脚本报错，就到 Stack Overflow 取回报错信息的解释&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/shobrook/rebound.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GcGEnefHp?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NVIDIA/FastPhotoStyle&#34;&gt;FastPhotoStyle&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Python 写的算法，快速将一张样式照片提取其样式合成到一张内容照片上&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/NVIDIA/FastPhotoStyle.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G7rBq6KJJ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/satwikkansal/wtfpython&#34;&gt;wtfpython&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了一些有趣的, 少有人知的功能的 Python 代码片段集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/satwikkansal/wtfpython.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G0Ue3DzHo?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536410223684&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;java&#34;&gt;Java&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/qiurunze123/miaosha&#34;&gt;miaosha&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个教你如何使用 Java 语言来设计高并发大流量秒杀架构的项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/qiurunze123/miaosha.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H7BwDtzpv?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152150291&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Snailclimb/JavaGuide&#34;&gt;JavaGuide&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份涵盖大部分Java程序员所需要掌握的核心知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Snailclimb/JavaGuide.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GFctDCfPz?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099361728&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rhwayfun/spring-boot-learning-examples&#34;&gt;spring-boot-learning-examples&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;最全的 Spring Boot 实践指南，Spring Boot 知识点整理、工程实践，并结合工作案例进行深入&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/rhwayfun/spring-boot-learning-examples.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GD4uHge8I?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546100111836&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alibaba/easyexcel&#34;&gt;easyexcel&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Alibaba 团队开源的一个快速、简单避免 OOM 的 Java 处理 Excel 工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/alibaba/easyexcel.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GB5WerNFx?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538657069949&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wuyouzhuguli/SpringAll&#34;&gt;SpringAll&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Spring 系列教程，循序渐进，学习 Spring Boot、Spring Boot &amp;amp; Shiro、Spring Cloud 和 Spring Security&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wuyouzhuguli/SpringAll.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GA1WLpMTw?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538657650132&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alibaba/arthas&#34;&gt;Arthas&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Alibaba 开源的Java诊断工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/alibaba/arthas.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GzJ5LoPqe?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/crossoverJie/JCSprout&#34;&gt;JCSprout&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;处于萌芽阶段的 Java 核心知识库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/crossoverJie/JCSprout.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GwPYl7JGE?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/RAOE/xfsearch&#34;&gt;xfsearch&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;搜搜影库是一款由 SSM 架构结合全文搜索引擎 ElasticSearch 的电影搜索项目，封装了低版本的 restClient 客户端&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/RAOE/xfsearch.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GuHZo3H9e?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xenv/gushici&#34;&gt;gushici&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以随机返回一句古诗词名句的接口，收录将近 10000 条古诗词名句，并且支持根据喜好指定的分类中进行随机返回&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/xenv/gushici.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtNqpwnNp?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aalansehaiyang/technology-talk&#34;&gt;technology-talk&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份汇总 Java 生态圈常用技术框架、开源中间件，系统架构、项目管理、经典架构案例、数据库、常用三方库、线上运维等知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/aalansehaiyang/technology-talk.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GlTcAjM4J?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536075838592&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/biezhi/30-seconds-of-java8&#34;&gt;30-seconds-of-java&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集整理一些实用的 Java8 代码片段集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/biezhi/30-seconds-of-java8.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G1ON2sGqq?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536409928933&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;javascript&#34;&gt;JavaScript&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jabbany/CommentCoreLibrary&#34;&gt;CommentCoreLibrary&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套基于 JavaScript 构建的弹幕控制器，提供从基本骨架到高级弹幕的支持&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jabbany/CommentCoreLibrary.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H51gcvdkQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546144787874&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/leonardomso/33-js-concepts&#34;&gt;33-js-concepts&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;每个 JavaScript 工程师都应懂的 33 个概念，帮助开发者掌握 JavaScript 概念&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/leonardomso/33-js-concepts.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GF339mHCa?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099478165&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sindresorhus/ky&#34;&gt;Ky&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于浏览器 Fetch API 的简洁优雅HTTP客户端&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/sindresorhus/ky.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GyXXi6VKr?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658348856&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shzlw/zeu&#34;&gt;Zeu.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于实时构建控制台，监控 UI 和物联网 Web 界面的 JavaScript 库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/shzlw/zeu.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GxmX2sx6b?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GoogleChromeLabs/size-plugin&#34;&gt;size-plugin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以打印输出 webpack 大小以及相对上次构建更改过的日志插件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/GoogleChromeLabs/size-plugin.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GwZoPhQAF?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1535807362488&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antvis/f2&#34;&gt;F2&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;蚂蚁金服的移动图表库 F2 开源了！支付宝钱包和很多图表，都是用它做的&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/antvis/f2.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GwIoBpchk?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/syt123450/giojs&#34;&gt;Gio.js&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 Three.js 的 web 3D 地球数据可视化的开源组件库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/syt123450/giojs.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GoMk1gOXC?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/antvis/g6&#34;&gt;G6&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;蚂蚁金服数据可视化团队开源的一个关系数据可视化引擎，开发者可以基于 G6 拓展出属于自己的图分析应用或者图编辑器应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/antvis/g6.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gmlu4C1jU?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hotoo/pinyin&#34;&gt;Pinyin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个汉字拼音转换工具，可转换中文字符为拼音，用于汉字注音、排序、检索，并支持词组智能匹配、多音字、繁体字和不同拼音风格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/hotoo/pinyin.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GjiW9l2Kg?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536076349851&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/zeit/hyper&#34;&gt;Hyper&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 JS 写的 Terminal&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/zeit/hyper.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GfAOj6CXn?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nswbmw/node-in-debugging&#34;&gt;node-in-debugging&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一位从事几年 Node.js 开发的大神总结整理的一些调试经验和思路，希望授人以鱼也能授人以渔&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/nswbmw/node-in-debugging.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G5VkrEkjs?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536408354979&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/spritejs/spritejs#server-side-render&#34;&gt;spritejs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;支持使用 node-canvas 在服务端跑，生成 png 或者 gif 文件，还可以直播推流&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/spritejs/spritejs.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G2Og7nzJt?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Chalarangelo/30-seconds-of-code&#34;&gt;30-seconds-of-code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集整理一些实用的 JavaScript 代码片段集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Chalarangelo/30-seconds-of-code.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G2h4x0zUZ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;前端&#34;&gt;前端&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wubaiqing/zaobao&#34;&gt;zaobao&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个以前端技术体系为主要分享的每日时报，分享内容以文章、工具、新闻、视频为主&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wubaiqing/zaobao.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H9A56vDOH?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151247758&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/cssanimation/css-animation-101&#34;&gt;css-animation-101&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一本开源的 CSS 动画书籍，教你如何在 Web 项目中用好 CSS 动画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/cssanimation/css-animation-101.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H5k7bfBMl?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546153302467&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alienzhou/frontend-tech-list&#34;&gt;frontend-tech-list&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份涵盖前端性能优化、自动化测试、工程化与工具的（纯）前端技术清单&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/alienzhou/frontend-tech-list.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H4RPHlEZ7?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546144860292&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/alibaba/ice&#34;&gt;ice&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;让前端开发简单而友好，海量可复用物料，配套桌面工具极速构建前端应用，效率提升 100%&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/alibaba/ice.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H1FRgEdmF?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150696335&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NervJS/taro&#34;&gt;Taro&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套遵循 React 语法规范的 多端开发 解决方案，支持用 React 的开发方式编写一次代码，生成能运行在微信小程序、H5、React Native 等的应用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/NervJS/taro.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GFEL8uEir?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chokcoco/iCSS&#34;&gt;iCSS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;谈谈一些有趣的 CSS 话题，一些 CSS 奇技淫巧，拓宽解决问题的思路，更涉及一些容易忽视或是十分有趣的 CSS 细节&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/chokcoco/iCSS.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GEALFrIiO?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099511720&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gabriellamas/Fancy-Checkout&#34;&gt;Fancy-Checkout&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个很有创意的桌面结账体验动画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/gabriellamas/Fancy-Checkout.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GzBahs4Lf?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658082999&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/nhnent/tui.image-editor&#34;&gt;TOAST&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;使用 HTML5 Canvas 的全功能图像编辑器，简单易用，并且提供了多种滤镜效果&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/nhnent/tui.image-editor.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GqiAZbEhJ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536073899993&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/adam-golab/react-developer-roadmap&#34;&gt;React Developer Roadmap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 2018年 React 开发人员的建议路线图&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/adam-golab/react-developer-roadmap.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gp5b0FgBr?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wxyyxc1992/Web-Series&#34;&gt;Web-Series&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理 Web 开发基础与工程实践的相关博客、示例代码、开源项目、整理成的系列书籍等内容，分为导论篇，基础篇，进阶篇，架构优化篇，React 篇，Vue 篇&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wxyyxc1992/Web-Series.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gmc3A41VN?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/klauscfhq/signale&#34;&gt;Signale&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个优雅漂亮的控制台日志输出工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/klauscfhq/signale.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GieWFoeR3?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/daneden/animate.css&#34;&gt;animate.css&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个拥有 50 多种 CSS3 酷炫动画效果库&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/daneden/animate.css.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GfO6J0j1r?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536162259748&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MoePlayer/DPlayer&#34;&gt;DPlayer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可爱的 HTML5 弹幕视频播放器，可以帮助开发者轻松构建弹幕视频播放&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/MoePlayer/DPlayer.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GdYYLpT2O?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536163304384&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/goodjack/developer-roadmap-chinese&#34;&gt;developer-roadmap-chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GitHub 上拥有 46000+ Star 的 developer-roadmap（2018 年 Web 开发人员的路线图）库的中文翻译版&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/goodjack/developer-roadmap-chinese.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GbHzjwpS8?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tabler/tabler&#34;&gt;Tabler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个建立在 Bootstrap 4 上的免费且开源的 HTML Dashboard UI 工具包&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/tabler/tabler.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GbfhPimLa?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536164463719&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kieranmv95/Front-End-Wizard&#34;&gt;Front-End-Wizard&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心整理前端学习资源、教程、实用代码模块和精选文章集合的资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/kieranmv95/Front-End-Wizard.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G6x2r3Nao?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/atomiks/30-seconds-of-css&#34;&gt;30-seconds-of-css&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份精心收集整理一些实用的 CSS 代码片段集合，让你在 30 秒内理解并使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/atomiks/30-seconds-of-css.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G5t2Xo4PQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536408529007&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;工具&#34;&gt;工具&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/HFO4/Cloudreve&#34;&gt;Cloudreve&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可以让你低成本快速搭建起公私兼备的网盘工具，并且支持快速对接七牛、又拍云、阿里云等多家云存储&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/HFO4/Cloudreve.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H9he6tIpr?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151686501&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/webtorrent/webtorrent&#34;&gt;WebTorrent Desktop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可以直接在线播放视频的 BT 下载客户端，可通过种子文件与磁力链接下载资源，支持 Windows/macOS/Linux 平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/webtorrent/webtorrent.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H8mF7FPzp?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151921220&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MrRio/jsPDF&#34;&gt;jsPDF&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于HTML5 的强大PDF 生成工具，可以直接在客户端生成pdf文件，包括pdf中的图像和一些图形绘制&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/MrRio/jsPDF.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H6RUTzld4?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PeterDing/chord&#34;&gt;Chord&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个现代的桌面音乐播放器，采用了类似 spotify 的 UI，基于 electron 实现，支持歌曲搜索、第三方音乐提供商登录、歌曲保存到本地音乐库等操作&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/PeterDing/chord.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H6eGaDM8H?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152812880&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/XuefengHuang/lianjia-scrawler&#34;&gt;lianjia-scrawler&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个对链家网全国房源爬虫工具，数据支持 MySQL、SQLite 和 PostgreSQL 存储，并将爬取数据进行可视化分析，帮助用户更好的评估房产和预测未来的价格&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/XuefengHuang/lianjia-scrawler.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H5MoGqDQw?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/high-speed-downloader/high-speed-downloader&#34;&gt;high-speed-downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款百度网盘不限速下载器，支持 Windows 和 Mac&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/high-speed-downloader/high-speed-downloader.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H0BRNCg1u?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151077269&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GoogleChromeLabs/ProjectVisBug&#34;&gt;ProjectVisBug&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个允许设计师直接在浏览器对 Web 页进行设计调整的 Chrome 扩展插件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/GoogleChromeLabs/ProjectVisBug.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H2Aqg41vX?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150326772&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/yuliskov/SmartYouTubeTV&#34;&gt;SmartYouTubeTV&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个适用于机顶盒和基于 Android 系统开发的电视的 YouTube 客户端，支持无须 Google 服务运行、4K 播放等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/yuliskov/SmartYouTubeTV.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H0LiickMf?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150937036&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GoogleChromeLabs/squoosh&#34;&gt;Squoosh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 推出的一款在线简单高效的图片压缩工具，支持 JPG、PNG 和 WebP 格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/GoogleChromeLabs/squoosh.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H2GZM5sUi?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150264817&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Caldis/Mos&#34;&gt;Mos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于在 MacOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Caldis/Mos.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H32HK0odE?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/afc163/fanyi&#34;&gt;fanyi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可在命令行中翻译单词的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/afc163/fanyi.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H3EpIulhT?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149900137&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kenshin/simptab&#34;&gt;SimpTab&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个极简的 Chrome 新标签页扩展&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Kenshin/simptab.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GEhUFu3To?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099756699&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/my8100/scrapydweb&#34;&gt;scrapydweb&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于监视和控制 Scrapyd 服务器集群的全功能 Web UI，支持 Scrapy 日志分析和可视化&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/my8100/scrapydweb.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GE8uagKsQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099788911&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Genymobile/scrcpy&#34;&gt;scrcpy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个通过 USB（或TCP / IP）连接到电脑上高清显示和流畅控制 Android 设备的工具，适用于 GNU/Linux、Windows 和 Mac OS，且无需 root&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Genymobile/scrcpy.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GBHEetQBd?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/YiiGuxing/TranslationPlugin&#34;&gt;TranslationPlugin&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个实用翻译插件，兼容除 MPS 外所有产品编译号为 143 以上的 Jetbrains IDE 产品，支持 Google、有道、百度三大翻译引擎&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/YiiGuxing/TranslationPlugin.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GAkNLaTw4?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538657322109&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NaoTu/DesktopNaotu&#34;&gt;DesktopNaotu&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;基于百度脑图的本地化版本的桌面版脑图，帮助你在没有互联网环境的情况下，依然可以使用脑图工具，支持 Mac/Win/Linux 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/NaoTu/DesktopNaotu.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GxTXOq80v?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658872506&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/anvaka/npmgraph.an&#34;&gt;npmgraph.an&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;查看你的包依赖是否失控&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/anvaka/npmgraph.an.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GxMBXf2ZC?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jakubroztocil/httpie&#34;&gt;Httpie&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 HTTP 命令行客户端。使用起来比 curl 更为友好，并支持输出 JSON、语法高亮等特性，为开发者呈现更为直观的 UI，与服务器间的调试体验也更为人性化&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jakubroztocil/httpie.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gxwozuly0?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538659314040&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/proxyee-down-org/proxyee-down&#34;&gt;proxyee-down&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个 Http下载工具，基于 Http 代理，支持多连接分块下载，支持所有操作系统和大部分主流浏览器，支持分段下载和断点下载，对百度云进行破解突破下载速度限制&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/proxyee-down-org/proxyee-down.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gx8Pks7BY?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1535806709543&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dawnlabs/carbon&#34;&gt;carbon&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款可快速给代码生成优雅截图的工具。支持多种不同风格的代码高亮，还能对字体、代码行数、命令行窗口的显示风格进行自定义配置&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/dawnlabs/carbon.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtIWvoyKd?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Molunerfinn/PicGo&#34;&gt;PicGo&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款开源的图片管理工具：PicGo，支持微博图床、七牛图床、腾讯云COS、又拍云等，Win和Mac系统都可以用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Molunerfinn/PicGo.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GqYX7pAX1?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sindresorhus/gifski-app&#34;&gt;Gifski&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款把视频转换为 Gif 图的开源 Mac 小工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/sindresorhus/gifski-app.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GqKStqYM6?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536073735696&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rhysd/vim.wasm&#34;&gt;vim.wasm&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用 WebAssembly 把 vim 移植到了浏览器里边&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/rhysd/vim.wasm.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GpafQiw0t?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TKkk-iOSer/WeChatPlugin-MacOS&#34;&gt;WeChatPlugin-MacOS&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Mac OS 版微信小助手，功能有自动回复、消息防撤回、远程控制、微信多开、会话置底、免认证登录等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/TKkk-iOSer/WeChatPlugin-MacOS.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G97iSeUNw?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536407244827&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gkajs/gka&#34;&gt;gka&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个简单的、高效的帧动画生成工具。可以把多张图片合成成 css/canvas/svg 动画&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/gkajs/gka.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G7XJhEDjE?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lhc70000/iina&#34;&gt;IINA&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款基于 mpv、契合 macOS 设计风格、力求做到最佳用户体验、轻便且功能强大的 Mac 视频播放器&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/lhc70000/iina.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G6ebrBhfG?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536408226751&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tipsy/profile-summary-for-github&#34;&gt;github-profile-summary&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个给自己 GitHub 账号的档案资料进行可视化展示的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/tipsy/profile-summary-for-github.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G1YdxlutY?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536409868975&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Kenshin/simpread&#34;&gt;SimpRead&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个让你瞬间进入沉浸式阅读的 Chrome 扩展，还原阅读的本质，提升你的阅读体验&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Kenshin/simpread.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FFuPUz1mo?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536410663176&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;资料整合&#34;&gt;资料整合&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/guardrailsio/awesome-php-security&#34;&gt;awesome-php-security&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了 PHP 安全相关资源的列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/guardrailsio/awesome-php-security.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H83O8jJbn?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151980738&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/trimstray/the-book-of-secret-knowledge&#34;&gt;the-book-of-secret-knowledge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了适用于 SysOps，DevOps，Pentesters 和安全研究人员的手册、博客、黑客、命令、CLI / Web 工具等学习资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/trimstray/the-book-of-secret-knowledge.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H7UnD7v7Y?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152064414&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/streamich/awesome-styleguides&#34;&gt;awesome-styleguides&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了 UI 设计指南相关的资料列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/streamich/awesome-styleguides.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H5VPbA4Dk?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CyC2018/CS-Notes&#34;&gt;CS-Notes&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份根据计算机经典书籍以及官方技术文档进行总结的学习笔记，涵盖算法、操作系统、网络、数据库等多个技术点&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/CyC2018/CS-Notes.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H5CYbBpw7?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546153114070&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/daviddao/awful-ai&#34;&gt;Awful AI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份当前人工智能应用场景的精选列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/daviddao/awful-ai.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H4pyd5BvA?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149602316&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Solido/awesome-flutter&#34;&gt;awesome-flutter&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了一系列 Flutter 学习资料，含有视频教程、博客文章、各种组件等等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Solido/awesome-flutter.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H3XgItMV7?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149851821&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/bharathgs/Awesome-pytorch-list&#34;&gt;Awesome-pytorch-list&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了在 GitHub 上与 PyTorch 相关的开源库列表，含有学习教程、示例等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/bharathgs/Awesome-pytorch-list.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H2r0zqydv?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150384980&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sdras/awesome-actions&#34;&gt;awesome-actions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集并整理了 GitHub Actions 相关的资料与教程，帮助开发者更好的使用 GitHub Actions 来优化当前工作流，提升开发效率&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/sdras/awesome-actions.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GFvkDCuny?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099234462&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/dipakkr/A-to-Z-Resources-for-Students&#34;&gt;A-to-Z-Resources-for-Students&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份来自不同开发人员为大学生收集整理的一系列资源，含有学习各种编码资料、各地黑客马拉松和比赛资料、学生福利等资源&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/dipakkr/A-to-Z-Resources-for-Students.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H0srj1xfS?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546098556736&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/apachecn/awesome-algorithm&#34;&gt;awesome-leetcode&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份 Leetcode 题解 (跟随思路一步一步撸出代码) 及经典算法实现&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/apachecn/awesome-algorithm.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GAbnghyls?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/ruanyf/weekly&#34;&gt;weekly&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 @ruanyf 维护的技术周报，每周五更新，周报内容涵盖技术资讯、资源、工具等多个方面&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/ruanyf/weekly.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GEt0Lnxue?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099659055&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/semlinker/awesome-typescript&#34;&gt;awesome-typescript&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了学习 TypeScript 资料集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/semlinker/awesome-typescript.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GzSwgyyjK?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sqlsec/clover&#34;&gt;clover&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理一些黑苹果 Clover 驱动配置文件，笔记本包括: Acer、LG、华为、华硕、小米、惠普、戴尔、机械革命、神舟、联想、雷神等品牌&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/sqlsec/clover.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gwx7lpcUS?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1535884571930&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/byoungd/English-level-up-tips-for-Chinese&#34;&gt;English-level-up-tips-for-Chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了一些如何高效学习英语的小技巧，可能是让你受益匪浅的英语进阶指南&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/byoungd/English-level-up-tips-for-Chinese.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gv0QnrMnQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1535900100646&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/kilimchoi/engineering-blogs&#34;&gt;engineering-blogs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;600多个大牛公司和各大牛的技术blog收集贴（英文）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/kilimchoi/engineering-blogs.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GrxLX37bv?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/slowmist/Knowledge-Base/blob/master/solidity-security-comprehensive-list-of-known-attack-vectors-and-common-anti-patterns-chinese.md&#34;&gt;Knowledge-Base&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由慢雾安全团队翻译的 Solidity安全：已知攻击方法和常见防御模式综合列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/slowmist/Knowledge-Base.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gok2x2bfQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536074793218&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Licoy/A-Joke&#34;&gt;A-Joke&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了网络上有趣的笑话段子列表，目的就是想让你在工作之余还能够笑一笑&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Licoy/A-Joke.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Go1bxlrpA?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536074958636&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sparanoid/chinese-copywriting-guidelines&#34;&gt;chinese-copywriting-guidelines&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;統一中文文案、排版的相關用法，降低團隊成員之間的溝通成本，增強網站氣質&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/sparanoid/chinese-copywriting-guidelines.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GnhWCzJpx?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/DovAmir/awesome-design-patterns&#34;&gt;awesome-design-patterns&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理软件和架构相关的设计模式资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/DovAmir/awesome-design-patterns.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gm2D4xxVS?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/davideuler/architecture.of.internet-product&#34;&gt;architecture.of.internet-product&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理收集各大互联网公司技术架构的 PPT 或者 PDF 文档资料，包含有微信、淘宝、腾讯、阿里、美团点评、百度、微博、Google、Facebook、Amazon、eBay等知名公司&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/davideuler/architecture.of.internet-product.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GeTxKfcQv?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536162707806&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/xingshaocheng/architect-awesome&#34;&gt;architect-awesome&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集的比较全的《后端架构师技术图谱》，内容包含数据结构、算法、操作系统、设计模式、运维、网络、中间件、数据库等多类&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/xingshaocheng/architect-awesome.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GeOQlbFd8?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wowlusitong/awesome-education&#34;&gt;awesome-education&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在GitHub收集了学生可以优惠的软件，学生党福利-收集支持教育优惠的软件与服务&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wowlusitong/awesome-education.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GcQECAdqu?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/serhii-londar/open-source-mac-os-apps&#34;&gt;open-source-mac-os-apps&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了 macOS 上开源的免费的应用列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/serhii-londar/open-source-mac-os-apps.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GcjhiEZpX?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536163914528&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rShetty/awesome-distributed-systems&#34;&gt;awesome-distributed-systems&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;非常棒的分布式系统资源列表&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/rShetty/awesome-distributed-systems.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GaJch2Akg?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/quickappdev/awesome-quickapp&#34;&gt;awesome-quickapp&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集最新最全的快应用开发资源、案例及动态，为快应用开发者提供第一手学习资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/quickappdev/awesome-quickapp.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G9gJnrkMY?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/1c7/chinese-independent-developer&#34;&gt;chinese-independent-developer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个收集了中国独立开发者的项目列表，让大家知道大神们都做了哪些牛逼的项目，借鉴学习一下&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/1c7/chinese-independent-developer.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G83joBxGC?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536407861135&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chiphuyen/stanford-tensorflow-tutorials&#34;&gt;stanford-tensorflow-tutorials&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;斯坦福大学 “深度学习研究 TensorFlow” 的课程示例代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/chiphuyen/stanford-tensorflow-tutorials.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FEJLuqzBf?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536411152937&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TonnyL/Awesome_APIs&#34;&gt;Awesome_APIs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份为开发者收集整理各类型非常好的平台、社区 API 资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/TonnyL/Awesome_APIs.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FEAkZA2J2?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/PharkMillups/beautiful-docs&#34;&gt;beautiful-docs&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集了一些写的很好而且漂亮的文档例子，其中有很多例子值得开发者去借鉴学习，其中还收集了一些生成文档的工具&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/PharkMillups/beautiful-docs.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FDFHXhOtu?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;go&#34;&gt;Go&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/gopl-zh/gopl-zh.github.com&#34;&gt;gopl-zh.github.com&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Go 语言圣经 《The Go Programming Language》 中文版本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/gopl-zh/gopl-zh.github.com.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gz7nNerTQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658270672&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hackstoic/golang-open-source-projects&#34;&gt;golang-open-source-projects&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;为互联网 IT 人打造的中文版 awesome-go ，共精心挑选了 100多 个开源项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/hackstoic/golang-open-source-projects.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GvVpmjhGD?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jesseduffield/lazygit&#34;&gt;lazygit&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用于 Git 命令的极简终端 UI&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jesseduffield/lazygit.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gtzzdpr7t?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/TruthHun/DocHub&#34;&gt;DocHub&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;参考百度文库，使用 Beego（Golang）开发的开源文库系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/TruthHun/DocHub.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GkPd71cUU?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536076335104&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;机器学习&#34;&gt;机器学习&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wb14123/seq2seq-couplet&#34;&gt;seq2seq-couplet&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个有趣的对对联工具，用深度学习对对联&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wb14123/seq2seq-couplet.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H9uVrfUxX?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546151518097&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/tensorspace-team/tensorspace&#34;&gt;TensorSpace&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一套用于构建神经网络 3D 可视化应用的框架&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/tensorspace-team/tensorspace.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H7KX8hVhh?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152120491&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/lllyasviel/style2paints&#34;&gt;style2paints&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一款 AI 驱动的线稿上色工具 ，可根据用户上传的自定义色彩给线稿进行上色&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/lllyasviel/style2paints.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H7iFE3FAB?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152222098&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GokuMohandas/practicalAI&#34;&gt;practicalAI&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份实用的机器学习方法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/GokuMohandas/practicalAI.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H79f9ttzx?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152339375&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/jantic/DeOldify&#34;&gt;DeOldify&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于深度学习对一些老照片自动着色并且修复&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/jantic/DeOldify.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H1PhLbk7H?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150564375&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/scutan90/DeepLearning-500-questions&#34;&gt;DeepLearning-500-questions&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;深度学习500问，以问答形式对常用的概率知识、线性代数、机器学习、深度学习、计算机视觉等热点问题进行阐述&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/scutan90/DeepLearning-500-questions.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GFm6k5Juz?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099286856&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MLEveryday/100-Days-Of-ML-Code&#34;&gt;100-Days-Of-ML-Code&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份机器学习 100天 中文版教程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/MLEveryday/100-Days-Of-ML-Code.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GxKxjy684?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/NVIDIA/vid2vid&#34;&gt;Vid2vid&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 NVIDIA 团队开源的一个实现了用于高分辨率照片级真实视频到视频转换的方法，支持语义标签贴图转换为照片般逼真的视频、合成人们从边缘地图谈话、以及从姿势转换成人体&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/NVIDIA/vid2vid.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GvCX8entj?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/google/guetzli&#34;&gt;Guetzli&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 开源的一个针对数码图像和网页图像的 JPEG 编码器，相比由 libjpeg 生成的同等质量的图像还要小 20~30%&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/google/guetzli.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G4RkYfkkQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;vue--react&#34;&gt;Vue / React&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/madhavanmalolan/awesome-reactnative-ui&#34;&gt;awesome-reactnative-ui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;收集了不少有用的 React Native UI 组件，每周一更&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/madhavanmalolan/awesome-reactnative-ui.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GyeodFHYk?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658679650&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/sunzongzheng/music&#34;&gt;music&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个跨平台音乐播放器，可搜网易云音乐、QQ音乐、虾米音乐，并且支持QQ登录，云歌单等&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/sunzongzheng/music.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtDZUp3kr?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/crazycodeboy/GitHubPopular/&#34;&gt;GitHub Popular&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用来查看 GitHub 最受欢迎与最热项目的 App,它基于 React Native 支持 Android 和 iOS 双平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/crazycodeboy/GitHubPopular.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GdngMk244?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536163749696&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;区块链&#34;&gt;区块链&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wecodexyz/awesome-blockchain-articles&#34;&gt;awesome-blockchain-articles&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理了一些关于区块链科普以及学习的文章集合&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wecodexyz/awesome-blockchain-articles.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G9q9ShgNh?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536407085865&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chaozh/awesome-blockchain-cn&#34;&gt;awesome-blockchain&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集所有区块链(BlockChain) 技术开发相关资料，包括 Fabric 和 Ethereum 开发资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/chaozh/awesome-blockchain-cn.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G5jCsbiwT?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536408681972&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/district0x/ethlance&#34;&gt;ethlance&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个有实际意义的 Dapp了 ethlance.com 基于区块链的自由职业平台&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/district0x/ethlance.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G2YAE3rnA?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/coinpride/CryptoList&#34;&gt;CryptoList&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份收集整理一些有关区块链和加密货币的资料&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/coinpride/CryptoList.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FET7V9N0Z?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;面试&#34;&gt;面试&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/AweiLoveAndroid/CommonDevKnowledge&#34;&gt;CommonDevKnowledge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;史上最全的 BAT 大厂 Android 面试题汇集，以及常用的 Android 开发的一些技能点，冷门知识点汇总，开发中遇到的坑汇总等干货&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/AweiLoveAndroid/CommonDevKnowledge.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GDZ3G3z7S?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099870447&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/imhuay/Algorithm_Interview_Notes-Chinese&#34;&gt;Algorithm_Interview_Notes-Chinese&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;2018/2019/校招/春招/秋招/算法/机器学习(Machine Learning)/深度学习(Deep Learning)/自然语言处理(NLP)/C/C++/Python/面试笔记&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/imhuay/Algorithm_Interview_Notes-Chinese.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GBydJnqZ0?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/InterviewMap/CS-Interview-Knowledge-Map&#34;&gt;InterviewMap&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份打造最好的面试图谱，图谱涉及的知识点有基础，有深入，也有源码解析，内容也不仅仅局限于前端&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/InterviewMap/CS-Interview-Knowledge-Map.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gq9auCovE?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536074293264&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/taizilongxu/interview_python&#34;&gt;interview_python&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;关于 Python 的面试题&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/taizilongxu/interview_python.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GuyElgGw1?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/resumejob/awesome-resume&#34;&gt;awesome-resume&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由 ResumeJob 整理出来的一份程序员简历常用例句&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/resumejob/awesome-resume.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gng3345Co?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536075425098&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/CyC2018/CS-Notes&#34;&gt;Interview-Notebook&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份技术面试需要掌握的基础知识与资料整理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/CyC2018/CS-Notes.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gau9llCSC?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536164632875&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;小程序&#34;&gt;小程序&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/getive/huahui&#34;&gt;huahui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;『中国程序员常读错的英文单词的 App』- 微信小程序版本&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/getive/huahui.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gg73pf7U5?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/aben1188/awesome-wepy&#34;&gt;awesome-wepy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了微信小程序组件化开发框架 wepy 开发资源汇总&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/aben1188/awesome-wepy.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G8quhEtO7?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1536407484467&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Tencent/wepy&#34;&gt;WePY&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;腾讯开源的一款让小程序支持组件化开发的框架，通过预编译的手段让开发者可以选择自己喜欢的开发风格去开发小程序&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Tencent/wepy.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G8maojVkQ?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;算法&#34;&gt;算法&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/algorithm-visualizer/algorithm-visualizer&#34;&gt;Algorithm Visualizer&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个交互式的在线可视化学习算法平台，能在可视化区域看到每行代码执行对应的操作，并且有对应的动画呈现，使你更加容易理解算法&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/algorithm-visualizer/algorithm-visualizer.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H6ZOECCyI?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546152461597&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/MisterBooo/LeetCodeAnimation&#34;&gt;LeetCodeAnimation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个用动画的形式呈现解 LeetCode 题目的思路项目&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/MisterBooo/LeetCodeAnimation.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H6xxaoXu1?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;其他&#34;&gt;其他&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;库名&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;Stars&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/valentinxxx/nginxconfig.io&#34;&gt;nginxconfig.io&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个生成 nginx 配置文件的网站 ​​​​&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/valentinxxx/nginxconfig.io.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H9rSv5J2N?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/wizicer/FinancialSupportForOpenSource&#34;&gt;FinancialSupportForOpenSource&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份开源项目挣钱实用手册，教你如何在参与开源项目时挣钱&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/wizicer/FinancialSupportForOpenSource.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H1dzMooAH?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150837275&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/akveo/eva-icons&#34;&gt;Eva Icons&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个开源了超过 480 个精心制作的图标集合库，支持 SVG，Sketch，Web Font 和 Animations&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/akveo/eva-icons.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H1YIgksvj?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150507134&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/k88hudson/git-flight-rules&#34;&gt;git-flight-rules&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份整理了在使用 Git 时出现相关问题后该如何操作解决指南&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/k88hudson/git-flight-rules.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H1wqN2xMm?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150756395&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/GitSquared/edex-ui&#34;&gt;edex-ui&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个类似于科幻电脑界面的全屏桌面应用程序，支持运行在 Window、macOS、Linux 系统&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/GitSquared/edex-ui.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H46HdBXC6?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149700041&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rickbergfalk/sqlpad&#34;&gt;SQLPad&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个可用于编写、运行 SQL 查询并可视化查询结果的 Web 应用。支持 Postgres、MySQL、SQL Server、Crate、Vertica、Presto 和 SAP HANA&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/rickbergfalk/sqlpad.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H3x1EbKMS?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149992918&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/Smilexuhc/Data-Competition-TopSolution&#34;&gt;Data-Competition-TopSolution&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一份数据竞赛 Top 解决方案开源整理&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/Smilexuhc/Data-Competition-TopSolution.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H2hzfqKqf?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546150447686&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/garychowcmu/daizhigev20&#34;&gt;daizhigev20&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;古代文献 txt 大全集，包含佛藏、医藏、史藏等文献&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/garychowcmu/daizhigev20.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H4Ipdp1jP?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149455126&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/pcottle/learnGitBranching&#34;&gt;LearnGitBranching&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个在线可视化交互学习 Git 网站，帮助初级开发人员快速理解 Git 操作流程&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/pcottle/learnGitBranching.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H4yYHCmbB?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546149546134&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/judasn/Linux-Tutorial&#34;&gt;Linux-Tutorial&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;《Java 程序员眼中的 Linux》带动更多的人进入 Linux 世界&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/judasn/Linux-Tutorial.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/H0srj1xfS?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/thx/rap2-delos&#34;&gt;rap2-delos&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;阿里妈妈前端团队出品的开源 Api 接口管理工具 RAP 第二代&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/thx/rap2-delos.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GDnlHgucV?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1546099974945&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/rwv/chinese-dos-games&#34;&gt;chinese-dos-games&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在浏览器中在线游玩中文 DOS 游戏&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/rwv/chinese-dos-games.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gy3ojy4QR?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment#_rnd1538658799072&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/hotvulcan/Thanos.sh&#34;&gt;Thanos.sh&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;开源了个灭霸命令。 可以随机删除您一半的文件&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/hotvulcan/Thanos.sh.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gvw6Xaj3k?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/google/filament&#34;&gt;Filament&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Google 开源的一款可用于 Android、Windows、Linux 和 macOS 系统的物理渲染引擎&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/google/filament.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GtmbqsImb?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/summerblue/laravel-shop&#34;&gt;laravel-shop&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Laravel 电商实战教程的项目代码&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/summerblue/laravel-shop.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GlsDLe12S?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/shimohq/chinese-programmer-wrong-pronunciation&#34;&gt;chinese-programmer-wrong-pronunciation&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;由石墨开发团队整理的一份中国程序员容易发音错误的单词列表，赶紧来看看自己有没有发音错的单词&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/shimohq/chinese-programmer-wrong-pronunciation.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GeK7f2hhu?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/skywind3000/awesome-cheatsheets&#34;&gt;awesome-cheatsheets&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个超级速查表项目 - 编程语言、框架和开发工具的速查表，单个文件包含一切你需要知道的东西&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/skywind3000/awesome-cheatsheets.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G5lvKeSnd?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/chinese-poetry/chinese-poetry&#34;&gt;chinese-poetry&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;最全的中华古典文集数据库，包含 5.5 万首唐诗、26 万首宋诗和 2.1 万首宋词&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/chinese-poetry/chinese-poetry.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G5abY0nv5?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/houshanren/hangzhou_house_knowledge&#34;&gt;hangzhou_house_knowledge&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;将 2017 年买房经历总结出一份买房购房知识&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/houshanren/hangzhou_house_knowledge.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/G4Um0hQ7Z?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://github.com/benweet/stackedit&#34;&gt;stackedi&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个基于 PageDown 所有功能开源的 Markdown 编辑器，被知名网站 Stack Overflow 和其他 Stack Exchange 站点使用&lt;/td&gt;&#xA;          &lt;td&gt;&lt;img src=&#34;https://img.shields.io/github/stars/benweet/stackedit.svg&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FF2yqmpKI?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;非github实用工具--干货&#34;&gt;非GitHub实用工具 / 干货&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;名称&lt;/th&gt;&#xA;          &lt;th&gt;简述&lt;/th&gt;&#xA;          &lt;th&gt;源&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://cookiepedia.co.uk/website/www.jd.com&#34;&gt;Cookiepedia&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一个分析 Cookie 的在线工具，可视化显示某个网站留下的所有 Cookie&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GxMg5bGZW?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://webgradients.com/&#34;&gt;WebGradients&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;提供了大量的渐变配色方案，支持在线预览，可免费下载png/skech/psd格式&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GhMNF6zsz?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mp.weixin.qq.com/s/X9NPFFTHTk62V21o63ceOA&#34;&gt;Python 爬虫的工具列表大全&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Python 爬虫的工具列表大全&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/GdBsq5x6a?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://wordmark.it/&#34;&gt;wordmark&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;自动生成你电脑的字体、和 google 字体的样式给你看&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gc5kV1Z1d?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;http://fontbuddy.co/&#34;&gt;FontBuddy&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Sketch 的插件，可以自动的将选中的 google 字体安装到你的电脑上，还会贴心的帮你 reload 文件让字体生效&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/Gc5kV1Z1d?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&amp;amp;type=comment&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://chrome-extension-downloader.com/&#34;&gt;Chrome Extension Downloader&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;因为网络原因，经常会无法在线安装 Chrome 插件,可以通过此网站来下载&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://weibo.com/5722964389/FFG2ZpSwM?from=page_1005055722964389_profile&amp;amp;wvr=6&amp;amp;mod=weibotime&#34;&gt;&lt;img src=&#34;https://raw.githubusercontent.com/GitHubDaily/GitHubDaily/master/assets/sina_logo.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;</description>
    </item>
    <item>
      <title>「连载十四」实现导出、导入 Excel</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-06-14-excel/</link>
      <pubDate>Thu, 14 Jun 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-06-14-excel/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;导出功能的实现&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在本节，我们将实现对标签信息的导出、导入功能，这是很标配功能了，希望你掌握基础的使用方式。&lt;/p&gt;&#xA;&lt;p&gt;另外在本文我们使用了 2 个 Excel 的包，excelize 最初的 XML 格式文件的一些结构，是通过 tealeg/xlsx 格式文件结构演化而来的，因此特意在此都展示了，你可以根据自己的场景和喜爱去使用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;配置&#34;&gt;配置&lt;/h2&gt;&#xA;&lt;p&gt;首先要指定导出的 Excel 文件的存储路径，在 app.ini 中增加配置：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;[app]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExportSavePath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;export/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修改 setting.go 的 App struct：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;JwtSecret&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;PageSize&lt;/span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;PrefixUrl&lt;/span&gt;       &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;RuntimeRootPath&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ImageSavePath&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ImageMaxSize&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ImageAllowExts&lt;/span&gt; []&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExportSavePath&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;LogSavePath&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;LogSaveName&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;LogFileExt&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;TimeFormat&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这里需增加 ExportSavePath 配置项，另外将先前 ImagePrefixUrl 改为 PrefixUrl 用于支撑两者的 HOST 获取&lt;/p&gt;&#xA;&lt;p&gt;（注意修改 image.go 的 GetImageFullUrl 方法）&lt;/p&gt;&#xA;&lt;h2 id=&#34;pkg&#34;&gt;pkg&lt;/h2&gt;&#xA;&lt;p&gt;新建 pkg/export/excel.go 文件，如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;export&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/pkg/setting&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetExcelFullUrl&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PrefixUrl&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetExcelPath&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetExcelPath&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ExportSavePath&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetExcelFullPath&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AppSetting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RuntimeRootPath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetExcelPath&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里编写了一些常用的方法，以后取值方式如果有变动，直接改内部代码即可，对外不可见&lt;/p&gt;</description>
    </item>
    <item>
      <title>用 Go 来了解一下 Redis 通讯协议</title>
      <link>https://note.lican.site/posts/posts/go/talk/2018-06-07-go-redis-protocol/</link>
      <pubDate>Thu, 07 Jun 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2018-06-07-go-redis-protocol/</guid>
      <description>&lt;p&gt;Go、PHP、Java&amp;hellip; 都有那么多包来支撑你使用 Redis，那你是否有想过&lt;/p&gt;&#xA;&lt;p&gt;有了服务端，有了客户端，他们俩是怎样通讯，又是基于什么通讯协议做出交互的呢？&lt;/p&gt;&#xA;&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;&#xA;&lt;p&gt;基于我们的目的，本文主要讲解和实践 Redis 的通讯协议&lt;/p&gt;&#xA;&lt;p&gt;Redis 的客户端和服务端是通过 TCP 连接来进行数据交互， 服务器默认的端口号为 6379&lt;/p&gt;&#xA;&lt;p&gt;客户端和服务器发送的命令或数据一律以 \r\n （CRLF）结尾（这是一条约定）&lt;/p&gt;&#xA;&lt;h2 id=&#34;协议&#34;&gt;协议&lt;/h2&gt;&#xA;&lt;p&gt;在 Redis 中分为&lt;strong&gt;请求&lt;/strong&gt;和&lt;strong&gt;回复&lt;/strong&gt;，而请求协议又分为新版和旧版，新版统一请求协议在 Redis 1.2 版本中引入，最终在 Redis 2.0 版本成为 Redis 服务器通信的标准方式&lt;/p&gt;&#xA;&lt;p&gt;本文是基于新版协议来实现功能，不建议使用旧版（1.2 挺老旧了）。如下是新协议的各种范例：&lt;/p&gt;&#xA;&lt;h3 id=&#34;请求协议&#34;&gt;请求协议&lt;/h3&gt;&#xA;&lt;p&gt;1、 格式示例&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;*&amp;lt;参数数量&amp;gt; CR LF&#xA;$&amp;lt;参数 1 的字节数量&amp;gt; CR LF&#xA;&amp;lt;参数 1 的数据&amp;gt; CR LF&#xA;...&#xA;$&amp;lt;参数 N 的字节数量&amp;gt; CR LF&#xA;&amp;lt;参数 N 的数据&amp;gt; CR LF&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;在该协议下所有发送至 Redis 服务器的参数都是二进制安全（binary safe）的&lt;/p&gt;&#xA;&lt;p&gt;2、打印示例&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;*3&#xA;$3&#xA;SET&#xA;$5&#xA;mykey&#xA;$7&#xA;myvalue&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3、实际协议值&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;#34;*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这就是 Redis 的请求协议规范，按照范例1编写客户端逻辑，最终发送的是范例3，相信你已经有大致的概念了，Redis 的协议非常的简洁易懂，这也是好上手的原因之一，你可以想想协议这么定义的好处在哪？&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十三」优化你的应用结构和实现Redis缓存</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-06-02-application-redis/</link>
      <pubDate>Sat, 02 Jun 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-06-02-application-redis/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;之前就在想，不少教程或示例的代码设计都是一步到位的（也没问题）&lt;/p&gt;&#xA;&lt;p&gt;但实际操作的读者真的能够理解透彻为什么吗？左思右想，有了今天这一章的内容，我认为实际经历过一遍印象会更加深刻&lt;/p&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在本章节，将介绍以下功能的整理：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;抽离、分层业务逻辑：减轻 routers.go 内的 api 方法的逻辑（但本文暂不分层 repository，这块逻辑还不重）。&lt;/li&gt;&#xA;&lt;li&gt;增加容错性：对 gorm 的错误进行判断。&lt;/li&gt;&#xA;&lt;li&gt;Redis 缓存：对获取数据类的接口增加缓存设置。&lt;/li&gt;&#xA;&lt;li&gt;减少重复冗余代码。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;问题在哪&#34;&gt;问题在哪？&lt;/h2&gt;&#xA;&lt;p&gt;在规划阶段我们发现了一个问题，这是目前的伪代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! &lt;span style=&#34;color:#a6e22e&#34;&gt;HasErrors&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ExistArticleByID&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;DeleteArticle&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SUCCESS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ERROR_NOT_EXIST_ARTICLE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;valid&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Errors&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Message&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusOK&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;H&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:  &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetMsg&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;: make(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果加上规划内的功能逻辑呢，伪代码会变成：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ! &lt;span style=&#34;color:#a6e22e&#34;&gt;HasErrors&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;exists&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ExistArticleByID&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;exists&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;DeleteArticle&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;    &lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SUCCESS&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;    &lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ERROR_XXX&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ERROR_NOT_EXIST_ARTICLE&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    } &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ERROR_XXX&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;range&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;valid&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Errors&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Info&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Key&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Message&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JSON&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StatusOK&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;H&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;code&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;:  &lt;span style=&#34;color:#a6e22e&#34;&gt;e&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetMsg&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;code&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;data&amp;#34;&lt;/span&gt;: make(&lt;span style=&#34;color:#66d9ef&#34;&gt;map&lt;/span&gt;[&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;]&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果缓存的逻辑也加进来，后面慢慢不断的迭代，岂不是会变成如下图一样？&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十二」优化配置结构及实现图片上传</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-05-27-config-upload/</link>
      <pubDate>Sun, 27 May 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-05-27-config-upload/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;重构、调整结构&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;这个应用程序跑了那么久了，越来越大，越来越壮，仿佛我们的产品一样，现在它需要进行小范围重构了，以便于后续的使用，这非常重要。&lt;/p&gt;&#xA;&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;一天，产品经理突然跟你说文章列表，没有封面图，不够美观，！）&amp;amp;￥&lt;em&gt;！&amp;amp;）#&amp;amp;￥&lt;/em&gt;！加一个吧，几分钟的事&lt;/p&gt;&#xA;&lt;p&gt;你打开你的程序，分析了一波写了个清单：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;优化配置结构（因为配置项越来越多）&lt;/li&gt;&#xA;&lt;li&gt;抽离 原 logging 的 File 便于公用（logging、upload 各保有一份并不合适）&lt;/li&gt;&#xA;&lt;li&gt;实现上传图片接口（需限制文件格式、大小）&lt;/li&gt;&#xA;&lt;li&gt;修改文章接口（需支持封面地址参数）&lt;/li&gt;&#xA;&lt;li&gt;增加 blog_article （文章）的数据库字段&lt;/li&gt;&#xA;&lt;li&gt;实现 http.FileServer&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;嗯，你发现要较优的话，需要调整部分的应用程序结构，因为功能越来越多，原本的设计也要跟上节奏&lt;/p&gt;&#xA;&lt;p&gt;也就是在适当的时候，及时优化&lt;/p&gt;&#xA;&lt;h2 id=&#34;优化配置结构&#34;&gt;优化配置结构&lt;/h2&gt;&#xA;&lt;h3 id=&#34;一讲解&#34;&gt;一、讲解&lt;/h3&gt;&#xA;&lt;p&gt;在先前章节中，采用了直接读取 KEY 的方式去存储配置项，而本次需求中，需要增加图片的配置项，总体就有些冗余了&lt;/p&gt;&#xA;&lt;p&gt;我们采用以下解决方法：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;映射结构体：使用 MapTo 来设置配置参数&lt;/li&gt;&#xA;&lt;li&gt;配置统管：所有的配置项统管到 setting 中&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;映射结构体示例&#34;&gt;映射结构体（示例）&lt;/h4&gt;&#xA;&lt;p&gt;在 go-ini 中可以采用 MapTo 的方式来映射结构体，例如：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Server&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;RunMode&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;HttpPort&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadTimeout&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Duration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;WriteTimeout&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Duration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ServerSetting&lt;/span&gt; = &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Server&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Cfg&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ini&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Load&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;conf/app.ini&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatalf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fail to parse &amp;#39;conf/app.ini&amp;#39;: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;Cfg&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Section&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;server&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;MapTo&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;ServerSetting&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatalf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Cfg.MapTo ServerSetting err: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这段代码中，可以注意 ServerSetting 取了地址，为什么 MapTo 必须地址入参呢？&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go 的 fake-useragent 了解一下</title>
      <link>https://note.lican.site/posts/posts/go/talk/2018-05-21-go-fake-useragent/</link>
      <pubDate>Mon, 21 May 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2018-05-21-go-fake-useragent/</guid>
      <description>&lt;p&gt;有的网站会根据 User-Agent 的不同，跳转到不同（PC、M）的站点，也有根据版本的不同给出不一样的提示等等，而 User-Agent 的变化更是爬虫里的基础姿势&lt;/p&gt;&#xA;&lt;p&gt;使用 Go 编写网络爬虫或需要模拟浏览器头（User-Agent）的时候，你是否会觉得很麻烦，获取请求头（Request Headers）的 User-Agent 还得找来找去，挺繁琐。先前我也遇到了这个问题，因此有了这个项目 &lt;a href=&#34;https://github.com/EDDYCJY/fake-useragent&#34;&gt;fake-useragent&lt;/a&gt;，用来解决你我的痛点&lt;/p&gt;&#xA;&lt;p&gt;项目地址：https://github.com/EDDYCJY/fake-useragent&lt;/p&gt;&#xA;&lt;h2 id=&#34;支持&#34;&gt;支持&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;All User-Agent Random&lt;/li&gt;&#xA;&lt;li&gt;Chrome&lt;/li&gt;&#xA;&lt;li&gt;InternetExplorer (IE)&lt;/li&gt;&#xA;&lt;li&gt;Firefox&lt;/li&gt;&#xA;&lt;li&gt;Safari&lt;/li&gt;&#xA;&lt;li&gt;Android&lt;/li&gt;&#xA;&lt;li&gt;MacOSX&lt;/li&gt;&#xA;&lt;li&gt;IOS&lt;/li&gt;&#xA;&lt;li&gt;Linux&lt;/li&gt;&#xA;&lt;li&gt;IPhone&lt;/li&gt;&#xA;&lt;li&gt;IPad&lt;/li&gt;&#xA;&lt;li&gt;Computer&lt;/li&gt;&#xA;&lt;li&gt;Mobile&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;安装&#34;&gt;安装&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get github.com/EDDYCJY/fake-useragent&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;用法&#34;&gt;用法&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/fake-useragent&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#75715e&#34;&gt;// 推荐使用&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;random&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Random&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Random: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;random&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;chrome&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Chrome&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Chrome: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;chrome&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;internetExplorer&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;InternetExplorer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;IE: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;internetExplorer&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;firefox&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Firefox&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Firefox: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;firefox&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;safari&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Safari&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Safari: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;safari&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Android&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Android: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;android&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;macOSX&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MacOSX&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;MacOSX: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;macOSX&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ios&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IOS&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;IOS: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ios&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;linux&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Linux&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Linux: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;linux&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;iphone&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IPhone&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;IPhone: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;iphone&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ipad&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IPad&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;IPad: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ipad&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;computer&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Computer&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Computer: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;computer&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mobile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;browser&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Mobile&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Mobile: %s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;mobile&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;定制&#34;&gt;定制&lt;/h3&gt;&#xA;&lt;p&gt;你可以调整抓取数据源的最大页数、时间间隔以及最大超时时间。 如果不填写，则为默认值。&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十一」Cron定时任务</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-04-29-cron/</link>
      <pubDate>Sun, 29 Apr 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-04-29-cron/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;完成定时任务的功能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在实际的应用项目中，定时任务的使用是很常见的。你是否有过 Golang 如何做定时任务的疑问，莫非是轮询，在本文中我们将结合我们的项目讲述 Cron。&lt;/p&gt;&#xA;&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;&#xA;&lt;p&gt;我们将使用 &lt;a href=&#34;https://github.com/robfig/cron&#34;&gt;cron&lt;/a&gt; 这个包，它实现了 cron 规范解析器和任务运行器，简单来讲就是包含了定时任务所需的功能&lt;/p&gt;&#xA;&lt;h3 id=&#34;cron-表达式格式&#34;&gt;Cron 表达式格式&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;字段名&lt;/th&gt;&#xA;          &lt;th&gt;是否必填&lt;/th&gt;&#xA;          &lt;th&gt;允许的值&lt;/th&gt;&#xA;          &lt;th&gt;允许的特殊字符&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;秒（Seconds）&lt;/td&gt;&#xA;          &lt;td&gt;Yes&lt;/td&gt;&#xA;          &lt;td&gt;0-59&lt;/td&gt;&#xA;          &lt;td&gt;* / , -&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;分（Minutes）&lt;/td&gt;&#xA;          &lt;td&gt;Yes&lt;/td&gt;&#xA;          &lt;td&gt;0-59&lt;/td&gt;&#xA;          &lt;td&gt;* / , -&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;时（Hours）&lt;/td&gt;&#xA;          &lt;td&gt;Yes&lt;/td&gt;&#xA;          &lt;td&gt;0-23&lt;/td&gt;&#xA;          &lt;td&gt;* / , -&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;一个月中的某天（Day of month）&lt;/td&gt;&#xA;          &lt;td&gt;Yes&lt;/td&gt;&#xA;          &lt;td&gt;1-31&lt;/td&gt;&#xA;          &lt;td&gt;* / , - ?&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;月（Month）&lt;/td&gt;&#xA;          &lt;td&gt;Yes&lt;/td&gt;&#xA;          &lt;td&gt;1-12 or JAN-DEC&lt;/td&gt;&#xA;          &lt;td&gt;* / , -&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;星期几（Day of week）&lt;/td&gt;&#xA;          &lt;td&gt;Yes&lt;/td&gt;&#xA;          &lt;td&gt;0-6 or SUN-SAT&lt;/td&gt;&#xA;          &lt;td&gt;* / , - ?&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Cron 表达式表示一组时间，使用 6 个空格分隔的字段&lt;/p&gt;</description>
    </item>
    <item>
      <title>了解一下Golang的市场行情</title>
      <link>https://note.lican.site/posts/posts/go/crawler/2018-04-28-go2018/</link>
      <pubDate>Sat, 28 Apr 2018 12:30:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/crawler/2018-04-28-go2018/</guid>
      <description>&lt;p&gt;项目地址：https://github.com/go-crawler/lagou_jobs&lt;/p&gt;&#xA;&lt;p&gt;如果对你有所帮助，欢迎 Star，给文章来波赞，这样可以让更多的人看见  :)&lt;/p&gt;&#xA;&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;&#xA;&lt;p&gt;在工作中 Golang 已是一份子，想让大家了解一下 Golang 的市场行情，也想让更多的人熟悉它。因此主要是展示数据分析的结果&lt;/p&gt;&#xA;&lt;p&gt;目标站点是 &lt;a href=&#34;https://www.lagou.com/&#34;&gt;某招聘网站&lt;/a&gt; 的职位数据抓取和分析，爬取城市分别为 北京、上海、广州、深圳、杭州、成都，再得出一个结论&lt;/p&gt;&#xA;&lt;h3 id=&#34;分析&#34;&gt;分析&lt;/h3&gt;&#xA;&lt;p&gt;首先需要进行页面分析，找到我们的抓取方向&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/04/26/5ae1e28a3412a.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;搜索 golang 关键字，打开页面 F12 就能看到它发送了四个请求，留意 positionAjax.json 这个请求&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/04/26/5ae1efe538791.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们仔细研判这个接口的入参和出参&lt;/p&gt;&#xA;&lt;h3 id=&#34;入参&#34;&gt;入参&lt;/h3&gt;&#xA;&lt;p&gt;1、Query String Param&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;city：请求的城市&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;needAddtionalResult：是否需要补充额外的参数，这里默认 false&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;2、Form Data&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;first：是否首页&lt;/li&gt;&#xA;&lt;li&gt;pn：页码&lt;/li&gt;&#xA;&lt;li&gt;kd：关键字&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;出参&#34;&gt;出参&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/04/26/5ae1f4c9920a9.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;就是它了，从返回结果可得出许多有用的信息&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;companyFullName：公司全称&lt;/li&gt;&#xA;&lt;li&gt;companyLabelList：公司标签&lt;/li&gt;&#xA;&lt;li&gt;companyShortName：公司简称&lt;/li&gt;&#xA;&lt;li&gt;companySize：公司规模&lt;/li&gt;&#xA;&lt;li&gt;education：学历要求&lt;/li&gt;&#xA;&lt;li&gt;financeStage：融资阶段&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;等等~&lt;/p&gt;&#xA;&lt;h3 id=&#34;分页&#34;&gt;分页&lt;/h3&gt;&#xA;&lt;p&gt;在上面两张图中，可以发现在 content 节点中包含 pageNo、pageSize 字段，content.positionResult 节点有 totalCount 字段，可以得知当前是第几页，每页显示多少条，当前的职位总条数&lt;/p&gt;&#xA;&lt;p&gt;需要注意一下，分页的计算是要向上取整的&lt;/p&gt;&#xA;&lt;h2 id=&#34;模拟浏览器头&#34;&gt;模拟浏览器头&lt;/h2&gt;&#xA;&lt;p&gt;User-Agent 可以用 &lt;a href=&#34;https://github.com/EDDYCJY/fake-useragent&#34;&gt;fake-useragent&lt;/a&gt; 这个项目来随机生成 UA 头 😄&lt;/p&gt;&#xA;&lt;h2 id=&#34;数据&#34;&gt;数据&lt;/h2&gt;&#xA;&lt;h3 id=&#34;一分布图&#34;&gt;一、分布图&lt;/h3&gt;&#xA;&lt;p&gt;不同工作、工种，自然也会遍布在不同的工作区域，我们先了解一下各个城市的 Golang 工程师都主要在哪个区上班，心里留个底&lt;/p&gt;&#xA;&lt;h4 id=&#34;北京&#34;&gt;北京&lt;/h4&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/04/27/5ae291859667c.jpeg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载十」定制 GORM Callbacks</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-04-15-gorm-callback/</link>
      <pubDate>Sun, 15 Apr 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-04-15-gorm-callback/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GORM&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;GORM itself is powered by Callbacks, so you could fully customize GORM as you want&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;GORM 本身是由回调驱动的，所以我们可以根据需要完全定制 GORM，以此达到我们的目的，如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;注册一个新的回调&lt;/li&gt;&#xA;&lt;li&gt;删除现有的回调&lt;/li&gt;&#xA;&lt;li&gt;替换现有的回调&lt;/li&gt;&#xA;&lt;li&gt;注册回调的顺序&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在 GORM 中包含以上四类 Callbacks，我们结合项目选用 “替换现有的回调” 来解决一个小痛点。&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;p&gt;在 models 目录下，我们包含 tag.go 和 article.go 两个文件，他们有一个问题，就是 BeforeCreate、BeforeUpdate 重复出现了，那难道 100 个文件，就要写一百次吗？&lt;/p&gt;&#xA;&lt;p&gt;1、tag.go&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/04/14/5ad20efdba409.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;2、article.go&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/04/14/5ad20ebacc4c9.jpg&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;显然这是不可能的，如果先前你已经意识到这个问题，那挺 OK，但没有的话，现在开始就要改&lt;/p&gt;&#xA;&lt;h3 id=&#34;解决&#34;&gt;解决&lt;/h3&gt;&#xA;&lt;p&gt;在这里我们通过 Callbacks 来实现功能，不需要一个个文件去编写&lt;/p&gt;&#xA;&lt;h3 id=&#34;实现-callbacks&#34;&gt;实现 Callbacks&lt;/h3&gt;&#xA;&lt;p&gt;打开 models 目录下的 models.go 文件，实现以下两个方法：&lt;/p&gt;&#xA;&lt;p&gt;1、updateTimeStampForCreateCallback&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// updateTimeStampForCreateCallback will set `CreatedOn`, `ModifiedOn` when creating&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;updateTimeStampForCreateCallback&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gorm&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Scope&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; !&lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;HasError&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;nowTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Now&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;Unix&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;createTimeField&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FieldByName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;CreatedOn&amp;#34;&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;createTimeField&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IsBlank&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;createTimeField&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;nowTime&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;modifyTimeField&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;scope&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FieldByName&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ModifiedOn&amp;#34;&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;modifyTimeField&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IsBlank&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#a6e22e&#34;&gt;modifyTimeField&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Set&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;nowTime&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这段方法中，会完成以下功能&lt;/p&gt;</description>
    </item>
    <item>
      <title>爬取汽车之家 二手车产品库</title>
      <link>https://note.lican.site/posts/posts/go/crawler/2018-04-01-cars/</link>
      <pubDate>Sun, 01 Apr 2018 12:30:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/crawler/2018-04-01-cars/</guid>
      <description>&lt;p&gt;项目地址：https://github.com/go-crawler/car-prices&lt;/p&gt;&#xA;&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;&#xA;&lt;p&gt;最近经常有人在耳边提起汽车之家，也好奇二手车在国内的价格是怎么样的，因此本次的目标站点是 &lt;a href=&#34;https://car.autohome.com.cn/2sc/440399/index.html&#34;&gt;汽车之家&lt;/a&gt; 的二手车产品库&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/30/5abe47f82a01f.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;分析目标源：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;一页共 24 条&lt;/li&gt;&#xA;&lt;li&gt;含分页，但这个老产品库，在 100 页后会存在问题，因此我们爬取 99 页&lt;/li&gt;&#xA;&lt;li&gt;可以获取全部城市&lt;/li&gt;&#xA;&lt;li&gt;共可爬取 19w+ 数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;开始&#34;&gt;开始&lt;/h2&gt;&#xA;&lt;p&gt;爬取步骤&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;获取全部的城市&lt;/li&gt;&#xA;&lt;li&gt;拼装全部城市 URL 入队列&lt;/li&gt;&#xA;&lt;li&gt;解析二手车页面结构&lt;/li&gt;&#xA;&lt;li&gt;下一页 URL 入队列&lt;/li&gt;&#xA;&lt;li&gt;循环拉取所有分页的二手车数据&lt;/li&gt;&#xA;&lt;li&gt;循环拉取队列中城市的二手车数据&lt;/li&gt;&#xA;&lt;li&gt;等待，确定队列中无新的 URL&lt;/li&gt;&#xA;&lt;li&gt;爬取的二手车数据入库&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;获取城市&#34;&gt;获取城市&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/31/5abeff11ef583.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;通过页面查看，可发现在城市筛选区可得到全部的二手车城市列表，但是你仔细查阅代码。会发现它是 JS 加载进来的，城市也统一放在了一个变量中&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/31/5abf056389cf0.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;有两种提取方法&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;分析 JS 变量，提取出来&lt;/li&gt;&#xA;&lt;li&gt;直接将 &lt;code&gt;areaJson&lt;/code&gt; 复制出来作为变量解析&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在这里我们直接将其复制粘贴出来即可，因为这是比较少变动的值&lt;/p&gt;&#xA;&lt;h3 id=&#34;获取分页&#34;&gt;获取分页&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/31/5abf08ec812e2.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;通过分析页面可以得知分页链接是有一定规律的，例如：&lt;code&gt;/2sc/hangzhou/a0_0msdgscncgpi1ltocsp2exb4/&lt;/code&gt;，可以发现 &lt;code&gt;sp%d&lt;/code&gt;，&lt;code&gt;sp&lt;/code&gt; 后面为页码&lt;/p&gt;&#xA;&lt;p&gt;按照常理，可以通过预测所有分页链接，推入队列后 &lt;code&gt;go routine&lt;/code&gt; 一波 即可快速拉取&lt;/p&gt;&#xA;&lt;p&gt;但是在这老产品库存在一个问题，在超过 100 页后，下一页永远是 101 页&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/31/5abf0e1e623ec.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;因此我们采取比较传统的做法，通过拉取下一页的链接去访问，以便适应可能的分页链接改变； 100 页以后的分页展示也很奇怪，先忽视&lt;/p&gt;&#xA;&lt;h3 id=&#34;获取二手车数据&#34;&gt;获取二手车数据&lt;/h3&gt;&#xA;&lt;p&gt;页面结构较为固定，常规的清洗 HTML 即可&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetCars&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;goquery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Document&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;cars&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;QcCar&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;cityName&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetCityName&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.piclist ul li:not(.line)&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Each&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;selection&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;goquery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Selection&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;selection&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.title a&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;price&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;selection&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.detail .detail-r&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.colf8&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;kilometer&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;selection&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.detail .detail-l&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Eq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;selection&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.detail .detail-l&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;p&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Eq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;kilometer&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Join&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;compileNumber&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FindAllString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;kilometer&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Join&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;compileNumber&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FindAllString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TrimSpace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt;), &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;priceS&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strconv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ParseFloat&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;price&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;kilometerS&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strconv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ParseFloat&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;kilometer&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;64&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;yearS&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strconv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Atoi&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;cars&lt;/span&gt; = append(&lt;span style=&#34;color:#a6e22e&#34;&gt;cars&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;QcCar&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;CityName&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;cityName&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Title&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Price&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;priceS&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Kilometer&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;kilometerS&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Year&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;yearS&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;cars&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;数据&#34;&gt;数据&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/31/5abf1d8042196.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「番外」Golang 交叉编译</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-03-26-cgo/</link>
      <pubDate>Mon, 26 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-03-26-cgo/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;跨平台编译&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在 &lt;a href=&#34;https://segmentfault.com/a/1190000013960558&#34;&gt;连载九&lt;/a&gt; 讲解&lt;strong&gt;构建 Scratch 镜像&lt;/strong&gt;时，我们编译可执行文件用了另外一个形式的命令，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o go-gin-example .&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;我想你可能会有疑问，今天本文会针对这块进行讲解。&lt;/p&gt;&#xA;&lt;h2 id=&#34;说明&#34;&gt;说明&lt;/h2&gt;&#xA;&lt;p&gt;我们将讲解命令各个参数的作用，希望你在阅读时，将每一项串联起来，你会发现这就是&lt;strong&gt;交叉编译相关的小知识&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;也就是 &lt;code&gt;Golang&lt;/code&gt; 令人心动的特性之一&lt;strong&gt;跨平台编译&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;一cgo_enabled&#34;&gt;一、CGO_ENABLED&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;作用：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;用于标识（声明） &lt;code&gt;cgo&lt;/code&gt; 工具是否可用&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;意义：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;存在交叉编译的情况时，&lt;code&gt;cgo&lt;/code&gt; 工具是不可用的。在标准 go 命令的上下文环境中，交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同，或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;小结：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;结合案例来说，我们是在宿主机编译的可执行文件，而在 &lt;code&gt;Scratch&lt;/code&gt; 镜像运行的可执行文件；显然两者的计算机架构、运行环境标识你无法确定它是否一致（毕竟构建的 &lt;code&gt;docker&lt;/code&gt; 镜像还可以给他人使用），那么我们就要进行交叉编译，而交叉编译不支持 &lt;code&gt;cgo&lt;/code&gt;，因此这里要禁用掉它&lt;/p&gt;&#xA;&lt;p&gt;关闭 &lt;code&gt;cgo&lt;/code&gt; 后，在构建过程中会忽略 &lt;code&gt;cgo&lt;/code&gt; 并静态链接所有的依赖库，而开启 &lt;code&gt;cgo&lt;/code&gt; 后，方式将转为动态链接&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;补充：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;golang&lt;/code&gt; 是默认开启 &lt;code&gt;cgo&lt;/code&gt; 工具的，可执行 &lt;code&gt;go env&lt;/code&gt; 命令查看&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go env&#xA;GOARCH=&amp;#34;amd64&amp;#34;&#xA;GOBIN=&amp;#34;&amp;#34;&#xA;GOCACHE=&amp;#34;/root/.cache/go-build&amp;#34;&#xA;GOEXE=&amp;#34;&amp;#34;&#xA;GOHOSTARCH=&amp;#34;amd64&amp;#34;&#xA;GOHOSTOS=&amp;#34;linux&amp;#34;&#xA;GOOS=&amp;#34;linux&amp;#34;&#xA;...&#xA;GCCGO=&amp;#34;gccgo&amp;#34;&#xA;CC=&amp;#34;gcc&amp;#34;&#xA;CXX=&amp;#34;g++&amp;#34;&#xA;CGO_ENABLED=&amp;#34;1&amp;#34;&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;二goos&#34;&gt;二、GOOS&lt;/h3&gt;&#xA;&lt;p&gt;用于标识（声明）程序构建环境的目标操作系统&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载九」将Golang应用部署到Docker</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-03-24-golang-docker/</link>
      <pubDate>Sat, 24 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-03-24-golang-docker/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go + Docker&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;将我们的 &lt;code&gt;go-gin-example&lt;/code&gt; 应用部署到一个 Docker 里，你需要先准备好如下东西：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;你需要安装好 &lt;code&gt;docker&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;li&gt;如果上外网比较吃力，需要配好镜像源。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;docker&#34;&gt;Docker&lt;/h2&gt;&#xA;&lt;p&gt;在这里简单介绍下 Docker，建议深入学习&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://timgsa.baidu.com/timg?image&amp;amp;quality=80&amp;amp;size=b9999_10000&amp;amp;sec=1521800047226&amp;amp;di=28b2764fccca8a943aea7d79ad8aed98&amp;amp;imgtype=0&amp;amp;src=http%3A%2F%2Fwww.cww.net.cn%2FupLoadFile%2F2014%2F6%2F13%2F201461382247734.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Docker 是一个开源的轻量级容器技术，让开发者可以打包他们的应用以及应用运行的上下文环境到一个可移植的镜像中，然后发布到任何支持 Docker 的系统上运行。 通过容器技术，在几乎没有性能开销的情况下，Docker 为应用提供了一个隔离运行环境&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;简化配置&lt;/li&gt;&#xA;&lt;li&gt;代码流水线管理&lt;/li&gt;&#xA;&lt;li&gt;提高开发效率&lt;/li&gt;&#xA;&lt;li&gt;隔离应用&lt;/li&gt;&#xA;&lt;li&gt;快速、持续部署&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;接下来我们正式开始对项目进行 &lt;code&gt;docker&lt;/code&gt; 的所需处理和编写，每一个大标题为步骤大纲&lt;/p&gt;&#xA;&lt;h2 id=&#34;golang&#34;&gt;Golang&lt;/h2&gt;&#xA;&lt;h3 id=&#34;一编写-dockerfile&#34;&gt;一、编写 Dockerfile&lt;/h3&gt;&#xA;&lt;p&gt;在 &lt;code&gt;go-gin-example&lt;/code&gt; 项目根目录创建 Dockerfile 文件，写入内容&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;FROM golang:latest&#xA;&#xA;ENV GOPROXY https://goproxy.cn,direct&#xA;WORKDIR $GOPATH/src/github.com/EDDYCJY/go-gin-example&#xA;COPY . $GOPATH/src/github.com/EDDYCJY/go-gin-example&#xA;RUN go build .&#xA;&#xA;EXPOSE 8000&#xA;ENTRYPOINT [&amp;#34;./go-gin-example&amp;#34;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;作用&#34;&gt;作用&lt;/h4&gt;&#xA;&lt;p&gt;&lt;code&gt;golang:latest&lt;/code&gt; 镜像为基础镜像，将工作目录设置为 &lt;code&gt;$GOPATH/src/go-gin-example&lt;/code&gt;，并将当前上下文目录的内容复制到 &lt;code&gt;$GOPATH/src/go-gin-example&lt;/code&gt; 中&lt;/p&gt;&#xA;&lt;p&gt;在进行 &lt;code&gt;go build&lt;/code&gt; 编译完毕后，将容器启动程序设置为 &lt;code&gt;./go-gin-example&lt;/code&gt;，也就是我们所编译的可执行文件&lt;/p&gt;&#xA;&lt;p&gt;注意 &lt;code&gt;go-gin-example&lt;/code&gt; 在 &lt;code&gt;docker&lt;/code&gt; 容器里编译，并没有在宿主机现场编译&lt;/p&gt;</description>
    </item>
    <item>
      <title>爬取豆瓣电影 Top250</title>
      <link>https://note.lican.site/posts/posts/go/crawler/2018-03-21-douban-top250/</link>
      <pubDate>Wed, 21 Mar 2018 12:30:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/crawler/2018-03-21-douban-top250/</guid>
      <description>&lt;p&gt;爬虫是标配了，看数据那一刻很有趣。第一个就从最最最简单最基础的爬虫开始写起吧！&lt;/p&gt;&#xA;&lt;p&gt;项目地址：https://github.com/go-crawler/douban-movie&lt;/p&gt;&#xA;&lt;h2 id=&#34;目标&#34;&gt;目标&lt;/h2&gt;&#xA;&lt;p&gt;我们的目标站点是 &lt;a href=&#34;https://movie.douban.com/top250&#34;&gt;豆瓣电影 Top250&lt;/a&gt;，估计大家都很眼熟了&lt;/p&gt;&#xA;&lt;p&gt;本次爬取 8 个字段，用于简单的概括分析。具体的字段如下：&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/20/5ab11596b8810.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;简单的分析一下目标源&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;一页共 25 条&lt;/li&gt;&#xA;&lt;li&gt;含分页（共 10 页）且分页规则是正常的&lt;/li&gt;&#xA;&lt;li&gt;每一项的数据字段排序都是规则且不变&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;开始&#34;&gt;开始&lt;/h2&gt;&#xA;&lt;p&gt;由于量不大，我们的爬取步骤如下&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;分析页面，获取所有的分页&lt;/li&gt;&#xA;&lt;li&gt;分析页面，循环爬取所有页面的电影信息&lt;/li&gt;&#xA;&lt;li&gt;爬取的电影信息入库&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get -u github.com/PuerkitoBio/goquery&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;运行&#34;&gt;运行&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go run main.go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;代码片段&#34;&gt;代码片段&lt;/h3&gt;&#xA;&lt;h4 id=&#34;1获取所有分页&#34;&gt;1、获取所有分页&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ParsePages&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;goquery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Document&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;Page&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt; = append(&lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Page&lt;/span&gt;{&lt;span style=&#34;color:#a6e22e&#34;&gt;Page&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Url&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#content &amp;gt; div &amp;gt; div.article &amp;gt; div.paginator &amp;gt; a&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Each&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;goquery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Selection&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strconv&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Atoi&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Attr&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;href&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt; = append(&lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Page&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Page&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;page&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Url&lt;/span&gt;:  &lt;span style=&#34;color:#a6e22e&#34;&gt;url&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;pages&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;2分析豆瓣电影信息&#34;&gt;2、分析豆瓣电影信息&lt;/h4&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ParseMovies&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;goquery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Document&lt;/span&gt;) (&lt;span style=&#34;color:#a6e22e&#34;&gt;movies&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;Movie&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;doc&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;#content &amp;gt; div &amp;gt; div.article &amp;gt; ol &amp;gt; li&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Each&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;goquery&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Selection&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;title&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.hd a span&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Eq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;movieDesc&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Split&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;DescInfo&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;], &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;year&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TrimSpace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;movieDesc&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;area&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TrimSpace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;movieDesc&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;tag&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TrimSpace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;movieDesc&lt;/span&gt;[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;star&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.bd .star .rating_num&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;comment&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;TrimSpace&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.bd .star span&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Eq&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;compile&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;regexp&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MustCompile&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[0-9]&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;comment&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;strings&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Join&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;compile&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;FindAllString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;comment&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;), &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;quote&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;s&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Find&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;.quote .inq&amp;#34;&lt;/span&gt;).&lt;span style=&#34;color:#a6e22e&#34;&gt;Text&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;i: %d, movie: %v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;i&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;movie&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;movies&lt;/span&gt; = append(&lt;span style=&#34;color:#a6e22e&#34;&gt;movies&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;movie&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;movies&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;数据&#34;&gt;数据&lt;/h3&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://i.loli.net/2018/03/21/5ab1309594741.png&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载八」为它加上Swagger</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-03-18-swagger/</link>
      <pubDate>Sun, 18 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-03-18-swagger/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Swagger&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;一个好的 &lt;code&gt;API&#39;s&lt;/code&gt;，必然离不开一个好的&lt;code&gt;API&lt;/code&gt;文档，如果要开发纯手写 &lt;code&gt;API&lt;/code&gt; 文档，不存在的（很难持续维护），因此我们要自动生成接口文档。&lt;/p&gt;&#xA;&lt;h2 id=&#34;安装-swag&#34;&gt;安装 swag&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get -u github.com/swaggo/swag/cmd/swag@v1.6.5&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;若 &lt;code&gt;$GOROOT/bin&lt;/code&gt; 没有加入&lt;code&gt;$PATH&lt;/code&gt;中，你需要执行将其可执行文件移动到&lt;code&gt;$GOBIN&lt;/code&gt;下&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mv $GOPATH/bin/swag /usr/local/go/bin&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;验证是否安装成功&#34;&gt;验证是否安装成功&lt;/h3&gt;&#xA;&lt;p&gt;检查 $GOBIN 下是否有 swag 文件，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ swag -v&#xA;swag version v1.6.5&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;安装-gin-swagger&#34;&gt;安装 gin-swagger&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go get -u github.com/swaggo/gin-swagger@v1.2.0 &#xA;$ go get -u github.com/swaggo/files&#xA;$ go get -u github.com/alecthomas/template&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;注：若无科学上网，请务必配置 Go modules proxy。&lt;/p&gt;&#xA;&lt;h2 id=&#34;初始化&#34;&gt;初始化&lt;/h2&gt;&#xA;&lt;h3 id=&#34;编写-api-注释&#34;&gt;编写 API 注释&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;Swagger&lt;/code&gt; 中需要将相应的注释或注解编写到方法上，再利用生成器自动生成说明文件&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;gin-swagger&lt;/code&gt; 给出的范例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Summary Add a new pet to the store&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Description get string by ID&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Accept  json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Produce  json&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Param   some_id     path    int     true        &amp;#34;Some ID&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Success 200 {string} string&#x9;&amp;#34;ok&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Failure 400 {object} web.APIError &amp;#34;We need ID!!&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Failure 404 {object} web.APIError &amp;#34;Can not find ID&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;// @Router /testapi/get-string-by-int/{some_id} [get]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们可以参照 &lt;code&gt;Swagger&lt;/code&gt; 的注解规范和范例去编写&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载七」优雅的重启服务</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-03-15-reload-http/</link>
      <pubDate>Thu, 15 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-03-15-reload-http/</guid>
      <description>&lt;h2 id=&#34;知识点&#34;&gt;知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;信号量的了解。&lt;/li&gt;&#xA;&lt;li&gt;应用热更新。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在前面编写案例代码时，我相信你会想到，每次更新完代码，更新完配置文件后，就直接这么 &lt;code&gt;ctrl+c&lt;/code&gt; 真的没问题吗，&lt;code&gt;ctrl+c&lt;/code&gt;到底做了些什么事情呢？&lt;/p&gt;&#xA;&lt;p&gt;在这一节中我们简单讲述 &lt;code&gt;ctrl+c&lt;/code&gt; 背后的&lt;strong&gt;信号&lt;/strong&gt;以及如何在&lt;code&gt;Gin&lt;/code&gt;中&lt;strong&gt;优雅的重启服务&lt;/strong&gt;，也就是对 &lt;code&gt;HTTP&lt;/code&gt; 服务进行热更新。&lt;/p&gt;&#xA;&lt;h2 id=&#34;ctrl--c&#34;&gt;ctrl + c&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;内核在某些情况下发送信号，比如在进程往一个已经关闭的管道写数据时会产生&lt;code&gt;SIGPIPE&lt;/code&gt;信号&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;在终端执行特定的组合键可以使系统发送特定的信号给此进程，完成一系列的动作&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;命令&lt;/th&gt;&#xA;          &lt;th&gt;信号&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ctrl + c&lt;/td&gt;&#xA;          &lt;td&gt;SIGINT&lt;/td&gt;&#xA;          &lt;td&gt;强制进程结束&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ctrl + z&lt;/td&gt;&#xA;          &lt;td&gt;SIGTSTP&lt;/td&gt;&#xA;          &lt;td&gt;任务中断，进程挂起&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ctrl + \&lt;/td&gt;&#xA;          &lt;td&gt;SIGQUIT&lt;/td&gt;&#xA;          &lt;td&gt;进程结束 和 &lt;code&gt;dump core&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ctrl + d&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;EOF&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;SIGHUP&lt;/td&gt;&#xA;          &lt;td&gt;终止收到该信号的进程。若程序中没有捕捉该信号，当收到该信号时，进程就会退出（常用于 重启、重新加载进程）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;因此在我们执行&lt;code&gt;ctrl + c&lt;/code&gt;关闭&lt;code&gt;gin&lt;/code&gt;服务端时，&lt;strong&gt;会强制进程结束，导致正在访问的用户等出现问题&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;常见的 &lt;code&gt;kill -9 pid&lt;/code&gt; 会发送 &lt;code&gt;SIGKILL&lt;/code&gt; 信号给进程，也是类似的结果&lt;/p&gt;&#xA;&lt;h3 id=&#34;信号&#34;&gt;信号&lt;/h3&gt;&#xA;&lt;p&gt;本段中反复出现&lt;strong&gt;信号&lt;/strong&gt;是什么呢？&lt;/p&gt;&#xA;&lt;p&gt;信号是 &lt;code&gt;Unix&lt;/code&gt; 、类 &lt;code&gt;Unix&lt;/code&gt; 以及其他 &lt;code&gt;POSIX&lt;/code&gt; 兼容的操作系统中进程间通讯的一种有限制的方式&lt;/p&gt;&#xA;&lt;p&gt;它是一种异步的通知机制，用来提醒进程一个事件（硬件异常、程序执行异常、外部发出信号）已经发生。当一个信号发送给一个进程，操作系统中断了进程正常的控制流程。此时，任何非原子操作都将被中断。如果进程定义了信号的处理函数，那么它将被执行，否则就执行默认的处理函数&lt;/p&gt;&#xA;&lt;h3 id=&#34;所有信号&#34;&gt;所有信号&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ kill -l&#xA; 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP&#xA; 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1&#xA;11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM&#xA;16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP&#xA;21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ&#xA;26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR&#xA;31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3&#xA;38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8&#xA;43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13&#xA;48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12&#xA;53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7&#xA;58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2&#xA;63) SIGRTMAX-1  64) SIGRTMAX&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;怎样算优雅&#34;&gt;怎样算优雅&lt;/h2&gt;&#xA;&lt;h3 id=&#34;目的&#34;&gt;目的&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;不关闭现有连接（正在运行中的程序）&lt;/li&gt;&#xA;&lt;li&gt;新的进程启动并替代旧进程&lt;/li&gt;&#xA;&lt;li&gt;新的进程接管新的连接&lt;/li&gt;&#xA;&lt;li&gt;连接要随时响应用户的请求，当用户仍在请求旧进程时要保持连接，新用户应请求新进程，不可以出现拒绝请求的情况&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;流程&#34;&gt;流程&lt;/h3&gt;&#xA;&lt;p&gt;1、替换可执行文件或修改配置文件&lt;/p&gt;</description>
    </item>
    <item>
      <title>聊一聊，Go 的相对路径问题</title>
      <link>https://note.lican.site/posts/posts/go/talk/2018-03-13-golang-relatively-path/</link>
      <pubDate>Tue, 13 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/talk/2018-03-13-golang-relatively-path/</guid>
      <description>&lt;h2 id=&#34;前言&#34;&gt;前言&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;Golang&lt;/code&gt; 中存在各种运行方式，如何&lt;strong&gt;正确的引用文件路径&lt;/strong&gt;成为一个值得商议的问题&lt;/p&gt;&#xA;&lt;p&gt;以 &lt;a href=&#34;https://github.com/EDDYCJY/go-gin-example&#34;&gt;gin-blog&lt;/a&gt; 为例，当我们在项目根目录下，执行 &lt;code&gt;go run main.go&lt;/code&gt; 时能够正常运行（&lt;code&gt;go build&lt;/code&gt;也是正常的）&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[$ gin-blog]# go run main.go&#xA;[GIN-debug] [WARNING] Running in &amp;#34;debug&amp;#34; mode. Switch to &amp;#34;release&amp;#34; mode in production.&#xA; - using env:    export GIN_MODE=release&#xA; - using code:    gin.SetMode(gin.ReleaseMode)&#xA;&#xA;[GIN-debug] GET    /api/v1/tags              --&amp;gt; gin-blog/routers/api/v1.GetTags (3 handlers)&#xA;...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;那么在不同的目录层级下，不同的方式运行，又是怎么样的呢，带着我们的疑问去学习&lt;/p&gt;&#xA;&lt;h2 id=&#34;问题&#34;&gt;问题&lt;/h2&gt;&#xA;&lt;p&gt;1、 go run&#xA;我们上移目录层级，到 &lt;code&gt;$GOPATH/src&lt;/code&gt; 下，执行 &lt;code&gt;go run gin-blog/main.go&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[$ src]# go run gin-blog/main.go&#xA;2018/03/12 16:06:13 Fail to parse &amp;#39;conf/app.ini&amp;#39;: open conf/app.ini: no such file or directory&#xA;exit status 1&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2、 go build，执行 &lt;code&gt;./gin-blog/main&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载三」Swagger了解一下</title>
      <link>https://note.lican.site/posts/posts/go/grpc-gateway/2018-03-04-swagger/</link>
      <pubDate>Sun, 04 Mar 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc-gateway/2018-03-04-swagger/</guid>
      <description>&lt;p&gt;在&lt;a href=&#34;https://segmentfault.com/a/1190000013408485&#34;&gt;上一节&lt;/a&gt;，我们完成了一个服务端同时支持&lt;code&gt;Rpc&lt;/code&gt;和&lt;code&gt;RESTful Api&lt;/code&gt;后，你以为自己大功告成了，结果突然发现要写&lt;code&gt;Api&lt;/code&gt;文档和前端同事对接= = 。。。&lt;/p&gt;&#xA;&lt;p&gt;你寻思有没有什么组件能够自动化生成&lt;code&gt;Api&lt;/code&gt;文档来解决这个问题，就在这时你发现了&lt;code&gt;Swagger&lt;/code&gt;，一起了解一下吧！&lt;/p&gt;&#xA;&lt;h2 id=&#34;介绍&#34;&gt;介绍&lt;/h2&gt;&#xA;&lt;h3 id=&#34;swagger&#34;&gt;Swagger&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;Swagger&lt;/code&gt;是全球最大的&lt;code&gt;OpenAPI&lt;/code&gt;规范（OAS）API开发工具框架，支持从设计和文档到测试和部署的整个API生命周期的开发&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;Swagger&lt;/code&gt;是目前最受欢迎的&lt;code&gt;RESTful Api&lt;/code&gt;文档生成工具之一，主要的原因如下&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;跨平台、跨语言的支持&lt;/li&gt;&#xA;&lt;li&gt;强大的社区&lt;/li&gt;&#xA;&lt;li&gt;生态圈 Swagger Tools（&lt;a href=&#34;https://github.com/swagger-api/swagger-editor&#34;&gt;Swagger Editor&lt;/a&gt;、&lt;a href=&#34;https://github.com/swagger-api/swagger-codegen&#34;&gt;Swagger Codegen&lt;/a&gt;、&lt;a href=&#34;https://github.com/swagger-api/swagger-ui&#34;&gt;Swagger UI&lt;/a&gt; &amp;hellip;）&lt;/li&gt;&#xA;&lt;li&gt;强大的控制台&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;同时&lt;code&gt;grpc-gateway&lt;/code&gt;也支持&lt;code&gt;Swagger&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;[image]&lt;/p&gt;&#xA;&lt;h3 id=&#34;openapi规范&#34;&gt;&lt;code&gt;OpenAPI&lt;/code&gt;规范&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;OpenAPI&lt;/code&gt;规范是&lt;code&gt;Linux&lt;/code&gt;基金会的一个项目，试图通过定义一种用来描述API格式或API定义的语言，来规范&lt;code&gt;RESTful&lt;/code&gt;服务开发过程。&lt;code&gt;OpenAPI&lt;/code&gt;规范帮助我们描述一个API的基本信息，比如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;有关该API的一般性描述&lt;/li&gt;&#xA;&lt;li&gt;可用路径（/资源）&lt;/li&gt;&#xA;&lt;li&gt;在每个路径上的可用操作（获取/提交&amp;hellip;）&lt;/li&gt;&#xA;&lt;li&gt;每个操作的输入/输出格式&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;目前V2.0版本的&lt;a href=&#34;https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md&#34;&gt;OpenAPI规范&lt;/a&gt;（也就是SwaggerV2.0规范）已经发布并开源在github上。该文档写的非常好，结构清晰，方便随时查阅。&lt;/p&gt;&#xA;&lt;p&gt;注：&lt;code&gt;OpenAPI&lt;/code&gt;规范的介绍引用自&lt;a href=&#34;https://huangwenchao.gitbooks.io/swagger/content/&#34;&gt;原文&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用&#34;&gt;使用&lt;/h2&gt;&#xA;&lt;h3 id=&#34;生成swagger的说明文件&#34;&gt;生成&lt;code&gt;Swagger&lt;/code&gt;的说明文件&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;第一&lt;/strong&gt;，我们需要检查$GOBIN下是否包含&lt;code&gt;protoc-gen-swagger&lt;/code&gt;可执行文件&lt;/p&gt;&#xA;&lt;p&gt;若不存在则需要执行：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;等待执行完毕后，可在&lt;code&gt;$GOPATH/bin&lt;/code&gt;下发现该执行文件，将其移动到&lt;code&gt;$GOBIN&lt;/code&gt;下即可&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;第二&lt;/strong&gt;，回到&lt;code&gt;$GOPATH/src/grpc-hello-world/proto&lt;/code&gt;下，执行命令&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;protoc -I/usr/local/include -I. -I$GOPATH/src/grpc-hello-world/proto/google/api --swagger_out=logtostderr=true:. ./hello.proto&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;成功后执行&lt;code&gt;ls&lt;/code&gt;即可看到&lt;code&gt;hello.swagger.json&lt;/code&gt;文件&lt;/p&gt;&#xA;&lt;h3 id=&#34;下载swagger-ui文件&#34;&gt;下载&lt;code&gt;Swagger UI&lt;/code&gt;文件&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;Swagger&lt;/code&gt;提供可视化的&lt;code&gt;API&lt;/code&gt;管理平台，就是&lt;a href=&#34;https://github.com/swagger-api/swagger-ui&#34;&gt;Swagger UI&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们将其源码下载下来，并将其&lt;code&gt;dist&lt;/code&gt;目录下的所有文件拷贝到我们项目中的&lt;code&gt;$GOPATH/src/grpc-hello-world/third_party/swagger-ui&lt;/code&gt;去&lt;/p&gt;&#xA;&lt;h3 id=&#34;将swagger-ui转换为go源代码&#34;&gt;将&lt;code&gt;Swagger UI&lt;/code&gt;转换为&lt;code&gt;Go&lt;/code&gt;源代码&lt;/h3&gt;&#xA;&lt;p&gt;在这里我们使用的转换工具是&lt;a href=&#34;https://github.com/jteeuwen/go-bindata&#34;&gt;go-bindata&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;它支持将任何文件转换为可管理的&lt;code&gt;Go&lt;/code&gt;源代码。用于将二进制数据嵌入到&lt;code&gt;Go&lt;/code&gt;程序中。并且在将文件数据转换为原始字节片之前，可以选择压缩文件数据&lt;/p&gt;&#xA;&lt;h4 id=&#34;安装&#34;&gt;安装&lt;/h4&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u github.com/jteeuwen/go-bindata/...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;完成后，将&lt;code&gt;$GOPATH/bin&lt;/code&gt;下的&lt;code&gt;go-bindata&lt;/code&gt;移动到&lt;code&gt;$GOBIN&lt;/code&gt;下&lt;/p&gt;&#xA;&lt;h4 id=&#34;转换&#34;&gt;转换&lt;/h4&gt;&#xA;&lt;p&gt;在项目下新建&lt;code&gt;pkg/ui/data/swagger&lt;/code&gt;目录，回到&lt;code&gt;$GOPATH/src/grpc-hello-world/third_party/swagger-ui&lt;/code&gt;下，执行命令&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go-bindata --nocompress -pkg swagger -o pkg/ui/data/swagger/datafile.go third_party/swagger-ui/...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;检查&#34;&gt;检查&lt;/h4&gt;&#xA;&lt;p&gt;回到&lt;code&gt;pkg/ui/data/swagger&lt;/code&gt;目录，检查是否存在&lt;code&gt;datafile.go&lt;/code&gt;文件&lt;/p&gt;&#xA;&lt;h3 id=&#34;swagger-ui文件服务器对外提供服务&#34;&gt;&lt;code&gt;Swagger UI&lt;/code&gt;文件服务器（对外提供服务）&lt;/h3&gt;&#xA;&lt;p&gt;在这一步，我们需要使用与其配套的&lt;a href=&#34;https://github.com/elazarl/go-bindata-assetfs/&#34;&gt;go-bindata-assetfs&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载二」Hello World</title>
      <link>https://note.lican.site/posts/posts/go/grpc-gateway/2018-02-27-hello-world/</link>
      <pubDate>Tue, 27 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc-gateway/2018-02-27-hello-world/</guid>
      <description>&lt;p&gt;这节将开始编写一个复杂的Hello World，涉及到许多的知识，建议大家认真思考其中的概念&lt;/p&gt;&#xA;&lt;h2 id=&#34;需求&#34;&gt;需求&lt;/h2&gt;&#xA;&lt;p&gt;由于本实践偏向&lt;code&gt;Grpc&lt;/code&gt;+&lt;code&gt;Grpc Gateway&lt;/code&gt;的方面，我们的需求是&lt;strong&gt;同一个服务端支持&lt;code&gt;Rpc&lt;/code&gt;和&lt;code&gt;Restful Api&lt;/code&gt;&lt;/strong&gt;，那么就意味着&lt;code&gt;http2&lt;/code&gt;、&lt;code&gt;TLS&lt;/code&gt;等等的应用，功能方面就是一个服务端能够接受来自&lt;code&gt;grpc&lt;/code&gt;和&lt;code&gt;Restful Api&lt;/code&gt;的请求并响应&lt;/p&gt;&#xA;&lt;h2 id=&#34;一初始化目录&#34;&gt;一、初始化目录&lt;/h2&gt;&#xA;&lt;p&gt;我们先在$GOPATH中新建&lt;code&gt;grpc-hello-world&lt;/code&gt;文件夹，我们项目的初始目录目录如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;grpc-hello-world/&#xA;├── certs&#xA;├── client&#xA;├── cmd&#xA;├── pkg&#xA;├── proto&#xA;│   ├── google&#xA;│   │   └── api&#xA;└── server&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;certs&lt;/code&gt;：证书凭证&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;client&lt;/code&gt;：客户端&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cmd&lt;/code&gt;：命令行&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;pkg&lt;/code&gt;：第三方公共模块&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;proto&lt;/code&gt;：&lt;code&gt;protobuf&lt;/code&gt;的一些相关文件（含&lt;code&gt;.proto&lt;/code&gt;、&lt;code&gt;pb.go&lt;/code&gt;、&lt;code&gt;.pb.gw.go&lt;/code&gt;)，&lt;code&gt;google/api&lt;/code&gt;中用于存放&lt;code&gt;annotations.proto&lt;/code&gt;、&lt;code&gt;http.proto&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;server&lt;/code&gt;：服务端&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;二制作证书&#34;&gt;二、制作证书&lt;/h2&gt;&#xA;&lt;p&gt;在服务端支持&lt;code&gt;Rpc&lt;/code&gt;和&lt;code&gt;Restful Api&lt;/code&gt;，需要用到&lt;code&gt;TLS&lt;/code&gt;，因此我们要先制作证书&lt;/p&gt;&#xA;&lt;p&gt;进入&lt;code&gt;certs&lt;/code&gt;目录，生成&lt;code&gt;TLS&lt;/code&gt;所需的公钥密钥文件&lt;/p&gt;&#xA;&lt;h3 id=&#34;私钥&#34;&gt;私钥&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl genrsa -out server.key 2048&#xA;&#xA;openssl ecparam -genkey -name secp384r1 -out server.key&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;openssl genrsa&lt;/code&gt;：生成&lt;code&gt;RSA&lt;/code&gt;私钥，命令的最后一个参数，将指定生成密钥的位数，如果没有指定，默认512&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;openssl ecparam&lt;/code&gt;：生成&lt;code&gt;ECC&lt;/code&gt;私钥，命令为椭圆曲线密钥参数生成及操作，本文中&lt;code&gt;ECC&lt;/code&gt;曲线选择的是&lt;code&gt;secp384r1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;自签名公钥&#34;&gt;自签名公钥&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;openssl req -new -x509 -sha256 -key server.key -out server.pem -days 3650&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;openssl req&lt;/code&gt;：生成自签名证书，&lt;code&gt;-new&lt;/code&gt;指生成证书请求、&lt;code&gt;-sha256&lt;/code&gt;指使用&lt;code&gt;sha256&lt;/code&gt;加密、&lt;code&gt;-key&lt;/code&gt;指定私钥文件、&lt;code&gt;-x509&lt;/code&gt;指输出证书、&lt;code&gt;-days 3650&lt;/code&gt;为有效期，此后则输入证书拥有者信息&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;填写信息&#34;&gt;填写信息&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Country Name (2 letter code) [XX]:&#xA;State or Province Name (full name) []:&#xA;Locality Name (eg, city) [Default City]:&#xA;Organization Name (eg, company) [Default Company Ltd]:&#xA;Organizational Unit Name (eg, section) []:&#xA;Common Name (eg, your name or your server&amp;#39;s hostname) []:grpc server name&#xA;Email Address []:&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;三proto&#34;&gt;三、&lt;code&gt;proto&lt;/code&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;编写&#34;&gt;编写&lt;/h3&gt;&#xA;&lt;p&gt;1、 &lt;code&gt;google.api&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载一」gRPC介绍与环境安装</title>
      <link>https://note.lican.site/posts/posts/go/grpc-gateway/2018-02-23-install/</link>
      <pubDate>Fri, 23 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/grpc-gateway/2018-02-23-install/</guid>
      <description>&lt;p&gt;假定我们有一个项目需求，希望用&lt;code&gt;Rpc&lt;/code&gt;作为内部&lt;code&gt;API&lt;/code&gt;的通讯，同时也想对外提供&lt;code&gt;Restful Api&lt;/code&gt;，写两套又太繁琐不符合&lt;/p&gt;&#xA;&lt;p&gt;于是我们想到了&lt;code&gt;Grpc&lt;/code&gt;以及&lt;code&gt;Grpc Gateway&lt;/code&gt;，这就是我们所需要的&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://camo.githubusercontent.com/e75a8b46b078a3c1df0ed9966a16c24add9ccb83/68747470733a2f2f646f63732e676f6f676c652e636f6d2f64726177696e67732f642f3132687034435071724e5046686174744c5f63496f4a707446766c41716d35774c513067677149356d6b43672f7075623f773d37343926683d333730&#34; alt=&#34;image&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;准备环节&#34;&gt;准备环节&lt;/h2&gt;&#xA;&lt;p&gt;在正式开始我们的&lt;code&gt;Grpc&lt;/code&gt;+&lt;code&gt;Grpc Gateway&lt;/code&gt;实践前，我们需要先配置好我们的开发环境&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Grpc&lt;/li&gt;&#xA;&lt;li&gt;Protoc Plugin&lt;/li&gt;&#xA;&lt;li&gt;Protocol Buffers&lt;/li&gt;&#xA;&lt;li&gt;Grpc-gateway&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;grpc&#34;&gt;Grpc&lt;/h2&gt;&#xA;&lt;h3 id=&#34;是什么&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;p&gt;Google对&lt;code&gt;Grpc&lt;/code&gt;的定义：&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;A high performance, open-source universal RPC framework&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;也就是&lt;code&gt;Grpc&lt;/code&gt;是一个高性能、开源的通用RPC框架，具有以下特性：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;强大的&lt;code&gt;IDL&lt;/code&gt;，使用&lt;code&gt;Protocol Buffers&lt;/code&gt;作为数据交换的格式，支持&lt;code&gt;v2&lt;/code&gt;、&lt;code&gt;v3&lt;/code&gt;（推荐&lt;code&gt;v3&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;li&gt;跨语言、跨平台，也就是&lt;code&gt;Grpc&lt;/code&gt;支持多种平台和语言&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;支持HTTP2&lt;/strong&gt;，双向传输、多路复用、认证等&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;安装&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;p&gt;1、官方推荐（需科学上网）&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u google.golang.org/grpc&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;2、通过&lt;code&gt;github.com&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;进入到第一个$GOPATH目录（因为&lt;code&gt;go get&lt;/code&gt; 会默认安装在第一个下）下，新建&lt;code&gt;google.golang.org&lt;/code&gt;目录，拉取&lt;code&gt;golang&lt;/code&gt;在&lt;code&gt;github&lt;/code&gt;上的镜像库：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;cd /usr/local/go/path/src   &#xA;&#xA;mkdir google.golang.org&#xA;&#xA;cd google.golang.org/&#xA;&#xA;git clone https://github.com/grpc/grpc-go&#xA;&#xA;mv grpc-go/ grpc/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;目录结构：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;google.golang.org/&#xA;└── grpc&#xA;    ...&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;而在&lt;code&gt;grpc&lt;/code&gt;下有许多常用的包，例如：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gowalker.org/google.golang.org/grpc/metadata&#34;&gt;metadata&lt;/a&gt;：定义了&lt;code&gt;grpc&lt;/code&gt;所支持的元数据结构，包中方法可以对&lt;code&gt;MD&lt;/code&gt;进行获取和处理&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gowalker.org/google.golang.org/grpc/credentials&#34;&gt;credentials&lt;/a&gt;：实现了&lt;code&gt;grpc&lt;/code&gt;所支持的各种认证凭据，封装了客户端对服务端进行身份验证所需要的所有状态，并做出各种断言&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gowalker.org/google.golang.org/grpc/codes&#34;&gt;codes&lt;/a&gt;：定义了&lt;code&gt;grpc&lt;/code&gt;使用的标准错误码，可通用&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;protoc-plugin&#34;&gt;Protoc Plugin&lt;/h2&gt;&#xA;&lt;h3 id=&#34;是什么-1&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;p&gt;编译器插件&lt;/p&gt;&#xA;&lt;h3 id=&#34;安装-1&#34;&gt;安装&lt;/h3&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u github.com/golang/protobuf/protoc-gen-go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;将&lt;code&gt;Protoc Plugin&lt;/code&gt;的可执行文件从$GOPATH中移动到$GOBIN下&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mv /usr/local/go/path/bin/protoc-gen-go /usr/local/go/bin/&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;protocol-buffers-v3&#34;&gt;Protocol Buffers v3&lt;/h2&gt;&#xA;&lt;h3 id=&#34;是什么-2&#34;&gt;是什么&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the &amp;ldquo;old&amp;rdquo; format.&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载六」编写一个简单的文件日志</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-02-15-log/</link>
      <pubDate>Thu, 15 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-02-15-log/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;自定义 log。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在上一节中，我们解决了 API&amp;rsquo;s 可以任意访问的问题，那么我们现在还有一个问题，就是我们的日志，都是输出到控制台上的，这显然对于一个项目来说是不合理的，因此我们这一节简单封装&lt;code&gt;log&lt;/code&gt;库，使其支持简单的文件日志！&lt;/p&gt;&#xA;&lt;h2 id=&#34;新建logging包&#34;&gt;新建&lt;code&gt;logging&lt;/code&gt;包&lt;/h2&gt;&#xA;&lt;p&gt;我们在&lt;code&gt;pkg&lt;/code&gt;下新建&lt;code&gt;logging&lt;/code&gt;目录，新建&lt;code&gt;file.go&lt;/code&gt;和&lt;code&gt;log.go&lt;/code&gt;文件，写入内容：&lt;/p&gt;&#xA;&lt;h3 id=&#34;编写file文件&#34;&gt;编写&lt;code&gt;file&lt;/code&gt;文件&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;1、 file.go：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;logging&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;os&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;fmt&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;LogSavePath&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;runtime/logs/&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;LogSaveName&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;LogFileExt&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;log&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;TimeFormat&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;20060102&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getLogFilePath&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;LogSavePath&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getLogFileFullPath&lt;/span&gt;() &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;prefixPath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getLogFilePath&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;suffixPath&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%s.%s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;LogSaveName&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Now&lt;/span&gt;().&lt;span style=&#34;color:#a6e22e&#34;&gt;Format&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;TimeFormat&lt;/span&gt;), &lt;span style=&#34;color:#a6e22e&#34;&gt;LogFileExt&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Sprintf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s%s&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;prefixPath&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;suffixPath&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;openLogFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filePath&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;File&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Stat&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filePath&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;switch&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IsNotExist&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;mkDir&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;case&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IsPermission&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatalf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Permission :%v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;handle&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;OpenFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;filePath&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_APPEND&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_CREATE&lt;/span&gt; | &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_WRONLY&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0644&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;log&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Fatalf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Fail to OpenFile :%v&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;handle&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;mkDir&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;dir&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;_&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Getwd&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;MkdirAll&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;dir&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getLogFilePath&lt;/span&gt;(), &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ModePerm&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;panic(&lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;os.Stat&lt;/code&gt;：返回文件信息结构描述文件。如果出现错误，会返回&lt;code&gt;*PathError&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PathError&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Op&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Path&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;Err&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;os.IsNotExist&lt;/code&gt;：能够接受&lt;code&gt;ErrNotExist&lt;/code&gt;、&lt;code&gt;syscall&lt;/code&gt;的一些错误，它会返回一个布尔值，能够得知文件不存在或目录不存在&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;os.IsPermission&lt;/code&gt;：能够接受&lt;code&gt;ErrPermission&lt;/code&gt;、&lt;code&gt;syscall&lt;/code&gt;的一些错误，它会返回一个布尔值，能够得知权限是否满足&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;os.OpenFile&lt;/code&gt;：调用文件，支持传入文件名称、指定的模式调用文件、文件权限，返回的文件的方法可以用于 I/O。如果出现错误，则为&lt;code&gt;*PathError&lt;/code&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_RDONLY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_RDONLY&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 以只读模式打开文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_WRONLY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_WRONLY&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 以只写模式打开文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_RDWR&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_RDWR&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;// 以读写模式打开文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;// The remaining values may be or&amp;#39;ed in to control behavior.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_APPEND&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_APPEND&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;// 在写入时将数据追加到文件中&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_CREAT&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 如果不存在，则创建一个新文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_EXCL&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_EXCL&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;// 使用O_CREATE时，文件必须不存在&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_SYNC&lt;/span&gt;   &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_SYNC&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;// 同步IO&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;O_TRUNC&lt;/span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; = &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_TRUNC&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;// 如果可以，打开时&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;os.Getwd&lt;/code&gt;：返回与当前目录对应的根路径名&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;os.MkdirAll&lt;/code&gt;：创建对应的目录以及所需的子目录，若成功则返回&lt;code&gt;nil&lt;/code&gt;，否则返回&lt;code&gt;error&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;os.ModePerm&lt;/code&gt;：&lt;code&gt;const&lt;/code&gt;定义&lt;code&gt;ModePerm FileMode = 0777&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;编写log文件&#34;&gt;编写&lt;code&gt;log&lt;/code&gt;文件&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;2、log.go&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载五」使用 JWT 进行身份校验</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-02-14-jwt/</link>
      <pubDate>Wed, 14 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-02-14-jwt/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;JWT&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;p&gt;在前面几节中，我们已经基本的完成了 API&amp;rsquo;s 的编写，但是，还存在一些非常严重的问题，例如，我们现在的 API 是可以随意调用的，这显然还不安全全，在本文中我们通过 &lt;a href=&#34;https://github.com/dgrijalva/jwt-go&#34;&gt;jwt-go&lt;/a&gt; （&lt;a href=&#34;https://godoc.org/github.com/dgrijalva/jwt-go&#34;&gt;GoDoc&lt;/a&gt;）的方式来简单解决这个问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;下载依赖包&#34;&gt;下载依赖包&lt;/h2&gt;&#xA;&lt;p&gt;首先，我们下载 jwt-go 的依赖包，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go get -u github.com/dgrijalva/jwt-go&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;编写-jwt-工具包&#34;&gt;编写 jwt 工具包&lt;/h2&gt;&#xA;&lt;p&gt;我们需要编写一个&lt;code&gt;jwt&lt;/code&gt;的工具包，我们在&lt;code&gt;pkg&lt;/code&gt;下的&lt;code&gt;util&lt;/code&gt;目录新建&lt;code&gt;jwt.go&lt;/code&gt;，写入文件内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;util&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;time&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/dgrijalva/jwt-go&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/pkg/setting&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwtSecret&lt;/span&gt; = []byte(&lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;JwtSecret&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Claims&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Username&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;username&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Password&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;`json:&amp;#34;password&amp;#34;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StandardClaims&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GenerateToken&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;nowTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Now&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;expireTime&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;nowTime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Add&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;time&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Hour&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;claims&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Claims&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;username&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;password&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;StandardClaims&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;ExpiresAt&lt;/span&gt; : &lt;span style=&#34;color:#a6e22e&#34;&gt;expireTime&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Unix&lt;/span&gt;(),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;Issuer&lt;/span&gt; : &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gin-blog&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;},&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;tokenClaims&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;NewWithClaims&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SigningMethodHS256&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;claims&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tokenClaims&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SignedString&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;jwtSecret&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ParseToken&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;) (&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Claims&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;tokenClaims&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ParseWithClaims&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt;, &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Claims&lt;/span&gt;{}, &lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;token&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;jwt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Token&lt;/span&gt;) (&lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt;{}, &lt;span style=&#34;color:#66d9ef&#34;&gt;error&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;jwtSecret&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;})&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tokenClaims&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;claims&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tokenClaims&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Claims&lt;/span&gt;.(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Claims&lt;/span&gt;); &lt;span style=&#34;color:#a6e22e&#34;&gt;ok&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;tokenClaims&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Valid&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;claims&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在这个工具包，我们涉及到&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载四」Gin搭建Blog API&#39;s （三）</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-02-13-api-03/</link>
      <pubDate>Tue, 13 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-02-13-api-03/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/gin-gonic/gin&#34;&gt;Gin&lt;/a&gt;：Golang 的一个微框架，性能极佳。&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/astaxie/beego/tree/master/validation&#34;&gt;beego-validation&lt;/a&gt;：本节采用的 beego 的表单验证库，&lt;a href=&#34;https://beego.me/docs/mvc/controller/validation.md&#34;&gt;中文文档&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/jinzhu/gorm&#34;&gt;gorm&lt;/a&gt;，对开发人员友好的 ORM 框架，&lt;a href=&#34;http://gorm.io/docs/&#34;&gt;英文文档&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Unknwon/com&#34;&gt;com&lt;/a&gt;，一个小而美的工具包。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;完成博客的文章类接口定义和编写&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;定义接口&#34;&gt;定义接口&lt;/h2&gt;&#xA;&lt;p&gt;本节编写文章的逻辑，我们定义一下接口吧！&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;获取文章列表：GET(&amp;quot;/articles&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;获取指定文章：POST(&amp;quot;/articles/:id&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;新建文章：POST(&amp;quot;/articles&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;更新指定文章：PUT(&amp;quot;/articles/:id&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;删除指定文章：DELETE(&amp;quot;/articles/:id&amp;quot;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;编写路由逻辑&#34;&gt;编写路由逻辑&lt;/h2&gt;&#xA;&lt;p&gt;在&lt;code&gt;routers&lt;/code&gt;的 v1 版本下，新建&lt;code&gt;article.go&lt;/code&gt;文件，写入内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/gin-gonic/gin&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//获取单个文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetArticle&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//获取多个文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetArticles&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//新增文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AddArticle&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//修改文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditArticle&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//删除文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DeleteArticle&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们打开&lt;code&gt;routers&lt;/code&gt;下的&lt;code&gt;router.go&lt;/code&gt;文件，修改文件内容为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;routers&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/gin-gonic/gin&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/routers/api/v1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/EDDYCJY/go-gin-example/pkg/setting&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;InitRouter&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Engine&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Group&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/api/v1&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;...&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//获取文章列表&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/articles&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetArticles&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//获取指定文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/articles/:id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetArticle&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//新建文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;POST&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/articles&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AddArticle&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//更新指定文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PUT&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/articles/:id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EditArticle&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//删除指定文章&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DELETE&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/articles/:id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DeleteArticle&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当前目录结构：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载三」Gin搭建Blog API&#39;s （二）</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-02-12-api-02/</link>
      <pubDate>Mon, 12 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-02-12-api-02/</guid>
      <description>&lt;h2 id=&#34;涉及知识点&#34;&gt;涉及知识点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/gin-gonic/gin&#34;&gt;Gin&lt;/a&gt;：Golang 的一个微框架，性能极佳。&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/astaxie/beego/tree/master/validation&#34;&gt;beego-validation&lt;/a&gt;：本节采用的 beego 的表单验证库，&lt;a href=&#34;https://beego.me/docs/mvc/controller/validation.md&#34;&gt;中文文档&lt;/a&gt;。&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/jinzhu/gorm&#34;&gt;gorm&lt;/a&gt;，对开发人员友好的 ORM 框架，&lt;a href=&#34;http://gorm.io/docs/&#34;&gt;英文文档&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/Unknwon/com&#34;&gt;com&lt;/a&gt;，一个小而美的工具包。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;完成博客的标签类接口定义和编写&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;定义接口&#34;&gt;定义接口&lt;/h2&gt;&#xA;&lt;p&gt;本节正是编写标签的逻辑，我们想一想，一般接口为增删改查是基础的，那么我们定义一下接口吧！&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;获取标签列表：GET(&amp;quot;/tags&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;新建标签：POST(&amp;quot;/tags&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;更新指定标签：PUT(&amp;quot;/tags/:id&amp;quot;)&lt;/li&gt;&#xA;&lt;li&gt;删除指定标签：DELETE(&amp;quot;/tags/:id&amp;quot;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;编写路由空壳&#34;&gt;编写路由空壳&lt;/h2&gt;&#xA;&lt;p&gt;开始编写路由文件逻辑，在&lt;code&gt;routers&lt;/code&gt;下新建&lt;code&gt;api&lt;/code&gt;目录，我们当前是第一个 API 大版本，因此在&lt;code&gt;api&lt;/code&gt;下新建&lt;code&gt;v1&lt;/code&gt;目录，再新建&lt;code&gt;tag.go&lt;/code&gt;文件，写入内容：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/gin-gonic/gin&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//获取多个文章标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;GetTags&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//新增文章标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;AddTag&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//修改文章标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;EditTag&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//删除文章标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DeleteTag&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;c&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Context&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;注册路由&#34;&gt;注册路由&lt;/h2&gt;&#xA;&lt;p&gt;我们打开&lt;code&gt;routers&lt;/code&gt;下的&lt;code&gt;router.go&lt;/code&gt;文件，修改文件内容为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;routers&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; (&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;github.com/gin-gonic/gin&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gin-blog/routers/api/v1&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;gin-blog/pkg/setting&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;InitRouter&lt;/span&gt;() &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Engine&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;New&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Use&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Logger&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Use&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Recovery&lt;/span&gt;())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;gin&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SetMode&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;setting&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;RunMode&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Group&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/api/v1&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//获取标签列表&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GET&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tags&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;GetTags&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//新建标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;POST&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tags&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AddTag&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//更新指定标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;PUT&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tags/:id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EditTag&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;//删除指定标签&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#a6e22e&#34;&gt;apiv1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DELETE&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/tags/:id&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;v1&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;DeleteTag&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;r&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;当前目录结构：&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载二」Gin搭建Blog API&#39;s （一）</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-02-11-api-01/</link>
      <pubDate>Sun, 11 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-02-11-api-01/</guid>
      <description>&lt;h2 id=&#34;思考&#34;&gt;思考&lt;/h2&gt;&#xA;&lt;p&gt;首先，在一个初始项目开始前，大家都要思考一下&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;程序的文本配置写在代码中，好吗？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;API 的错误码硬编码在程序中，合适吗？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;db 句柄谁都去&lt;code&gt;Open&lt;/code&gt;，没有统一管理，好吗？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;获取分页等公共参数，谁都自己写一套逻辑，好吗？&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;显然在较正规的项目中，这些问题的答案都是&lt;strong&gt;不可以&lt;/strong&gt;，为了解决这些问题，我们挑选一款读写配置文件的库，目前比较火的有 &lt;a href=&#34;https://github.com/spf13/viper&#34;&gt;viper&lt;/a&gt;，有兴趣你未来可以简单了解一下，没兴趣的话等以后接触到再说。&lt;/p&gt;&#xA;&lt;p&gt;但是本系列选用 &lt;a href=&#34;https://github.com/go-ini/ini&#34;&gt;go-ini/ini&lt;/a&gt; ，它的 &lt;a href=&#34;https://ini.unknwon.io/&#34;&gt;中文文档&lt;/a&gt;。大家是必须需要要简单阅读它的文档，再接着完成后面的内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;编写一个简单的 API 错误码包。&lt;/li&gt;&#xA;&lt;li&gt;完成一个 Demo 示例。&lt;/li&gt;&#xA;&lt;li&gt;讲解 Demo 所涉及的知识点。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;介绍和初始化项目&#34;&gt;介绍和初始化项目&lt;/h2&gt;&#xA;&lt;h3 id=&#34;初始化项目目录&#34;&gt;初始化项目目录&lt;/h3&gt;&#xA;&lt;p&gt;在前一章节中，我们初始化了一个 &lt;code&gt;go-gin-example&lt;/code&gt; 项目，接下来我们需要继续新增如下目录结构：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;go-gin-example/&#xA;├── conf&#xA;├── middleware&#xA;├── models&#xA;├── pkg&#xA;├── routers&#xA;└── runtime&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;&#xA;&lt;li&gt;conf：用于存储配置文件&lt;/li&gt;&#xA;&lt;li&gt;middleware：应用中间件&lt;/li&gt;&#xA;&lt;li&gt;models：应用数据库模型&lt;/li&gt;&#xA;&lt;li&gt;pkg：第三方包&lt;/li&gt;&#xA;&lt;li&gt;routers 路由逻辑处理&lt;/li&gt;&#xA;&lt;li&gt;runtime：应用运行时数据&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;添加-go-modules-replace&#34;&gt;添加 Go Modules Replace&lt;/h3&gt;&#xA;&lt;p&gt;打开 &lt;code&gt;go.mod&lt;/code&gt; 文件，新增 &lt;code&gt;replace&lt;/code&gt; 配置项，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;module github.com/EDDYCJY/go-gin-example&#xA;&#xA;go 1.13&#xA;&#xA;require (...)&#xA;&#xA;replace (&#xA;&#x9;&#x9;github.com/EDDYCJY/go-gin-example/pkg/setting =&amp;gt; ~/go-application/go-gin-example/pkg/setting&#xA;&#x9;&#x9;github.com/EDDYCJY/go-gin-example/conf    &#x9;  =&amp;gt; ~/go-application/go-gin-example/pkg/conf&#xA;&#x9;&#x9;github.com/EDDYCJY/go-gin-example/middleware  =&amp;gt; ~/go-application/go-gin-example/middleware&#xA;&#x9;&#x9;github.com/EDDYCJY/go-gin-example/models &#x9;  =&amp;gt; ~/go-application/go-gin-example/models&#xA;&#x9;&#x9;github.com/EDDYCJY/go-gin-example/routers &#x9;  =&amp;gt; ~/go-application/go-gin-example/routers&#xA;)&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;可能你会不理解为什么要特意跑来加 &lt;code&gt;replace&lt;/code&gt; 配置项，首先你要看到我们使用的是完整的外部模块引用路径（&lt;code&gt;github.com/EDDYCJY/go-gin-example/xxx&lt;/code&gt;），而这个模块还没推送到远程，是没有办法下载下来的，因此需要用 &lt;code&gt;replace&lt;/code&gt; 将其指定读取本地的模块路径，这样子就可以解决本地模块读取的问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>「连载一」Go 介绍与环境安装</title>
      <link>https://note.lican.site/posts/posts/go/gin/2018-02-10-install/</link>
      <pubDate>Sat, 10 Feb 2018 12:00:00 +0000</pubDate>
      <guid>https://note.lican.site/posts/posts/go/gin/2018-02-10-install/</guid>
      <description>&lt;h2 id=&#34;本文目标&#34;&gt;本文目标&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;学会安装 Go。&lt;/li&gt;&#xA;&lt;li&gt;知道什么是 Go。&lt;/li&gt;&#xA;&lt;li&gt;知道什么是 Go modules。&lt;/li&gt;&#xA;&lt;li&gt;了解 Go modules 的小历史。&lt;/li&gt;&#xA;&lt;li&gt;学会简单的使用 Go modules。&lt;/li&gt;&#xA;&lt;li&gt;了解 Gin，并简单跑起一个 Demo。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;准备环节&#34;&gt;准备环节&lt;/h2&gt;&#xA;&lt;h3 id=&#34;安装-go&#34;&gt;安装 Go&lt;/h3&gt;&#xA;&lt;h4 id=&#34;centos&#34;&gt;Centos&lt;/h4&gt;&#xA;&lt;p&gt;首先，根据对应的操作系统选择安装包 &lt;a href=&#34;https://studygolang.com/dl&#34;&gt;下载&lt;/a&gt;，在这里我使用的是 Centos 64 位系统，如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ wget https://studygolang.com/dl/golang/go1.13.1.linux-amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ tar -zxvf go1.13.1.linux-amd64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mv go/ /usr/local/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置 /etc/profile&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vi /etc/profile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;添加环境变量 GOROOT 和将 GOBIN 添加到 PATH 中&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export GOROOT&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/local/go&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;export PATH&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;$PATH:$GOROOT/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置完毕后，执行命令令其生效&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;source /etc/profile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在控制台输入&lt;code&gt;go version&lt;/code&gt;，若输出版本号则&lt;strong&gt;安装成功&lt;/strong&gt;，如下：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ go version&#xA;go version go1.13.1 linux/amd64&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&#34;macos&#34;&gt;MacOS&lt;/h4&gt;&#xA;&lt;p&gt;在 MacOS 上安装 Go 最方便的办法就是使用 brew，安装如下：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
