文章同步更新於https://kevinyay945.com/smart-home-tutorial/025
因為接下來如果要進行測試,勢必得在建立每個interface的時候都要新增一次mock interface,而且未來如果這個interface要擴增的時候,又得再重新輸入一次指令,所以在gomock官網中有提到,如果想要批次建立mock file,可以透過
go generate
來進行批量產生
go generate的原理是透過註解的方式,來執行後面的語法
所以可以搭配上mockgen一起使用
就可以如下
//go:generate mockgen -destination=mock/command.go -package=modelMock . ICommand
type ICommand interface {
Get() ([]schema.Command, error)
Save(input *schema.Command) (schema.Command, error)
UpdateOne(commandUuid string, command *schema.Command) (schema.Command, error)
Delete(commandUuid string) error
}
然後到根目錄執行
go generate ./...
而這個./...的意思是
./ => 當前目錄
... =>下面目錄的所有字串,以及所有路徑
https://stackoverflow.com/questions/28031603/what-do-three-dots-mean-in-go-command-line-invocations
只要這樣做,就可以將所有資料夾中檔案有go generate的都跑一遍了
那如果未來會忘記這段指令怎麼辦呢
這時候,就用到另一個小工具
Makefile
這個工具可以幫我們把很多系統上的使令統一放到一個檔案中,然後透過
make xxxxx
來執行
那這個檔案寫法如下
.PHONY: generate run
run:
go run .
generate:
go generate ./...
然後在你存放Makefile的路徑下執行
make generate
他就會幫你執行
go generate ./...
至於.PHONY是什麼呢
因為這個Makefile除了執行指令,其實主要是拿來做compile用的,所以會建議,如果你在執行的指令,如果她就只是指令,而不是檔案的話,就把它放到.PHONY後面,因為放在.PHONY裡的內容,Makefile在執行的時候,才會去辨別他有沒有改變
舉個例子
如果剛好有個檔案叫做generate
然後你第一次執行
make generate
他會去正常實行 go generate ./...
但第二次執行時
因為generate沒有在.PHONY中,所以Makefile在判斷的時候,就會覺得你的generate沒有變動,就不會去執行go generate ./...了
詳細的內容可以到網路上查看更多資料,我這邊就僅用在執行指令
附上這次的comment紀錄
https://github.com/kevinyay945/smart-home-backend/tree/v0.5.2