我对Golang相对较新,在之前的项目中使用了Node.JS和AngularJS,并且Golang对项目结构非常痴迷。我们的Go代码存在于一个存储库中,该存储库还包含我们的HTML,CSS和JS代码,因此我们的" web UI"是单一结账。 Go服务器提供静态页面,让AngularJS完成繁重的客户端,并提供相当复杂的RESTful API,用于与一块嵌入式硬件进行交互。我们在Go服务器代码中使用本地包含来解决代码实际上不在GOPATH中的事实。文件夹结构大致(子文件夹未显示):
/ <-- repo root, checked out wherever you want (not in GOPATH)
fonts/
scripts/ <-- all the AngularJS code
server/ <-- all the Go code
styles/
views/ <-- all the HTML code
我现在正在使用go-swagger库从Go服务器代码中的注释生成Swagger规范,因为Swagger UI提供了一个方便的UI来与我们的服务器API进行交互。但是,我发现,如果您的代码不在GOPATH中,则无法使用go-swagger解析器的很大一部分。如果我将服务器文件夹复制到GOPATH src目录并在那里运行,我就可以开始工作了,但是每次我更新API或添加新路由时我都不想这样做。
我想我必须对文件夹结构或构建过程进行一些更改,但我想了解最合乎逻辑的前进方法。理想情况下,我们会向Gruntfile添加一个新任务,通过调用go-swagger生成swagger规范,并将该规范复制到Swagger UI的默认位置,以便我们可以为每个构建提供正确的API规范。我理解任务应该如何运作,但它不适用于我们当前的项目结构。所以: