<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>golang on 戲中話</title><link>https://blog.iphpo.com/tags/golang/</link><description>Recent content in golang on 戲中話</description><generator>Hugo</generator><language>zh-tw</language><managingEditor>herb09638@gmail.com (Herb)</managingEditor><webMaster>herb09638@gmail.com (Herb)</webMaster><lastBuildDate>Thu, 14 Nov 2019 23:50:29 +0800</lastBuildDate><atom:link href="https://blog.iphpo.com/tags/golang/index.xml" rel="self" type="application/rss+xml"/><item><title>[Golang] 解決 Go 1.13 之後下載私有倉庫專案錯誤(410 Gone)</title><link>https://blog.iphpo.com/blog/2019/golang-%E8%A7%A3%E6%B1%BA-go-1.13-%E4%B9%8B%E5%BE%8C%E4%B8%8B%E8%BC%89%E7%A7%81%E6%9C%89%E5%80%89%E5%BA%AB%E5%B0%88%E6%A1%88%E9%8C%AF%E8%AA%A4/</link><pubDate>Thu, 14 Nov 2019 23:50:29 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2019/golang-%E8%A7%A3%E6%B1%BA-go-1.13-%E4%B9%8B%E5%BE%8C%E4%B8%8B%E8%BC%89%E7%A7%81%E6%9C%89%E5%80%89%E5%BA%AB%E5%B0%88%E6%A1%88%E9%8C%AF%E8%AA%A4/</guid><description>Go 1.13 之後會預設 GOPROXY 為 proxy.golang.org，導致私有專案無法被檢查checksum，然後下載失敗</description></item><item><title>Golang 的跨平台編譯</title><link>https://blog.iphpo.com/blog/2018/03/golang-%E7%9A%84%E8%B7%A8%E5%B9%B3%E5%8F%B0%E7%B7%A8%E8%AD%AF/</link><pubDate>Sat, 31 Mar 2018 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2018/03/golang-%E7%9A%84%E8%B7%A8%E5%B9%B3%E5%8F%B0%E7%B7%A8%E8%AD%AF/</guid><description>&lt;p&gt;Golang 可在任何平台上做 cross compile&lt;/p&gt;
&lt;p&gt;所以可以在MacOSX編譯出Linux的可執行檔&lt;/p&gt;
&lt;p&gt;只要給定編譯平台的環境變數&lt;/p&gt;
&lt;p&gt;go build時就會依照環境變數&lt;/p&gt;
&lt;p&gt;編譯出相對應的平台&lt;/p&gt;</description></item><item><title>Golang 用 goroutine 減少大量檔案讀取時間</title><link>https://blog.iphpo.com/blog/2017/12/golang-%E7%94%A8-goroutine-%E6%B8%9B%E5%B0%91%E5%A4%A7%E9%87%8F%E6%AA%94%E6%A1%88%E8%AE%80%E5%8F%96%E6%99%82%E9%96%93/</link><pubDate>Sat, 30 Dec 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/12/golang-%E7%94%A8-goroutine-%E6%B8%9B%E5%B0%91%E5%A4%A7%E9%87%8F%E6%AA%94%E6%A1%88%E8%AE%80%E5%8F%96%E6%99%82%E9%96%93/</guid><description>&lt;p&gt;之前做了一個可以掃描多資料夾下檔案變動的程式&lt;/p&gt;
&lt;p&gt;但只要檔案變多&lt;/p&gt;
&lt;p&gt;速度就會變很慢&lt;/p&gt;
&lt;p&gt;所以這次要用 golang 自帶的 goroutine 來優化&lt;/p&gt;</description></item><item><title>[工具]檢查檔案是否被任意變更 - FileChecker</title><link>https://blog.iphpo.com/blog/2017/05/%E5%B7%A5%E5%85%B7-%E6%AA%A2%E6%9F%A5%E6%AA%94%E6%A1%88%E6%98%AF%E5%90%A6%E8%A2%AB%E4%BB%BB%E6%84%8F%E8%AE%8A%E6%9B%B4-filechecker/</link><pubDate>Thu, 04 May 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/05/%E5%B7%A5%E5%85%B7-%E6%AA%A2%E6%9F%A5%E6%AA%94%E6%A1%88%E6%98%AF%E5%90%A6%E8%A2%AB%E4%BB%BB%E6%84%8F%E8%AE%8A%E6%9B%B4-filechecker/</guid><description>&lt;p&gt;最近用Golang寫了一個工具&lt;/p&gt;
&lt;p&gt;這是很久以前就想寫的&lt;/p&gt;
&lt;p&gt;那時候還沒有golang&lt;/p&gt;
&lt;p&gt;當初的想法是&lt;/p&gt;
&lt;p&gt;一台Server被成功入侵&lt;/p&gt;
&lt;p&gt;大部分都是看Log才知道&lt;/p&gt;
&lt;p&gt;但一台被針對並且成功提權的機器&lt;/p&gt;
&lt;p&gt;是不會留下任何被入侵的Log的&lt;/p&gt;
&lt;p&gt;但是絕對會留下駭客下次進入的後門&lt;/p&gt;
&lt;p&gt;或是被置入的惡意程式&lt;/p&gt;
&lt;p&gt;畢竟漏洞只是一時的&lt;/p&gt;
&lt;p&gt;如果沒放後門等漏洞被補起來&lt;/p&gt;
&lt;p&gt;這台機器就不能用了&lt;/p&gt;</description></item><item><title>Golang如何確認檔案是否存在</title><link>https://blog.iphpo.com/blog/2017/04/golang%E5%A6%82%E4%BD%95%E7%A2%BA%E8%AA%8D%E6%AA%94%E6%A1%88%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8/</link><pubDate>Mon, 17 Apr 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/04/golang%E5%A6%82%E4%BD%95%E7%A2%BA%E8%AA%8D%E6%AA%94%E6%A1%88%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8/</guid><description>&lt;p&gt;在php裡有個函式可以檢查檔案是否存在&lt;/p&gt;
&lt;p&gt;&lt;a href="http://php.net/manual/en/function.file-exists.php"&gt;file_exists&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;那在Golang又該如何判斷呢？&lt;/p&gt;</description></item><item><title>在Golang用簡單的方式Mock function</title><link>https://blog.iphpo.com/blog/2017/04/%E5%9C%A8golang%E7%94%A8%E7%B0%A1%E5%96%AE%E7%9A%84%E6%96%B9%E5%BC%8Fmock-function-how-to-mock-function-in-golang/</link><pubDate>Wed, 12 Apr 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/04/%E5%9C%A8golang%E7%94%A8%E7%B0%A1%E5%96%AE%E7%9A%84%E6%96%B9%E5%BC%8Fmock-function-how-to-mock-function-in-golang/</guid><description>&lt;p&gt;其實&lt;a href="https://github.com/golang/mock"&gt;官方有Mock package&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;但我稍微看了一下&lt;/p&gt;
&lt;p&gt;都是在Mock interface&lt;/p&gt;
&lt;p&gt;我遇到的問題是&lt;/p&gt;
&lt;p&gt;我用到其他package的function&lt;/p&gt;
&lt;p&gt;而那隻package沒有用interface&lt;/p&gt;
&lt;p&gt;所以無法產生Mock object&lt;/p&gt;
&lt;p&gt;Google上的解法&lt;/p&gt;
&lt;p&gt;都偏向Dependency Injection&lt;/p&gt;</description></item><item><title>使用gvm管理Golang版本</title><link>https://blog.iphpo.com/blog/2017/03/%E4%BD%BF%E7%94%A8gvm%E7%AE%A1%E7%90%86golang%E7%89%88%E6%9C%AC-manage-golang-version-by-gvm/</link><pubDate>Tue, 21 Mar 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/03/%E4%BD%BF%E7%94%A8gvm%E7%AE%A1%E7%90%86golang%E7%89%88%E6%9C%AC-manage-golang-version-by-gvm/</guid><description>&lt;p&gt;&lt;a href="https://github.com/moovweb/gvm"&gt;gvm&lt;/a&gt;是Go Version Manager的縮寫&lt;/p&gt;
&lt;p&gt;跟&lt;a href="https://github.com/creationix/nvm"&gt;nvm(node version manager)&lt;/a&gt;和&lt;a href="https://github.com/phpbrew/phpbrew"&gt;phpbrew&lt;/a&gt;功能一樣&lt;/p&gt;
&lt;p&gt;在一次升級Go版本的過程中&lt;/p&gt;
&lt;p&gt;偶然發現這個東西&lt;/p&gt;
&lt;p&gt;就決定使用它&lt;/p&gt;
&lt;p&gt;其實Go目前還沒有安裝多版本的需求&lt;/p&gt;
&lt;p&gt;不像PHP需要很多版本來測試&lt;/p&gt;
&lt;p&gt;但已經習慣使用command line來管理套件&lt;/p&gt;
&lt;p&gt;我的php, nodejs都是用版本管理系統來管理的&lt;/p&gt;
&lt;p&gt;所以Go也不想例外&lt;/p&gt;
&lt;p&gt;安裝也很簡單&lt;/p&gt;
&lt;p&gt;只需要一行&lt;/p&gt;</description></item><item><title>如何在 Golang 讀取/寫入檔案</title><link>https://blog.iphpo.com/blog/2017/03/%E5%A6%82%E4%BD%95%E5%9C%A8-golang-%E8%AE%80%E5%8F%96%E5%AF%AB%E5%85%A5%E6%AA%94%E6%A1%88-how-to-read-write-file-using-golang/</link><pubDate>Wed, 15 Mar 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/03/%E5%A6%82%E4%BD%95%E5%9C%A8-golang-%E8%AE%80%E5%8F%96%E5%AF%AB%E5%85%A5%E6%AA%94%E6%A1%88-how-to-read-write-file-using-golang/</guid><description>&lt;p&gt;這篇是在 &lt;a href="http://stackoverflow.com/questions/1821811/how-to-read-write-from-to-file-using-golang"&gt;stackoverflow&lt;/a&gt; 上看到的&lt;/p&gt;
&lt;p&gt;覺得滿實用&lt;/p&gt;
&lt;p&gt;在Golang要操作檔案有三種方法&lt;/p&gt;
&lt;p&gt;第一種就是操作檔案的指標&lt;/p&gt;
&lt;p&gt;跟php的fopen差不多&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 18pt; color: #ff0000;"&gt;&lt;strong&gt;以下是第一段程式碼&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>[Golang] 產生檔案的MD5 hash - Generate file MD5 hash in golang</title><link>https://blog.iphpo.com/blog/2017/03/golang-%E7%94%A2%E7%94%9Fmd5-hash-generate-md5-hash-golang/</link><pubDate>Tue, 07 Mar 2017 00:00:00 +0800</pubDate><author>herb09638@gmail.com (Herb)</author><guid>https://blog.iphpo.com/blog/2017/03/golang-%E7%94%A2%E7%94%9Fmd5-hash-generate-md5-hash-golang/</guid><description>&lt;p&gt;此篇文章是一個用Golang產生檔案MD5的function範例&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;func&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;genMd5&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Abspath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;filepath&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Abspath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nb"&gt;panic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Convert file absolute path error: &amp;#34;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Abspath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;defer&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;md5&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;New&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;:=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;io&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Copy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;f&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;		&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Fatal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;EncodeToString&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;h&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;Sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt; &lt;/p&gt;</description></item></channel></rss>