Goland使いこなせてない人向け tips 5選

本記事は [Fringe81 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/fringe81)の1日目です。

※追記： [続・Goland使いこなせてない人向け tips 5選](https://qiita.com/mtoyoshi/items/33064a60f8ec4ed33872)を書きました。

現在私が担当している[Unipos](https://unipos.me/ja/)というピアボーナスサービスのサーバーサイドではScalaとGoを採用しており、それぞれIntelliJとGolandを使って開発しています。

そこで、2018年11月20日に開催されたJetBrains Night Tokyo 2018に参加してきました。
主にGolandについて仕入れたtipsのうち日々の開発で定着してきたものを5つほど紹介したいと思います。

# tips1: Postfix Completionを使う

## reterr

ioutil.WriteFileは戻り値がerrorな関数です。
ということは、

```go
if err := ioutil.WriteFile(...); err != nil {
  return err
}
```

というお決まりのコードを書くことになると思いますが、今回はWriteFile関数の最後で `.reterr` としTabを打ってみましょう。

![iferr.gif](https://qiita-image-store.s3.amazonaws.com/0/159/ad7cf419-e7df-7c5b-ceb9-07dca4a9f186.gif)

一気に展開されますね！

## var

ioutil.ReadDirは戻り値が([]os.FileInfo, error)な関数です。
今度は関数の最後で `.var` としTabを打ってみましょう。
関数の戻り値を変数で受けるコードが展開されました。

![var.gif](https://qiita-image-store.s3.amazonaws.com/0/159/1ec7d6fc-8d21-c42b-9ea6-237571d45344.gif)

errに対して先程の `reterr` を組み合わせることも可能です。

## len

Golangでは配列の長さを得るには `len(ary)` のように書きますが、Scalaでは `ary.length` のように記述します。
本来はスタイルが異なるわけですが、Golandでは `.len` が用意されているのでこれを利用すれば同じノリで記述することが可能です。

![len.gif](https://qiita-image-store.s3.amazonaws.com/0/159/93e587c4-7d09-8142-664d-95c7a02f9dff.gif)

## pointer

Golang始めたばかりの頃、ポインタを得るのって `&` だったっけ？ `*` だったっけ？となる時なかったでしょうか。
そんな方には `.pointer` （または単に `.p`）を!

![pointer.gif](https://qiita-image-store.s3.amazonaws.com/0/159/55ee431b-6829-b9fc-30d2-de987b74450b.gif)

# tips2: Fill structを使う

構造体に値を設定していく時、数が多いものだと何度も定義を見に行く、ということをしていたのですが、とりあえず全項目をデフォルト値で入力してしまう、ということができる機能があります。

alt + Enterで立ち上がるメニューから `Fill struct recursively` を選んでみましょう。

![fill.gif](https://qiita-image-store.s3.amazonaws.com/0/159/3328df9f-4b62-4e41-cb98-9d367ba6a691.gif)

# tips3: Scratch File
ふとした時に、ちょっとしたコードを動かして確認したいときがあります。
そんな時でも別のプロジェクトを起動したりオンラインのplaygroundへ行ってコードを書いたりしなくても実行できる機能があります。

Shiftを2回押して `Scratch File` というActionを実行することで（動画ではActionタブへ移動していますが、移動せずにAllのままでも可能）新しいmain関数が用意されたファイルを得ることができます。

![scratch.gif](https://qiita-image-store.s3.amazonaws.com/0/159/6a5802df-04bc-4569-a250-d45b327a8d66.gif)

# tips4: Quick Documentationを使う

プログラミング中にGoDocを確認したい時があります。
そんな時は関数を選んでF1を押すか[View]メニューの[Quick Documentation]を選択することでGoDocの内容が立ち上がります。
Golandから出ることなく確認することができて便利ですね。

また、その中のExampleリンクをクリックするとGoDocで記述されていたサンプルコードが、先程のScratch Fileとして起動します。
もちろん編集することも実行することも可能です。

![quick.gif](https://qiita-image-store.s3.amazonaws.com/0/159/6d432e88-95b3-6775-3a62-98b3c8bf325f.gif)

# tips5: 複数行TODOを使う

TODOコメント機能はよく使うのではないでしょうか。
最新の2018.3からはTODOコメントの複数行対応がアナウンスされました。
といっても単に書いただけでは表示されないのですが、インデントすることで２行目・3行目の内容もTODO表示されるようになりました。
これでなんのTODOかを示すために1行に長い文章を打つ必要がなくなりました。

![todo.gif](https://qiita-image-store.s3.amazonaws.com/0/159/78e9a67c-8ae1-dce0-3060-33f1d9ecc80c.gif)

# 番外編: JetBrains TOOLBOXを使う

コーディング時のtipsではないですが、番外編としてGolandのインストール方法について。
Golandをインストールするには、JetBrains TOOLBOXをインストールし、そのツール上から必要なIDEを選んでインストールするというスタイルを推奨しているようです。

EAP版をインストールして試してみたり、その後で安定版に戻したりすることや、稼働のためのメモリ設定、各IDEのプロジェクトを開くことなどが簡単にできるようになっています。

<img width="491" alt="スクリーンショット 2018-11-30 0.53.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/159/5532a6d6-b6ad-0243-536d-056b9289aeba.png">