Клиент не может построить в Гоа

Я получаю ошибки при создании следующего проекта Гоа... что я делаю не так?

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
)

Обновление: после дополнительных тестов выяснилось, что:

  1. Имена методов должны быть уникальными для всего API. Итак, в моем примере выше srvc1 мог иметьMethod("srvc1Show"..., и srvc2 мог иметь Method("srvc2Show"... например.

  2. Точно так же кажется, что не может быть "глобальных" типов или ResultTypes... то есть один и тот же тип не может использоваться более чем в одной службе. Типы и ResultTypes должны быть уникальными для каждой службы.

Это правильно?

0 ответов

Другие вопросы по тегам