golang

gvmでgoのインストールエラーを解決

今までgoのバージョン管理システムとしてgoenvを使っていました。

他にgoのバージョン管理システムはないだろうかと探していたところ、goenvよりもスター数の多いgvmを発見したので、それに切替をしました。

macOS Catalinaでgvmのインストールを行ったのですが、まずは、XcodeとHomebrewが必要とのことで、あらかじめ入っていたので、その後の工程であるmercurialのインストールを行いました。

brew install mercurial

インストール完了後、gvmのインストールを行いました。

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer) 次に、いよいよgoのインストール作業なのですが、インストールコマンドを叩いてもエラーが表示されてインストールできませんでした。 その時に実行したターミナルのコマンド gvm install go1.12 原因を調べてみるとgvm経由でgoをインストールする際にもgoが必要とのことでした。 エラーの内容 go: command not found goのサイトからインストーラーのダウンロードは気持ち的にしたくなかったのでgvmのREADMEに書かれていたようにgoのバージョン1.4のバイナリーをインストールしました。 gvm install go1.4 -B gvm use go1.4 export GOROOT_BOOTSTRAP=$GOROOT go1.4のインストールが完了したので、いよいよ本命であるgo1.12のインストールを行ったところなんとエラーが発生しました。 gvm install go1.12 エラーの内容は下のような内容でした。 failed MSpanList_Insert XXXX XXXX XXX fatal error: MSpanList_Insert 検索をかけてみるとgoのバージョンが古いと発生するエラーで、go1.8のインストールを行った後、go1.12のインストールをしたら無事に完了しました。 gvm install go1.8 -B gvm use go1.8 export GOROOT_BOOTSTRAP=$GOROOT gvm install go1.12

#go #golang #gae 今さら人に聞けないGAE/GOでcollyを使う時の注意点

Google App EngineのGoでcollyを使ってHTTPリクエストをするプログラムを作ったのですが、
http.DefaultTransport and http.DefaultClient are not available in App Engine. See https://cloud.google.com/appengine/docs/go/urlfetch/
というエラーが発生しました。

ローカルで試した場合はうまくいったのに。

ちなみに、プログラムは下のような形です。

エラー内容を改めて確認してみると読んで字のごとくcollyがGoogle App Engineがサポートしていないメソッドを使ってしまったから発生。

なので回避する方法ってないのかなーっとドキュメントを眺めてみるとAppengineというメソッドを発見!

ひょっとしたら、ひょっとしたらと思い、再度、下のようにメソッドを追加してみました。

おそるおそる実行してみたらいけた!

やりました!

#go #golang 今さら人に聞けない日付(時刻)に日付(時刻)を加減する方法

タイトル通りになってしまうのだが、ある特定の日付ないし時刻に任意の日付または時刻を追加したり減らしたりする方法はあるのだろうか?

調査したところ、addメソッドを使えば実現できることがわかりました。

すごく簡単に実現できるので、これは便利!

#go #golang 今さら人に聞けない数値型を文字列型にする

数値型の変数を文字列型に変更するにはどうすればいいのだろうか?

具体的には下記のようにstrconv.Itoaメソッドを使えば実現できます。

素朴な疑問なんだけど、最後の「a」って何の略だろうか?

stringに変換するんだから「Itos」のような気がするんだけど。

asciiのaなのだろうか?

#go #golang 今さら人に聞けない日付の月をintにする

これは、これは!!!

こんなケースは初めてだ。

実は上のプログラムを実行すると数字の月が返ってくるのではなくて、なんと英語表記で返してきやがった。

そこで、純粋に、1月の場合なら1と返すようにするには、どうすればいいのか調べたところ、

という形で、intとしてキャストすればいいみたい。

ってか、JavaScriptもなぜか、-1されて月が返却されるんだけど、どうして、「1~12」って数字で返さないのだろうか?

なぞ過ぎる、この仕様。

#go #golang 今さら人に聞けない部分文字列の検索

JavaScriptのindexOfみたいに一部の文字列を含んでいるかどうか検索をかけてくれるメソッドないし関数ってあるのだろうか?

調べていたらあったので、試しに下のように組んでみました。

ずばり、Indexメソッドでした。

検索した結果、該当する文字がない場合は、-1を返すみたいです。

#go #golang 今さら人に聞けない日付の書式を整える方法について

go言語で日付をある特定のフォーマットないし、特定の書式にしたい場合はどうすればいいのだろうか?

調べた結果、下のように組めばフォーマットできるようだ。

とすると、
「2018年01月26日」
と表示してくれる。

なんて便利なんでしょう!