Как пойти: генерировать строковые константы из нескольких пакетов? - PullRequest
1 голос
/ 01 апреля 2019

У меня есть такая структура:

.foo/bar/constants.go
.foo/constants.go
.main.go 

В main.go Я заявляю тип:

package agepack
type EventType uint
//go:generate stringer -type EventType
const (
    FirstType EventType iota
    SecondType
    ....
)

В каждом constants.go есть что-то вроде этого:

package foo
const (
   OneMoreType agepack.EventType = 100 + iota
)

Как я могу создать stringer со значениями из всех пакетов?

1 Ответ

1 голос
/ 01 апреля 2019

golang.org/x/tools/cmd/stringer не поддерживает это.Цитирование из документа:

Без аргументов обрабатывает пакет в текущем каталоге.В противном случае аргументы должны указывать имя одного каталога, содержащего пакет Go, или набор исходных файлов Go, представляющих один пакет Go.

Самое простое решение - поместить все значения перечисления в один и тот же пакет.Вы можете использовать отдельные файлы, но они должны быть в одном пакете.

Если вы хотите / должны использовать несколько пакетов, вы можете сделать это только с stringer, если вы используете разные типы, каждый из которых определен в пакете.в котором вы перечислите константы.

...