はじめに
最近イケイケなGo!
今回はVSCodeでGoを爆速開発するためのTipsを5つ(+おまけ1つ)紹介したいと思います。
自分もつい最近これらを知って、めっちゃ活用して開発効率を上げています!
良かったら参考にしてください。
(良いと思ったらLGTM頂けると嬉しいです😇)
Fill Struct
空の構造体にフィールドをセットしてくれてとても便利です。
よく使ってます。
使い方
空の構造体にカーソルが当たった状態で、Command Palette(F1
or Ctrl + Shift + P
)でGo: Fill struct
と入力。
例
package main
type person struct {
name string
age int
job string
}
func main() {
p := person{}
}
とあった場合に、以下のように自動生成してくれます。
person{}
にカーソルを当てておきます。
func main() {
p := person{
name: "",
age: 0,
job: "",
}
}
これで大きめ構造体でも簡単に宣言ができて便利ですね。
Generate tests
テストコードをある程度自動生成してくれます。
対応するテストファイルがない場合は、テストファイルも生成してくれます。
テストコードの実装って面倒なのでかなり重宝してます。
使い方
テストを実装したい関数を選択して、右クリックからGo: Generate Unit Tests For Function
を選択。
Command Paletteからでもできます。
例
func sum(x int, y int) int {
return x + y
}
とあって、sum関数のテストを実装する場合、以下のようにmain.go
と同じディレクトリにmain_test.go
を自動生成してくれます。
sum
を選択しておきます。
package main
import "testing"
func Test_sum(t *testing.T) {
type args struct {
x int
y int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := sum(tt.args.x, tt.args.y); got != tt.want {
t.Errorf("sum() = %v, want %v", got, tt.want)
}
})
}
}
TODO
の中は例えば以下のように書きます。
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
{
name: "1+2=3の確認",
args: args{
x: 1,
y: 2,
},
want: 3,
},
{
name: "1+(-2)=-1の確認",
args: args{
x: 1,
y: -2,
},
want: -1,
},
}
tests
の中のテストケースを回して、エラーがあった場合はt.Errorf("sum() = %v, want %v", got, tt.want)
でエラーメッセージを出力してくれるので申し分なし。
テスト実行
上記のテストはテストファイル上からワンクリックで実行できます。
こちらは使っている方も多いと思います。
以下の赤枠内のボタンをクリックすると、内容に応じたテストを実行できます。
Add Tags To Struct Fields
構造体に自動で構造体タグ(json:"name"
みたいなの)を付与してくれます。
APIサーバとして使っていて、APIのレスポンスを定義する時やjsonパースする時に便利。
使い方
構造体タグを付与したい構造体にカーソルが当たった状態で、右クリックからGo: Add Tags To Struct Fields
を選択。
例
type person struct {
Name string
Age int
Job string
}
とあった場合に、以下のように自動生成してくれます。
構造体内にカーソルを当てておきます。
type person struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
Job string `json:"job,omitempty"`
}
Generate interface stubs
interfaceからスタブを自動生成してくれます。
使い方
空のスタブを書いて改行し、Command Palette(F1
or Ctrl + Shift + P
)でGo: Generate interface stubs
と入力。
再度入力欄が出るので、(変数名) *(stubの構造体名) (interfaceのpackage名).(interface名)
と入力。
例
package car
// 関数名や引数は超適当です。。
type Car interface {
drive(int) string
stop(int, int) string
turnLeft(string) int
turnRight(string, string) (int, error)
}
type carImpl struct{}
とあった場合に、以下のように自動生成してくれます。
type carImpl struct{}
の一行下にカーソルを置いておきます。
2回目の入力ではc *carImpl car.Car
と入力。
go.mod
を置いておかないとpackageを認識しないので置いておく必要があります。
package car
type Car interface {
drive(int) string
stop(int, int) string
turnLeft(string) int
turnRight(string, string) (int, error)
}
type carImpl struct{}
func (c *carImpl) drive(_ int) string {
panic("not implemented") // TODO: Implement
}
func (c *carImpl) stop(_ int, _ int) string {
panic("not implemented") // TODO: Implement
}
func (c *carImpl) turnLeft(_ string) int {
panic("not implemented") // TODO: Implement
}
func (c *carImpl) turnRight(_ string, _ string) (int, error) {
panic("not implemented") // TODO: Implement
}
おまけ
ご存知の方も多いと思いますが、VSCode使っててGoの補完とかLintが効かなくなった場合は、Command PaletteからGo: Restart Language Server
と入力して実行するとだいたい解決すると思います。
さいごに
Twitterの方でも、モダンな技術習得やサービス開発の様子を発信したりしているので良かったらチェックしてみてください!
VSCode上でGoを開発するのに便利なTipsをQiitaにまとめました!
— やぎぬ😇行動力エンジニア (@yagi_eng) November 15, 2020
⬇️意外と知らないVSCode上でGoを爆速開発するための5つのTipshttps://t.co/a4DDLHOUZs
ちょくちょくTwitterでつぶやいていたやつです😇
自分もよく使ってるんですけどめちゃ捗ってます
Go開発に興味のある方は是非ご覧ください!
また、BOT開発を通じてGoとLINE BOTにまとめて入門する記事をZennに掲載していますので、良かったらそちらもご覧ください!
ZennでGoとLINE BOTの記事を書いてみました
— やぎぬ😇行動力エンジニア (@yagi_eng) November 7, 2020
⬇️BOT開発を通じてGoとLINE BOTにまとめて入門するhttps://t.co/QqsEESJMKa
5ステップに分け、「Hello Worldから始めて、飲食店検索ができるLINE BOTの実装まで」を解説しています
GoやLINE BOTに興味のある人は是非読んでみてください😇
24,000字超え😇