<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GO &#8211; フリーランスさばいばる</title>
	<atom:link href="https://dev-memo.net/category/programming/go/feed/" rel="self" type="application/rss+xml" />
	<link>https://dev-memo.net</link>
	<description>生涯フリーランスで生き延びるためのブログ</description>
	<lastBuildDate>Sat, 22 Oct 2022 10:05:38 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2</generator>

<image>
	<url>https://dev-memo.net/wp-content/uploads/2022/06/cropped-favicon-32x32.png</url>
	<title>GO &#8211; フリーランスさばいばる</title>
	<link>https://dev-memo.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【GAE/GO】Echo V3はGAE未対応？V2なら動く！</title>
		<link>https://dev-memo.net/gae_go_echo_version/</link>
					<comments>https://dev-memo.net/gae_go_echo_version/#comments</comments>
		
		<dc:creator><![CDATA[キミヒラ]]></dc:creator>
		<pubDate>Tue, 20 Mar 2018 11:54:56 +0000</pubDate>
				<category><![CDATA[GO]]></category>
		<guid isPermaLink="false">https://dev-memo.net/?p=740</guid>

					<description><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2018/03/mac-459196_1280-1024x634.jpg" class="webfeedsFeaturedVisual" /></p>※2018/3/20時点で最新のEchoのバージョンV3で動かせなかった事象です。その後、V4がリリースされているので最新版のEchoでは本記事の問題は解決しているかもしれません。（未確認） GAE/GoにEchoを導入 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2018/03/mac-459196_1280-1024x634.jpg" class="webfeedsFeaturedVisual" /></p>
<p class="is-style-icon_info">※2018/3/20時点で最新のEchoのバージョンV3で動かせなかった事象です。<br>その後、V4がリリースされているので最新版のEchoでは本記事の問題は解決しているかもしれません。（未確認）</p>



<p><strong>GAE/Go</strong>に<span style="color: #000000;"><strong>Echo</strong>を導入しようとしてハマった件について</span>。</p>



<p>結局、最新バージョンのEchoV3（2018/3/20当時の最新）はGAE環境で動かせませんでした…</p>



<p>妥協して<span class="ymarker">V2では動かすことができた</span>ので、同じ様にハマっている方の参考になれば。</p>



<h2 class="wp-block-heading">EchoのバージョンV3だと動かない？</h2>



<p>最新の<strong>Echo</strong>の<strong>V3</strong>でセットアップを始めました。</p>



<p>公式のマニュアルを参考にセットアップを行いました。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://echo.labstack.com/cookbook/google-app-engine/
</div></figure>



<p>ですが、下記のようなエラーが。</p>



<p class="is-style-dent_box">2018/03/16 18:56:06 go-app-builder: Failed parsing input: parser: bad import &#8220;unsafe&#8221; in github.com/json-iterator/go/adapter.go from GOPATH</p>



<p><span class="rmarker">GAEでは、<strong>unsafeパッケージをインポートしちゃダメ</strong>ってことのようですが、Echoが参照しているライブラリでインポートしているんですよね。</span></p>



<p>色々試してみましたが、解決せず。</p>



<p>諦めて、情報が豊富なV2で試してみることに。</p>



<h2 class="wp-block-heading">EchoのV２でセットアップ</h2>



<p><span class="ymarker">V2だと無事にセットアップ出来ました！</span></p>



<p>下記のQiitaの記事の通りに進めれば無事にセットアップ出来ます。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://qiita.com/ytkhs/items/701279c43b33ce923613
</div></figure>



<p>補足するとしたら、Echoのバージョンの切替方法でしょうか。</p>



<p>バージョンの切り替えは、<strong>go get</strong>で<strong>Echo</strong>を取得していると<strong>Gitリポジトリ</strong>になっているので、<strong>Git</strong>の操作でバージョンを切り替える事ができます。</p>



<p><strong>Echo</strong>のディレクトリで、下記のコマンドで<strong>V2</strong>のブランチに切り替え。</p>



