📝

Golandを使うべきちょっとマニアックな4つの便利機能

2022/05/18に公開

概要

Golangを勉強し始めて、エディタをいくつか使いましたが最終的にGolandに落ち着きました。

継続的に利用料がかかるのは痛いですが、開発生産性を考えるとお金を払ってでもGolandを使った方がいいなと感じています。

この記事では他のエディタでは標準でついていない && Golandを本格的に使うまで知らなかった機能を紹介しています。

便利機能一覧

JSON structの自動生成

JSONを扱うために焼き直し用の構造体を用意する必要がありますが、地味にめんどくさいです。

https://mholt.github.io/json-to-go/

こちらを使うと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