[番外篇]Go Generate & Makefile(Day25)

文章同步更新於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的都跑一遍了
go generate

那如果未来会忘记这段指令怎麽办呢
这时候,就用到另一个小工具
Makefile
这个工具可以帮我们把很多系统上的使令统一放到一个档案中,然後透过

make xxxxx

来执行
那这个档案写法如下

.PHONY: generate run  
  
run:  
  go run .  
  
generate:  
  go generate ./...

然後在你存放Makefile的路径下执行

make generate

他就会帮你执行

go generate ./...

Makefile

至於.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


<<:  撰写http request 的测试(golang)(Day24)

>>:  6. 来玩终端机

2021 — 找工作 (上)

原本是计画要2020换工作,结果因为疫情的关系打算延後了一年在开始投履历跟面试~ 时间线 2021 ...

day29: functors

今天我们要来了解 javascript FP 中的 functors 概念。 他的概念就是类似 OO...

[Day10] placeholder for d10

写在前面 placeholder for d10 placeholder for d10 place...

Day17 NiFi - 与 AWS S3 & AWS lambda 对接设定

接下来从今天开始,会花个几天的时间带大家来实作一下关於对 AWS Service 服务的对接,而今天...

Day 3 - 配置环境

大家好,今天来教大家如何配置文件。 首先 首先,先确认您已经将系统更新到Big Sur以上(避免出现...