<p class="is-style-dent_box">git checkout V2</p>



<p>依存関係でエラーが出るので、下記のモジュールをクローンします。</p>



<p class="is-style-dent_box">https://github.com/rs/cors</p>



<p>これで無事に動きました。</p>



<h2 class="wp-block-heading">まとめ：本当はV3が使いたい</h2>



<p><span class="swl-marker mark_orange">一応動くようにはなりましたが、バージョンを下げて対応という結果でした。</span></p>



<p>これって、V３の開発が進めば解決するんですかね。</p>



<p>もしくは、単なる僕のミスでV３でもちゃんとセットアップできたりして…</p>



<p>GAE/Go/EchoV3でセットアップできた方がいれば教えていただきたいです。</p>



<h3 class="wp-block-heading">追記</h3>



<p>kashitakaさんよりコメントを頂きました、別のフレームワークのGinを使うという選択肢もありですね。</p>



<p><span class="ymarker">無理してEchoの古いバージョンを使うよりGinの最新版を使った方が良さそうです。</span></p>



<p>kashitakaさん、貴重な情報ありがとうございました。</p>



<p class="is-style-icon_info">※2018/3/20時点で最新のEchoのバージョンV3で動かせなかった事象です。<br>その後、V4がリリースされているので最新版のEchoでは本記事の問題は解決しているかもしれません。（未確認）</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dev-memo.net/gae_go_echo_version/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>【Go】JSONのパースが失敗する原因</title>
		<link>https://dev-memo.net/go_json_purse/</link>
					<comments>https://dev-memo.net/go_json_purse/#respond</comments>
		
		<dc:creator><![CDATA[キミヒラ]]></dc:creator>
		<pubDate>Fri, 23 Feb 2018 11:56:08 +0000</pubDate>
				<category><![CDATA[GO]]></category>
		<guid isPermaLink="false">https://dev-memo.net/?p=709</guid>

					<description><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2018/02/work-management-907669_1280-1024x669.jpg" class="webfeedsFeaturedVisual" /></p>Go言語で、JSONをパースする際に躓きましたので原因をまとめておきます。 「json.Unmarshal」でJSONパースする際のハマったポイントです。 マッピングのミス 単純なミスなのですが、変数の後ろのタグの記述に [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2018/02/work-management-907669_1280-1024x669.jpg" class="webfeedsFeaturedVisual" /></p>
<p>Go言語で、JSONをパースする際に躓きましたので原因をまとめておきます。</p>



<p><span class="swl-marker mark_yellow">「<strong>json.Unmarshal」</strong>でJSONパースする際のハマったポイントです。</span></p>



<h2 class="wp-block-heading">マッピングのミス</h2>



<p>単純なミスなのですが、変数の後ろのタグの記述にミスがあると、変数に値が代入されません。</p>



<p>僕は下記のようなミスをしました。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type Data struct {
	DataList []string `json:data`
}</code></pre></div>



<p><span class="rmarker">タグのKEY名をダブルクォーテーションで囲っていません。</span><br>これだと正しくマッピングされないので、空で返ってきてしまいます。</p>



<p>正しくはこうなります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type Data struct {
	DataList []string `json:&quot;data&quot;`
}</code></pre></div>



<p><span class="rmarker">混乱したのが、タグに指定した値が上記ように不正だと変数名でマッピングされるんです。</span></p>



<p>なので、タグが間違っているのにマッピングが成功しているように見えたりして余計に混乱してしまいました。</p>



<h2 class="wp-block-heading">型の不一致</h2>



<p><span class="rmarker">JSONのNumbers型をstringで受けてしまうと、正しくパースされません。</span><br>JSONの<strong>Numbers型</strong>と<strong>String型</strong>は下記のような違いです。</p>



<p><strong>Numbers型のJSON</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>{
  &quot;number&quot;: 111
}</code></pre></div>



<p><strong>String型のJSON</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>{
  &quot;number&quot;: &quot;111&quot;
}</code></pre></div>



<p><strong>Numbers型</strong>は、値がダブルクォーテーションで囲われていない数値のものです。</p>



<p><strong>Numbers型</strong>は、Go側では<strong>string型</strong>ではなく、<strong><em>json.Number型</em></strong>で受け取ると正しく動きます。</p>



<p><strong>Goの構造体</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type Data struct {
	Number     json.Number `json:&quot;number&quot;`
}</code></pre></div>



<p>これでOKです。</p>



<p>僕は、上記の２点の修正で無事にJSONをパースできました。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p><em><strong>json.Unmarshal</strong></em>でJSONをパースが失敗した時は下記を確認してみましょう。</p>



<ul class="is-style-check_list"><li>KEY名をダブルクォーテーションで囲っているか？</li><li>受け取るデータの型は合っているか？</li></ul>



<p>少しでも参考になれば幸いです。</p>



<p>最後までお読みいただきありがとうございました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dev-memo.net/go_json_purse/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GAE/GOの開発環境セットアップ方法</title>
		<link>https://dev-memo.net/go_setup/</link>
					<comments>https://dev-memo.net/go_setup/#respond</comments>
		
		<dc:creator><![CDATA[キミヒラ]]></dc:creator>
		<pubDate>Sat, 10 Feb 2018 05:02:08 +0000</pubDate>
				<category><![CDATA[GO]]></category>
		<guid isPermaLink="false">https://dev-memo.net/?p=683</guid>

					<description><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2018/02/street-art-2860113_1280-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>Go言語でGAEを開発する環境のセットアップ手順についてのメモです。 GoのインストールからGAEへのデプロイまでの一通りの手順を解説します。 基本的には、公式のチュートリアル通りに進めていきます。 事前準備 Googl [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://dev-memo.net/wp-content/uploads/2018/02/street-art-2860113_1280-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p>Go言語でGAEを開発する環境のセットアップ手順についてのメモです。</p>



<p>GoのインストールからGAEへのデプロイまでの一通りの手順を解説します。</p>



<p>基本的には、<a rel="noopener noreferrer" href="https://cloud.google.com/appengine/docs/standard/go/quickstart" target="_blank">公式のチュートリアル</a>通りに進めていきます。</p>



<h2 class="wp-block-heading">事前準備</h2>



<h3 class="wp-block-heading">Google Cloud SDKのインストール</h3>



<p>まずは、<strong>Google Cloud SDK</strong>のインストールから行います。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl" data-colset="col1"><div class="cap_box_ttl"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="lightbulb" class="svg-inline--fa fa-lightbulb " role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" width="1em" height="1em"><path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"></path></svg><span>Google Cloud SDKとは</span></div><div class="cap_box_content">
<p>ローカールサーバーでGO言語を実行したり、リモートサーバーへデプロイしたりするのに使います。</p>
</div></div>



<p>下記の公式リンクの手順通りにインストールします。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://cloud.google.com/sdk/docs/
</div></figure>



<p>インストールが終わると勝手にコマンドプロンプトが起動して、Google Cloud SDKの処理が走ります。</p>



<p>この時に、Googleアカウントへのログインも行われます。</p>



<h3 class="wp-block-heading">gcloudコンポーネントのインストール</h3>



<p>一通り処理が終わったら、そのまま開いているコマンドプロンプトに下記のコマンドを入力して<strong>gcloudコンポーネント</strong>をインストールします。</p>



<p class="is-style-dent_box">gcloud components install app-engine-go</p>



<h3 class="wp-block-heading">GOのインストール</h3>



<p>下記のURLからGOのインストーラーをダウンロードしてインストールします。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://go.dev/dl/
</div></figure>



<p>ここまで出来たら準備完了です。</p>



<p>さっそく動かしてみましょう。</p>



<h2 class="wp-block-heading">ローカルサーバーで実行</h2>



<h3 class="wp-block-heading">サンプルのダウンロード</h3>



<p>まずは、サンプルプロジェクトをダウンロードします。</p>



<p>Gitなら下記のコマンドで</p>



<p class="is-style-dent_box">git clone -b part1-helloworld https://github.com/GoogleCloudPlatform/appengine-guestbook-go.git helloworld</p>



<p>Gitがなければ、下記のリンクからzipのダウンロードでもOKです。</p>



<p><a rel="noreferrer noopener" href="https://github.com/GoogleCloudPlatform/appengine-guestbook-go/archive/part1-helloworld.zip" target="_blank">https://github.com/GoogleCloudPlatform/appengine-guestbook-go/archive/part1-helloworld.zip</a></p>



<h3 class="wp-block-heading">ローカルサーバー起動</h3>



<p>ダウンロード出来たらそのディレクトリへ移動しましょう。</p>



<p class="is-style-dent_box">cd helloworld</p>



<p>下記のコマンドでローカルサーバーで実行します。</p>



<p class="is-style-dent_box">dev_appserver.py app.yaml</p>



<p class="is-style-icon_info">僕のWindows環境ではこのコマンドが実行出来ませんでした。<br>実行するとアプリケーション選択のダイアログが出てきてしまいます。<br>pythonがインストールされていないのでpyファイルが実行出来ないのが原因でした。<br>Windowsの場合、Google Cloud SDKにpythonが含まれているはずなのですが、インストールできていなかったようです。pythonをインストールすることで、無事に解決しました。<br>参考：<a href="https://qiita.com/taiponrock/items/f574dd2cddf8851fb02c">Pythonをインストールする（for Windows）</a></p>



<p>コマンドが通ったら下記のURLで動作を確認出来ます。<br><a href="http://localhost:8080/">http://localhost:8080/</a></p>



<p><strong>Hello, world!</strong>が表示されればOKです。</p>



<p><strong>hello.go</strong>を変更すると、出力結果も変わるので色々試してみましょう。</p>



<h2 class="wp-block-heading">デプロイ</h2>



<p>最後に実際にサーバーへデプロイしてみます。<br>GAEでプロジェクトを作成して、そこに先程のサンプルコードをアップロードします。</p>



<p><a href="https://console.cloud.google.com/projectselector/appengine/create?lang=go&amp;st=true" target="_blank" rel="noopener noreferrer">GAEプロジェクト作成</a></p>



<p>ロケーションの選択と言語「GO」の選択までやれば、その後に始まるチュートリアルはやらなくても大丈夫です。</p>



<p class="is-style-icon_info">そのチュートリアルではGoogle Cloud Shellを使ってクラウド上で開発環境を構築します。<br>この記事ではローカルで開発してサーバーへアップロードする構成でのセットアップなのでとばします。</p>



<p>サンプルのyamlがあるディレクトリから下記のコマンドを実行してみましょう。</p>



<p>デプロイ</p>



<p class="is-style-dent_box">gcloud app deploy</p>



<p>表示</p>



<p class="is-style-dent_box">gcloud app browse</p>



<p>ブラウザにデプロイされたページが表示されます。</p>



<p>これでGOのセットアップは完了です。<br>お疲れ様でした！</p>



<h2 class="wp-block-heading">デプロイしたプロジェクトを削除</h2>



<p>念の為、料金発生を避けるためデプロイしたプロジェクトは削除しておきましょう。</p>



<p>下記のURLからプロジェクト毎に削除を行えます。<br><a href="https://console.cloud.google.com/iam-admin/projects" target="_blank" rel="noopener noreferrer">リソース管理</a></p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-8165411688183013"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-8165411688183013"
     data-ad-slot="6898168693"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ</h2>



<p>最低限必要なGOのセットアップでした。</p>



<p><strong>gcloudコマンド</strong>は頻繁に使うことになりそうなので参考になりそうなリンクを貼っておきます。</p>



<figure class="wp-block-embed"><div class="wp-block-embed__wrapper">
https://qiita.com/masaaania/items/7a83c5e44e351b4a3a2c
</div></figure>



<p>少しでも参考になれば幸いです。</p>



<p>最後までお読み頂きありがとうございました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://dev-memo.net/go_setup/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
