🔨
Goで実装を行う際に使用しているツール
始めに
普段Goの実装を行う際に使用しているツールがあるので簡単にですが紹介します。
気になったものがあったらぜひ試してみてください!
gotests
既存のコードに対してGoテストのひな型を作成できます。
以下のようなコードがあるとします。
main.go
package main
func fullName(firstName, lastName string) string {
return firstName + lastName
}
gotests
コマンドを実行する。
gotests -all -w main.go
下記のようなファイルを作成してくれる。
main_test.go
func Test_fullName(t *testing.T) {
type args struct {
firstName string
lastName string
}
tests := []struct {
name string
args args
want string
}{
// TODO: Add test cases.
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := fullName(tt.args.firstName, tt.args.lastName); got != tt.want {
t.Errorf("fullName() = %v, want %v", got, tt.want)
}
})
}
}
gomodifytags
構造体フィールドのタグを更新、追加、削除できます。
下記のような構造体があるとします。
main.go
package main
type User struct {
Id int
Name string
Age int
}
Userに対してjsonダグを付与する。
gomodifytags -file main.go -struct User -add-tags json -w
下記のようにjsonタグが付与される。
main.go
package main
type User struct {
Id int `json:"id"`
Name string `json:"name"`
Age int `json:"age"`
}
impl
インタフェースを実装するためのメソッドスタブを生成します。
レシーバーとインタフェースを指定する。
impl 'h *Hoge' error
下記のようなスタブを作成してくれます。
func (h *Hoge) Error() string {
panic("not implemented") // TODO: Implement
}
goplay
指定したファイルをThe Go Playgroundで動かせるようにする。
ファイルを指定してgoplay
コマンドを実行する。
goplay main.go
dlv
Goのデバッガツール
下記のコマンドでmain.goのデバッグを行える。
dlv debug main.go
デバッグ開始。
Type 'help' for list of commands.
(dlv)
packageがmainのmain関数にブレークポイントを設定する。
(dlv)break main.main
Breakpoint 1 set at 0x10cdc78 for main.main() ./main.go:13
実行する。
(dlv) continue
> main.main() ./main.go:13 (hits goroutine(1):1 total:1) (PC: 0x10cdc78)
8: Id int `json:"id"`
9: Name string `json:"name"`
10: Age int `json:"age"`
11: }
12:
=> 13: func main() {
14: var user User
15: user.Id = 1
16: user.Name = "Bob"
17: user.Age = 20
18:
nextで次の行まで処理を進められる。
(dlv) next
> main.main() ./main.go:14 (PC: 0x10cdc8f)
9: Name string `json:"name"`
10: Age int `json:"age"`
11: }
12:
13: func main() {
=> 14: var user User
15: user.Id = 1
16: user.Name = "Bob"
17: user.Age = 20
18:
19: var a string
goimports
インポートが不足しているものを追加し、参照されていないものを削除してくれる。コードのフォーマットもそろえてくれる。
main.go
package main
import "log"
func main() {
fmt.Println("hello")
}
goimports
を実行。
goimports -w -l main.go
インポートの過不足を解決してくれて、フォーマットもそろえてくれる。
main.go
package main
import "fmt"
func main() {
fmt.Println("hello")
}
Discussion