小码农的碎碎念
时间漫漫,岁月不再
2023-11-16T14:48:44.214Z
https://dryyun.com/
dryyun
Hexo
HomeBrew 安装特定版本的 Formula
https://dryyun.com/2022/07/05/brew-install-old-version-formula/
2022-07-05T15:23:41.000Z
2023-11-16T14:48:44.214Z
<p>在 Mac 上 brew 作为常用的包管理软件,一直被我使用。</p>
<p>一般来说,使用 brew 都会安装最新版本的软件,有时候需要安装特定版本的软件的时候,我都会考虑使用 Docker 实现。</p>
<p>不过也有偷懒的时候,brew 也确实是方便,所以考虑一下怎么使用 brew 安装特定版本、本机安装多版本的 Formula</p>
<h2 id="brew-安装-Formula-简单原理介绍"><a href="#brew-安装-Formula-简单原理介绍" class="headerlink" title="brew 安装 Formula 简单原理介绍"></a>brew 安装 Formula 简单原理介绍</h2><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">$</span><span class="bash"> brew tap-info homebrew/core </span></span><br><span class="line"></span><br><span class="line">output :</span><br><span class="line">homebrew/core: 3 commands, 6162 formulae</span><br><span class="line">/usr/local/Homebrew/Library/Taps/homebrew/homebrew-core (6,606 files, 643.2MB)</span><br><span class="line">From: https://github.com/Homebrew/homebrew-core</span><br></pre></td></tr></table></figure>
<p>可以看到,整个就是一个 github repo</p>
<p>具体的每个 formula 在目录 <code>https://github.com/Homebrew/homebrew-core/tree/master/Formula</code> </p>
<p>如果软件作者希望 formula 被添加或者被更新,都给这个 repo 提 PR 即可</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">$ brew install grafana </span><br><span class="line"></span><br><span class="line">会读文件</span><br><span class="line">https://github.com/Homebrew/homebrew-core/blob/master/Formula/grafana.rb</span><br></pre></td></tr></table></figure>
<p>安装 grafana 会依赖本地的 grafana.rb 文件,根据文件内容下载 url 的压缩包,然后校验 sha256 </p>
Year 2022 展望
https://dryyun.com/2022/01/12/New-Year-2022/
2022-01-12T14:50:46.000Z
2023-11-16T14:48:44.214Z
<p>已然是 2022 年了,还会不经意的感觉还停留在 2021 年,时间如此飞逝,年复一年。</p>
<p>小时候我们会说,长大了,现在我们只能是变老了。</p>
<p>事实是正值壮年。</p>
<p>需要正视各种变迁、各种文化,正视时代贩卖的焦虑,正视对码农特有的关注,且还年轻着。</p>
<h2 id="回顾-2021"><a href="#回顾-2021" class="headerlink" title="回顾 2021"></a>回顾 2021</h2>
最近折腾的软件
https://dryyun.com/2021/05/13/2021-new-try/
2021-05-13T13:48:31.000Z
2023-11-16T14:48:44.214Z
<h1 id="折腾不止"><a href="#折腾不止"
Go Modules 历史变迁
https://dryyun.com/2021/02/25/Go-Modules/
2021-02-25T04:13:11.000Z
2023-11-16T14:48:44.214Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<h1 id="两种包管理运行模式"><a href="#两种包管理运行模式" class="headerlink" title="两种包管理运行模式"></a>两种包管理运行模式</h1><ul>
<li>GOPATH mode,从 <code>vendor</code> 和 <code>GOPATH</code> 下寻找依赖,依赖会被下载至 <code>GOPATH/src</code> 目录下</li>
<li>module-aware mode</li>
</ul>
<h1 id="Go-1-11-–-2018-8"><a href="#Go-1-11-–-2018-8" class="headerlink" title="Go 1.11 – 2018.8"></a>Go 1.11 – 2018.8</h1><p>正式推出 go modules ,可以查看 <code>go help modules</code> 获取相关信息</p>
<h2 id="GO111MODULE"><a href="#GO111MODULE" class="headerlink" title="GO111MODULE"></a>GO111MODULE</h2><p>新增的环境变量,用于控制 Go 代码包管理运行模式</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">For more fine-grained control, the module support in Go 1.11 respects</span><br><span class="line">a temporary environment variable, GO111MODULE, which can be set to one</span><br><span class="line">of three string values: off, on, or auto (the default).</span><br><span class="line">If GO111MODULE=off, then the go command never uses the</span><br><span class="line">new module support. Instead it looks in vendor directories and GOPATH</span><br><span class="line">to find dependencies; we now refer to this as "GOPATH mode."</span><br><span class="line">If GO111MODULE=on, then the go command requires the use of modules,</span><br><span class="line">never consulting GOPATH. We refer to this as the command being</span><br><span class="line">module-aware or running in "module-aware mode".</span><br><span class="line">If GO111MODULE=auto or is unset, then the go command enables or</span><br><span class="line">disables module support based on the current directory.</span><br><span class="line">Module support is enabled only when the current directory is outside</span><br><span class="line">GOPATH/src and itself contains a go.mod file or is below a directory</span><br><span class="line">containing a go.mod file.</span><br><span class="line"></span><br><span class="line">In module-aware mode, GOPATH no longer defines the meaning of imports</span><br><span class="line">during a build, but it still stores downloaded dependencies (in GOPATH/pkg/mod)</span><br><span class="line">and installed commands (in GOPATH/bin, unless GOBIN is set).</span><br></pre></td></tr></table></figure>
<ul>
<li>GO111MODULE = auto,默认值(设置为 auto 或者不设置)<ul>
<li>在 GOPATH/src 目录外,且文件夹包含 go.mod 文件,就运行 module-aware mode,其余情况都是 GOPATH mode</li>
</ul>
</li>
<li>GO111MODULE = on,开启<ul>
<li>不管目录所在路径,都是 module-aware mode</li>
<li>运行 go build 等命令,会优先判断 go.mod 是否存在,不存在的话,先创建 go.mod 文件</li>
</ul>
</li>
<li>GO111MODULE = off,关闭<ul>
<li>任何情况下,都关闭</li>
</ul>
</li>
</ul>
<h2 id="包下载路径"><a href="#包下载路径" class="headerlink" title="包下载路径"></a>包下载路径</h2><ul>
<li>module-aware mode 在 <code>GOPATH/pkg/mod</code> 目录下</li>
<li>GOPATH mode 在 <code>GOPATH/src</code> 目录下</li>
</ul>
<h2 id="Go-Get"><a href="#Go-Get" class="headerlink" title="Go Get"></a>Go Get</h2><p>运行在不同 mode 下,行为不同</p>
<ul>
<li>module-aware mode 会修改 go.mod 文件</li>
<li>GOPATH mode ,按照之前的行为运行</li>
</ul>
<h3 id="Go-Get-存在的问题"><a href="#Go-Get-存在的问题" class="headerlink" title="Go Get 存在的问题"></a>Go Get 存在的问题</h3><p>如果 GO111MODULE = on ,且当前目录没有 go.mod 文件,会报错 <code>go: cannot find main module; see 'go help modules'</code></p>
<h2 id="vendor-目录支持"><a href="#vendor-目录支持" class="headerlink" title="vendor 目录支持"></a>vendor 目录支持</h2><p>运行 <code>go mod vendor</code> ,会在当前目录生成 vendor 目录,从 GOPATH/pkg/mod 复制 packge 过来</p>
<p>运行命令类似,<code>go build -mod=vendor</code> 加上 <code>-mod=vendor</code>,会使用 vendor 目录下依赖,否则还是使用 GOPATH/pkg/mod 下依赖</p>
<h2 id="GOPROXY"><a href="#GOPROXY" class="headerlink" title="GOPROXY"></a>GOPROXY</h2><p>新增 GOPROXY 环境变量,用于设置 go module 下载代理地址</p>
My New Article In 2020
https://dryyun.com/2020/11/20/my-new-article-in-2020/
2020-11-20T15:46:04.000Z
2023-11-16T14:48:44.218Z
<p>许久未更新了。<br>生疏到 markdown
Go 阅读 negroni 源码
https://dryyun.com/2019/06/10/go-negroni/
2019-06-10T15:49:20.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<p>negroni 提供 golang 常用的中间件使用方式,项目地址 <a href="https://github.com/urfave/negroni/" target="_blank" rel="noopener">https://github.com/urfave/negroni/</a> </p>
<p>阅读版本是 2019.6.2 的 <a href="https://github.com/urfave/negroni/tree/7d1c5e0c31f98a3073127a273a4eb2f9690a715f" target="_blank" rel="noopener">7d1c5e commit</a> </p>
<p>GoDoc - <a href="https://godoc.org/github.com/urfave/negroni" target="_blank" rel="noopener">https://godoc.org/github.com/urfave/negroni</a></p>
<h2 id="前提知识"><a href="#前提知识" class="headerlink" title="前提知识"></a>前提知识</h2><p>了解 net/http server 的相关知识,也可以读我写的上一篇 【http-server】 </p>
<h2 id="基本使用"><a href="#基本使用" class="headerlink" title="基本使用"></a>基本使用</h2><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">mux := http.NewServeMux()</span><br><span class="line">mux.HandleFunc(<span class="string">"/"</span>, <span class="function"><span class="keyword">func</span><span class="params">(w http.ResponseWriter, req *http.Request)</span></span> {</span><br><span class="line"> fmt.Fprintf(w, <span class="string">"Welcome to the home page! "</span>+req.URL.Path)</span><br><span class="line">})</span><br><span class="line"></span><br><span class="line">n := negroni.New()</span><br><span class="line">n.Use(negroni.NewLogger())</span><br><span class="line"></span><br><span class="line">n.UseHandler(mux)</span><br><span class="line">n.Run(<span class="string">":3000"</span>)</span><br></pre></td></tr></table></figure>
<p>其中关于 <code>mux</code> 变量的部分,可以参考上一遍 <code>http-server</code>,这里就不说明了,主要关注 <code>n := negroni.New()</code></p>
Go HTTP Server 使用分析
https://dryyun.com/2019/06/06/go-http-server/
2019-06-06T15:28:00.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<p>使用 net/http 包处理 http request </p>
<p>GoDoc - <a href="https://godoc.org/net/http" target="_blank" rel="noopener">https://godoc.org/net/http</a> </p>
<p>net/http 主要包括两部分</p>
<ul>
<li>client</li>
<li>server </li>
</ul>
<p>这里就是关于 server 部分</p>
<p>Tip: <code>go version go1.12.4 darwin/amd64</code> </p>
<h2 id="Handler-interface"><a href="#Handler-interface" class="headerlink" title="Handler interface"></a>Handler interface</h2><p>查看 http.ListenAndServe 定义</p>
<figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">ListenAndServe</span><span class="params">(addr <span class="keyword">string</span>, handler Handler)</span> <span class="title">error</span></span> {</span><br><span class="line"> server := &Server{Addr: addr, Handler: handler}</span><br><span class="line"> <span class="keyword">return</span> server.ListenAndServe()</span><br><span class="line">}</span><br></pre></td></tr></table></figure>
<p>会发现第二个参数是 Handler 类型<br><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> Handler <span class="keyword">interface</span> {</span><br><span class="line"> ServeHTTP(ResponseWriter, *Request)</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<p>Handler 是一个接口定义,只要实现了 ServeHTTP(ResponseWriter, *Request) 方法的类型,都可以</p>
Go - var & make & new 在复杂类型上的使用区别
https://dryyun.com/2019/05/30/go-new-make-use/
2019-05-30T04:22:09.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<p>这里主要讲解 var & make & new 在声明变量关于 array、slice、map、struct 这些类型上的区别。</p>
<h1 id="预备知识"><a href="#预备知识" class="headerlink" title="预备知识"></a>预备知识</h1><h2 id="var-声明变量"><a href="#var-声明变量" class="headerlink" title="var 声明变量"></a>var 声明变量</h2><p><code>var 变量名字 类型 = 表达式</code> ,如果省略了<code>表达式</code>,就使用类型的零值初始化变量 </p>
<h2 id="make-和-new-的知识"><a href="#make-和-new-的知识" class="headerlink" title="make 和 new 的知识"></a>make 和 new 的知识</h2><p>可以查看 GoDoc - builtin 的相关内容</p>
<ul>
<li><a href="https://godoc.org/builtin#new" target="_blank" rel="noopener">new</a><ul>
<li><code>func new(Type) *Type</code> </li>
<li>创建一个 Type 类型的匿名变量,初始为 Type 类型的零值,返回变量地址,返回的指针类型为<code>*Type</code></li>
</ul>
</li>
<li><a href="https://godoc.org/builtin#make" target="_blank" rel="noopener">make</a><ul>
<li><code>func make(t Type, size ...IntegerType) Type</code></li>
<li>分配并初始化一个类型为 slice 、map 、或 channel 的对象,返回类型与 Type 相同,而非指向它的指针</li>
</ul>
</li>
</ul>
<h2 id="零值"><a href="#零值" class="headerlink" title="零值"></a>零值</h2><ul>
<li>array、struct,每个元素或字段都是对应该类型的零值</li>
<li>slice、map,对于零值 nil </li>
</ul>
排序算法
https://dryyun.com/2019/03/25/algorithms-sort/
2019-03-25T04:51:08.000Z
2023-11-16T14:48:44.214Z
<blockquote>
<p>Algorithms 分类文章,为了在下次又忘记又想想起来的时候,稍微快速的回想一下。</p>
</blockquote>
<p>排序方法很多,仔细想想还是快排最实用<br>冒泡排序、选择排序、桶排序、快速排序、归并排序、堆排序 </p>
最近折腾两三事
https://dryyun.com/2019/01/16/recently-do-somethings/
2019-01-16T05:45:46.000Z
2023-11-16T14:48:44.222Z
<h2 id="折腾不止"><a href="#折腾不止" class="headerlink" title="折腾不止"></a>折腾不止</h2><p>需求就是来源于生活,好赖是个菜鸟码农,还有些个谷歌复制粘贴的能力。</p>
群晖 Nas 使用 SSH Key 实现免密登录
https://dryyun.com/2019/01/08/synology-nas-login-with-ssh-key/
2019-01-08T03:05:56.000Z
2023-11-16T14:48:44.222Z
<blockquote>
<p>最近直观的加上了文章访问统计和整站访问统计,虽然知道肯定没人访问,也就是纯粹加点新功能,但是没想到,关于 Nas 的文章访问量遥遥领先。 </p>
</blockquote>
<p>承接之前关于 Nas 的文章</p>
<ul>
<li><a href="/2018/07/19/synology-nas-use-https/">群晖 Nas 折腾 https - 更安全的外网访问</a></li>
<li><a href="/2018/07/19/synology-nas-with-vpn/">群晖 Nas 用上 VPN 更加安全</a></li>
</ul>
<p>开启了 VPN 可以更安全的访问 Nas ,同时我也需要使用 SSH 功能,但是每次使用的时候,都要输入密码,很是麻烦,如果能改成 ssh 免密登录就好了。<br>本质上跟其他的 linux 服务器设置免密登录原理差不多,稍微有点差别吧。 </p>
Go Method Receiver 方法接收器介绍
https://dryyun.com/2018/12/14/go-method-receiver/
2018-12-14T08:28:11.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<h2 id="Receiver-基本介绍"><a href="#Receiver-基本介绍" class="headerlink" title="Receiver 基本介绍"></a>Receiver 基本介绍</h2><p>就是类似于 Class 的 Method,使用 this 或者 self 调用 ?可以这么类比吧,但是并不等同。</p>
<p>看具体的代码<br><figure class="highlight go"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">type</span> IntReceiver <span class="keyword">struct</span> {</span><br><span class="line"> X <span class="keyword">int</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">// 方法接收器声明</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="params">(i IntReceiver)</span> <span class="title">Double</span><span class="params">()</span> <span class="title">int</span></span> {</span><br><span class="line"> <span class="keyword">return</span> i.X * <span class="number">2</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="comment">// 普通函数声明</span></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">IRDouble</span><span class="params">(i IntReceiver)</span> <span class="title">int</span></span> {</span><br><span class="line"> <span class="keyword">return</span> i.X * <span class="number">2</span></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="keyword">func</span> <span class="title">main</span><span class="params">()</span></span> {</span><br><span class="line"> i := IntReceiver{<span class="number">3</span>}</span><br><span class="line"> d1 := i.Double() <span class="comment">// 在 i 上调用了 IntReceiver 类型带的 Method // func (i IntReceiver) Double() int</span></span><br><span class="line"> fmt.Printf(<span class="string">"type = %T,value = %v\n"</span>, d1, d1)</span><br><span class="line"></span><br><span class="line"> d2 := IRDouble(i) <span class="comment">// 调用了普通函数 // func IRDouble(i IntReceiver) int </span></span><br><span class="line"> fmt.Printf(<span class="string">"type = %T,value = %v\n"</span>, d2, d2)</span><br><span class="line">}</span><br></pre></td></tr></table></figure></p>
<blockquote>
<p>定义 method 并不局限于结构体 struct,可以任何 type 声明的类型定义 Method,最简单如 <code>type DInt int</code> ,就能为 DInt 类型定义 method </p>
</blockquote>
Go 运行的初始化
https://dryyun.com/2018/12/06/go-init/
2018-12-06T10:18:19.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<h2 id="结论"><a href="#结论" class="headerlink" title="结论"></a>结论</h2><p>先上简单结论 </p>
<ul>
<li>初始化依赖包,也就是 import 的包</li>
<li>在同一个包内,在解决依赖顺序的情况下,按照变量、常量出现的顺序依次初始化</li>
<li>按照 init 函数出现的顺序运行</li>
<li>运行 main 函数</li>
</ul>
Go 程序设计语言 - 笔记
https://dryyun.com/2018/12/05/go-gopl-notes/
2018-12-05T05:01:48.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go
Go 学习 - 环境设置
https://dryyun.com/2018/11/29/go-environment-setting/
2018-11-29T04:25:11.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<blockquote>
<p>当前环境 </p>
<ul>
<li>设备 MacBook Pro </li>
<li>系统 macOS High Sierra 10.13.6 </li>
<li>Go 版本 1.10.4 </li>
</ul>
</blockquote>
<h2 id="开发工具"><a href="#开发工具" class="headerlink" title="开发工具"></a>开发工具</h2><ul>
<li><a href="/2018/11/29/go-with-vscode/">VSCode</a></li>
<li><a href="https://www.jetbrains.com/go/" target="_blank" rel="noopener">GoLand</a> </li>
</ul>
<h2 id="Go-安装"><a href="#Go-安装" class="headerlink" title="Go 安装"></a>Go 安装</h2><ul>
<li>源码安装,<a href="https://golang.org/dl/" target="_blank" rel="noopener">https://golang.org/dl/</a> 下载相应的 goVERSION.src.tar.gz 即可</li>
<li>标准包安装<ul>
<li>下载地址 <a href="https://golang.org/dl/" target="_blank" rel="noopener">https://golang.org/dl/</a></li>
<li>需要判断操作系统是 32 位还是 64 位,uname -m</li>
</ul>
</li>
<li>三方工具安装<ul>
<li>homebrew,mac</li>
<li>apt-get、yum,linux</li>
<li><a href="/2018/11/28/how-to-use-gvm/">gvm</a></li>
</ul>
</li>
</ul>
使用 VSCode 开发 Go - 浅尝辄止
https://dryyun.com/2018/11/29/go-with-vscode/
2018-11-29T01:23:38.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<p>开发 Go 如果懒的折腾就直接上 <a href="https://www.jetbrains.com/go/" target="_blank" rel="noopener">GoLand</a> 就行了,我就是懒。</p>
<p>不过,这不是本文的目的,毕竟 GoLand 要钱,要内存,要机器性能,要求还蛮高的,相对来说 <a href="https://code.visualstudio.com/" target="_blank" rel="noopener">VSCode</a> 就简单了呀。</p>
<h2 id="使用"><a href="#使用" class="headerlink" title="使用"></a>使用</h2><p>默认你已经安装了 VSCode 了<br><code>强烈建议,安装命令 [code],在终端打开文件很方便</code> , <a href="https://segmentfault.com/q/1010000005104983" target="_blank" rel="noopener">参考</a></p>
<h3 id="安装-Go-插件"><a href="#安装-Go-插件" class="headerlink" title="安装 Go 插件"></a>安装 Go 插件</h3><p>可以查看 <a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go" target="_blank" rel="noopener">Go for Visual Studio Code</a> 相关介绍 </p>
<p>只要使用 VSCode 打开任意 .go 文件,就会推荐安装 Go 插件</p>
<p><img src="/go-extension.png" width="500px"></p>
GVM - Go 的多版本管理工具,使用介绍
https://dryyun.com/2018/11/28/how-to-use-gvm/
2018-11-28T01:58:17.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<h2 id="基本介绍"><a href="#基本介绍" class="headerlink" title="基本介绍"></a>基本介绍</h2><h4 id="项目地址"><a href="#项目地址" class="headerlink" title="项目地址"></a>项目地址</h4><blockquote>
<p><a href="https://github.com/golang/go" target="_blank" rel="noopener">Go GitHub</a><br><a href="https://github.com/moovweb/gvm" target="_blank" rel="noopener">GVM GitHub</a><br>
学习 Go 的经历
https://dryyun.com/2018/11/27/learn-go/
2018-11-27T04:30:00.000Z
2023-11-16T14:48:44.218Z
<blockquote>
<p>Go 分类文章,学习笔记,会不定时修改,补充,纠错,增加内容,路漫漫。</p>
</blockquote>
<p>准备在后续瞎写一些关于自己学习 Go 的文章,纯粹的就是学习 Go 的私人笔记,基本没什么营养。</p>
无题 - 无意义的碎碎念
https://dryyun.com/2018/11/02/no-title-2018-11-2/
2018-11-02T06:46:28.000Z
2023-11-16T14:48:44.218Z
<p>转眼十月就过去了。拖延如我,果然什么都没干成,有一种啥都不想做的心情。<b
对坏人太好,对好人太坏的社会
https://dryyun.com/2018/10/24/good-for-bad-guys/
2018-10-24T09:56:36.000Z
2023-11-16T14:48:44.218Z
<p>其实作为一个自认为理性的人来说,我真的不希望以【好人】【坏人】来给人打标签,给人定性,毕竟凡是都会有灰色地带,毕竟很多东西都是相对的。<br>但是在面对具体事件的时候,具体的行为分析,就会得出结果,谁在这件事上是好人,谁是坏人,这就会显得简单多了。</p>
<p>恩,以上都是废话,以下为胡言乱语,我肯定是神志不清了吧。<br>