Клиент не может построить в Гоа
Я получаю ошибки при создании следующего проекта Гоа... что я делаю не так?
package design
import (
. "goa.design/goa/v3/dsl"
)
var _ = API("showex", func() {
Server("showex", func() {
Services("srvc1", "srvc2")
Host("development", func() {
URI("http://localhost:8000")
URI("grpc://localhost:8080")
})
})
})
var _ = Service("srvc1", func() {
HTTP(func() {
Path("/srvc1")
})
Method("show", func() {
Payload(func() {
Field(1, "id", String)
Required("id")
})
Result(Srvc1Result)
HTTP(func() {
GET("/{id}")
Response(StatusOK)
})
GRPC(func() {
Response(CodeOK)
})
})
})
var _ = Service("srvc2", func() {
HTTP(func() {
Path("/srvc2")
})
Method("show", func() {
Payload(func() {
Field(1, "id", String)
Required("id")
})
Result(Srvc2Result)
HTTP(func() {
GET("/{id}")
Response(StatusOK)
})
GRPC(func() {
Response(CodeOK)
})
})
})
var Srvc1Result = ResultType("application/vnd.xxx.srvc1", func() {
Attributes(func() {
Field(1, "id", String)
})
})
var Srvc2Result = ResultType("application/vnd.xxx.srvc2", func() {
Attributes(func() {
Field(1, "id", String)
})
})
Сервер работает нормально, но клиент не работает:
> go build ./cmd/showex-cli
gen/http/srvc2/client/encode_decode.go:67:10: undefined: ShowResponseBody
gen/http/srvc2/client/types.go:16:30: undefined: ShowResponseBody
Если я изменю имя одного из методов "show" на, например, "show1", я больше не получу сообщение об ошибке.
ПРИМЕЧАНИЯ:
1. версия go: 1.13.4 darwin / amd64
2. Я создал приложение согласно https://goa.design/learn/getting-started/, шаги:
Настроить:
> mkdir -p showex/design
> cd showex
> go mod init showex
> go get -u goa.design/goa/v3
> go get -u goa.design/goa/v3/...
> go mod tidy
После размещения вышеуказанного кода в design/api.go
:
> goa gen showex/design
> goa example showex/design
> go build ./cmd/showex
> go build ./cmd/showex-cli
go.mod:
module showex
go 1.13
require (
github.com/golang/protobuf v1.3.2
github.com/grpc-ecosystem/go-grpc-middleware v1.1.0
goa.design/goa/v3 v3.0.7
google.golang.org/grpc v1.20.1
)
Обновление: после дополнительных тестов выяснилось, что:
Имена методов должны быть уникальными для всего API. Итак, в моем примере выше srvc1 мог иметь
Method("srvc1Show"...
, и srvc2 мог иметьMethod("srvc2Show"...
например.Точно так же кажется, что не может быть "глобальных" типов или ResultTypes... то есть один и тот же тип не может использоваться более чем в одной службе. Типы и ResultTypes должны быть уникальными для каждой службы.
Это правильно?