The Hitchhiker's Guide to GoLand

# はじめに

GoLand には「The Hitchhiker's Guide to GoLand」というチュートリアルがあります。
GoLand を使っている割には把握している機能はほんの一部な気がするので、このチュートリアルを通して「知らなかった GoLand 機能の学習」や「知っていた機能の補強」を得ます。

----
## 環境

* macOS Catalina 10.15.2
* GoLand 2019.3.1

----
# TL;DR

1. ショートカットを通して GoLand の便利機能の一端を知るチュートリアル
2. チュートリアルメニューと導入はこんな感じ
3. 個人的に有益だったチュートリアルの紹介

----
# The Hitchhiker's Guide to GoLand お品書き

チュートリアルは全部で 16 項目あります。

1. Actions
2. Select
3. Comment Line
4. Basic Completion
5. Smart Type Completion
6. Method-Like Function Completion
7. Postfix Completion
8. Completion with Tab
9. Rename
10. Extract Variable
11. Inline
12. Extract Function/Method
13. Code Formatting
14. go fmt
15. Implement Missing Methods
16. Format String Argument
 
----
# チュートリアルのはじめ方と冒頭紹介
GoLand 起動スプラッシュ後に表示される Welcome ウィンドウの `The Hitchhiker's Guide to GoLand` をクリックすると、
ホームディレクトリ配下にお勉強用の GoLand プロジェクトが自動的に作られます。( ~/GolandProjects/LearnProject )
<img width="771" alt="ss-welcome-to-goland.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/04ca2067-28dd-20be-312e-7e0c19ea8436.png">
左ペインに学習内容の目次リンク、右ペインのエディタビューには自動生成されたソースが表示されます。
<img width="1394" alt="ss-the-hitchhikers-guide-to-goland-top.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/3d053060-2438-b95f-d509-408578196e6a.png">
左上ペインの英語を見てみると、「最も便利なショートカットの１つはアクションの検索」「`⌘⇧A` を試してみて」とあります。やってみます。
<img width="1066" alt="ss-the-hitchhikers-guide-to-goland-find-action.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/37a8f3f8-98cd-e23b-019d-37691e6bc0c5.png">
なにやら検索バーのようなものが表示されるとともに、左上ペインの文章がグレーアウトされ、チェックマークが付きました。
また、元の文章の下に新たに「`about` と打ってみろ」と出てきました。
なるほど、こうやって step-by-step で GoLand を学習していく感じなんですね。
ちなみに左ペインの `All Topics` リンクをクリックすると、進捗がわかるようになっています。
<img width="777" alt="ss-the-hitchhikers-guide-to-goland-all-topics.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/d56a5cb2-4236-edce-568a-bd1449feb391.png">

----
# チュートリアルを通して得た知見

## ショートカットキー

### command + shift + return ( Complete Current Statement )

`4. Basic Completion` で登場。
カーソルが行のどの位置にあっても、インデントを維持しつつ次の行にカーソルが移動するショートカットです。
カーソルを行末まで移動させなくてもいいので効率が上がります。

### control + shift + space ( Smart Type )

`5. Smart Type Completion` で登場。
通常の候補リスト (control + space) にフィルタリングした候補を表示するショートカットです。
どちらも具体的なリスト条件が不明なので画像を載せます。

* control + space の場合
<img width="641" alt="ss-the-hitchhikers-guide-to-goland-smart-type-completion-nomarl.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/90632d1b-8796-6985-b15d-45d650f6ca37.png">

* control + shift + space の場合
<img width="423" alt="ss-the-hitchhikers-guide-to-goland-smart-type-completion-smart.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/40759b16-1d5f-b6ce-ca27-12a1eafb410d.png">
Smart Type でノイズが減るので効率が上がります。

### control + space ( x 2 stroke )

`6. Method-Like Function Completion` で登場。
ドットの直前の要素を引数に取る関数候補を表示します。
control キーを押しっぱなしの space キー ２ 連打で発動。
( ドットの直前が変数の場合も似たようなことができます。その場合は control + space で発動 )
「こういうのもあるのか」程度に。
![ss-the-hitchhikers-guide-to-goland-method-like-function-completion.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/87eb49dd-051e-c609-66ef-673b85bcecd9.gif)

### command + option + n

`11. Inline` で登場。
冗長な変数を削除します。
リテラル部分をコピペして元のコードを削除する、といった操作をワンアクションでできます。
「変数で受けたけどベタで書き直す」というリファクタ作業に便利です。
![ss-the-hitchhikers-to-guide-inline.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/32a4356c-fe9d-b842-998b-57aa7d8dc359.gif)
これと逆の機能は `10. Extract Variable` で、`command + option + v` があります。

### command + option + m

`12. Extract Function/Method` で登場。
選択行、カーソル位置など文脈を読んでその部分を関数化します。
これもカット＆ペースト等が省略できて効率的です。
カーソルが行末にあると、その行を関数化。
カーソルが関数名上にあると、その関数を返す関数にするか、その行を関数化するかの選択ができます。
複数行選択している場合は、それが関数化されます。
「１メソッドが多機能化してきたから関数に切り出すリファクタ」の際に便利です。
![ss-the-hitchhikers-to-guide-extract-function.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/2c4591f2-ff3c-29e1-2ead-01e3a58b286c.gif)



----
## ショートカットキー以外

### 候補リストから選択したもので上書き

`8. Completion with Tab` で登場。
タブキーで上書きとなります。カーソルが単語上のどこにあってもうまいこと上書きしてくれます。
例えば `Printf` を `Println` に変更する際、Enter キーを押してしまって `PrintfPrintln` みたいになってしまうことが多々あったので方法がわかってよかったです。
( 動画も 1 回目は手癖でミスったパターンです、、 )
![ss-the-hitchhikers-guide-to-goland-completion-with-tab.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/4400d997-c066-a8b3-5a9e-35e74f2f5d70.gif)

### 文字列フォーマット

`16. Format String Argument` で登場。
デバッグの際に `Printf` に当て込む変数指定が楽になります。
`option + return` でコンテキストメニューを表示し、`Add format string argument` を選択します。
![ss-the-hitchhikers-to-guide-format-string-argument.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549453/06f81976-deb2-7108-223d-09b70a98013b.gif)


次は `GoLand 2019.2` の新機能チュートリアル ( [The Hitchhiker's Guide to GoLand 2019.2](https://qiita.com/sokeusu/items/6478d3f1377651f5e0df) ) です。

以上です。