📝
Golandを使うべきちょっとマニアックな4つの便利機能
概要
Golangを勉強し始めて、エディタをいくつか使いましたが最終的にGolandに落ち着きました。
継続的に利用料がかかるのは痛いですが、開発生産性を考えるとお金を払ってでもGolandを使った方がいいなと感じています。
この記事では他のエディタでは標準でついていない && Golandを本格的に使うまで知らなかった機能を紹介しています。
便利機能一覧
JSON structの自動生成
JSONを扱うために焼き直し用の構造体を用意する必要がありますが、地味にめんどくさいです。
こちらを使うとJSONから構造体を出力してくれますが、ブラウザを開かずにGolandならエディタのみで同じことを実現できます。
// https://www.ibm.com/docs/ja/datapower-gateway/2018.4?topic=json-examples
{
"name": "John Smith",
"sku": "20223",
"price": 23.95,
"shipTo": {
"name": "Jane Smith",
"address": "123 Maple Street",
"city": "Pretendville",
"state": "NY",
"zip": "12345"
},
"billTo": {
"name": "John Smith",
"address": "123 Maple Street",
"city": "Pretendville",
"state": "NY",
"zip": "12345"
}
}
GolandでのJSON structの自動生成方法
JSONをペーストすると次のポップアップが出てきてYesすると構造体が自動生成されます。
type T struct {
Name string `json:"name"`
Sku string `json:"sku"`
Price float64 `json:"price"`
ShipTo struct {
Name string `json:"name"`
Address string `json:"address"`
City string `json:"city"`
State string `json:"state"`
Zip string `json:"zip"`
} `json:"shipTo"`
BillTo struct {
Name string `json:"name"`
Address string `json:"address"`
City string `json:"city"`
State string `json:"state"`
Zip string `json:"zip"`
} `json:"billTo"`
}
エラーハンドリングの自動生成
Golangでは以下のようなコードを何度も書きます。
if _, err := doSomething(); err != nil {
return err
}
something, err := doSomething()
if err != nil {
return err
}
Golandでのエラーハンドリングの自動生成
関数の後に.
を入力するとエラーハンドリングするコードを自動生成してくれます
errorのみをチェックするパターン
if _, err := doSomething(); err != nil {
return err
}
errorをチェックしつつ返り値を後で使うパターン
something, err := doSomething()
if err != nil {
return err
}
option + enterで自動修正
Golandでは動作上問題ないが、最適とは言えないコードに対して警告を出してくれます。
このようにカーソルを合わせることで警告内容を表示できます。
警告内容の箇所を探すには以下の方法で可能です。
- ファイル内であれば
F2
で警告箇所までジャンプできる - エディタ下のProblemsタブからプロジェクト全体の警告を検索できる
さらに軽微な修正の場合はoption + enter
で自動修正することができます。
Golandの警告で
- 不要だけどexportedされているstrcutやfunction
- エラーハンドリング忘れ
- 外部パッケージからもらったerrorのwrap忘れ
などといった、うっかりやっちゃいがちなミスを自動で検知することができます。
interfaceを満たすstructの自動生成
interfaceを満たすstructを自動生成してくれます
type HogeInterface interface {
hoge() string
fuga() int
}
ctrl + i
を押すとinterfaceを選択できます
すると自動でメソッド定義を生成してくれるので、一旦interfaceを満たさせて、plantumlを生成しながら設計をしたい場合などに便利です。
type createdStruct struct{}
func (createdStruct) hoge() string {
//TODO implement me
panic("implement me")
}
func (createdStruct) fuga() int {
//TODO implement me
panic("implement me")
}
Discussion