GoLandを使いましょう 2020冬


はじめに

この記事はアドベントカレンダー Go5の22日目の記事です。

みなさん、Goのエディタ何を使っていますか?
Vim? Vscode?

そうですねGolandを使いましょう。

去年も同じタイトルの記事を書いたのですが、最新バージョンも2020.3となり新機能が続々と加わっています。
基本的なセットアップの再掲とともに新機能で僕が良いなあと思ったものをピックアップして行きたいと思います。

GoLandセットアップ

前提環境

mac
windowsやLinuxでも大体同じだと思います。多分。

Xcode

macで何かしら開発環境を入れるなら何も考えずに入れておきましょう。
インストール長いので最初にやっておきます。
インストールが完了したら下記コマンド。

xcode-select
echo "export SDKROOT=\"$(xcrun --sdk macosx --show-sdk-path)\"" >> ~/.bash_profile

購入

本家で買っても良いですが、国内代理店のサムライズムさんで買うと200円くらい安いです。
https://samuraism.com/jetbrains/goland
https://www.jetbrains.com/ja-jp/go/buy/#commercial?billing=yearly

どちらで買っても以降のアカウント管理はJetBrainsのマイページで行うことになるのでそこら辺は変わりません。

(サムライズムさんで購入すると購入完了メールが届くまで5分くらいかかるかな?)

買うと以降は下記の流れで購入したライセンスの確認ができるようになります。

  • 購入完了メールにpdfがついてくる
  • pdfにマイページのワンタイムなリンクがついてくる
  • リンク踏んでJetBrainsにログイン(or新規登録&ログイン)

筆者は日頃複数言語使うのでAll Products Packを買っています。JetBrainsのほぼ全てのIDEを使えるのでおすすめです。

無料体験版ももちろんあるよ

インストール

GoLandをそのまま単体でインストールしても良いんですが、Toolbox App
を使いましょう。

IDEの自動アップデートが簡単になります。
他にもJVMのヒープサイズの変更など細かい設定ができるようになります。

アクティベーション

Toolbox App上でJetBrainsアカウントにログインすることでアクティベーションできます。

ブラウザ経由でログインするのですが、最終的にjetbrains://toolbox/jba/auth?code=xxxにリダイレクトされます。
この際、もしかしたら下記のような警告画面が表示されるかもしれません。
ツールにリダイレクトされるだけなので、このまま送信をクリックしてしまってください。

anyenv,goenv

GoLand経由でGoインストールもできるんですが、CLIオペレーションも考慮してanyenv,goenvの使用をお勧めします。

anyenvインストール
こちら参照
https://github.com/anyenv/anyenv#1-install-and-configure-anyenv

anyenv-updateも入れる
https://github.com/znz/anyenv-update#installation

goenvのインストール

anyenv install goenv
exec $SHELL -l

Goインストール

echo "export GOENV_DISABLE_GOPATH=1" >> ~/.bash_profile
source ~/.bash_profile
anyenv update #アップデート情報が更新される
goenv install -l #現在インストール可能なバージョンが表示
goenv install 1.15.6 #最新バージョンをインストール

goenvの更新スピードについて

goenvがホストされているリポジトリtoshi0607さんが怒涛のごとくPRを投げていますが、たまにちょっとマージまで時間差が発生することがあります。そんな時は双方にスポンサーするか👍しましょう。

起動〜コーディング〜テスト実行

というわけで諸々準備できたので起動しましょう。

起動したらNew Project -> Go modulesを選択し、GOROOTは先ほどインストールしたGoのディレクトリを選択します。

${HOME}/.anyenv/envs/goenv/versions/1.15.6

Createをクリックします。

そして下記のファイルを作りましょう。

hoge/
 |- go.mod #最初からある
 |- hoge.go #これ作る
 `- hoge_test.go #作る
hoge.go
package hoge

import "fmt"

func Do(input string) error {
    if input == "yeah" {
        return nil
    }
    return fmt.Errorf("ahhh")
}
hoge_test.go
package hoge

import "testing"

func TestDo(t *testing.T) {
    // 配列にテストケースを記載
    testCases := []struct {
        name  string
        input string
        isErr bool
    }{
        {
            name:  "success",
            input: "yeah",
            isErr: false,
        },
        {
            name:  "error",
            input: "ahhh",
            isErr: true,
        },
    }
    for _, testCase := range testCases {
        t.Run(testCase.name, func(t *testing.T) {
            err := Do(testCase.input)
            isErr := err != nil
            if isErr == testCase.isErr {
                t.Log("good!")
            } else {
                t.Error("bad!")
            }
        })
    }
}

おもむろに↓な感じでデバッグポインタを作ってDebug go test hogeをしてみましょう

テストできましたね。デバッグポインタ部分で止まったりしましたね。人権をゲットできました。

今回は配列testCasesにテストケースを記載しているのですが、GoLandはテーブルテストに対応しているのでテスト単位ではなくレコード単位でテスト再実行できます。

これで一通り完了です。おつかれさまでした。

GoLandのメリット

上記の通り、Vim, VSCodeはイチから環境構築する楽しみがあると思いますが、GoLandは最初から大体良い感じに仕上がってるので初回インストールからプロダクトコードを書いていくことができます。

もちろんPluginのマーケットもあるので、IDE上から欲しい機能を追加インストールできます。

新機能

かなりの頻度でアップデートされ、2020.3ではgorutine, テスト周りの機能が拡充されました。
https://www.jetbrains.com/ja-jp/go/whatsnew/

個人的にはテーブルテストtestifyサポートgoroutineダンプの検索方法改善がアツいです。

最後に

比率としてはJetBrains製品はなかなかですが、みなさんGoLandを使いましょう。


[引用]https://job-draft.jp/articles/419

以上