[О блоге]
[наверх]
[пред]
[2021-11-20 17:54:54+03:00]
[9950296170be27b8fbbc4b55423e8dd1d37babaf]
Темы: [go][tip]
go stringer
goredo оказался первым проектом где я использовал go generate и stringer
утилиту. В проекте оказалось ровно одно место подходящее для этой штуки,
но в других проектах их десятки. Кому-то конечно же не понравится такой
подход, но мне приятен.
Есть константы:
type InodeTrustType int
const (
InodeTrustNone InodeTrustType = iota
InodeTrustCtime
InodeTrustMtime
)
которые при печати выведут ничего не поясняющее для человека значение.
Хочется добавить нечто типа:
func (i InodeTrustType) String() string {
switch i {
case InodeTrustNone: return "none"
case InodeTrustCtime: return "ctime"
case InodeTrustMtime: return "mtime"
}
}
но геморройно, хотя я так много делал прежде.
Выполнив "stringer -type=InodeTrustType" я получаю
inodetrusttype_string.go файл в котором этот String() метод добавляется.
Причём эффективным образом, создавая:
const _InodeTrustType_name = "InodeTrustNoneInodeTrustCtimeInodeTrustMtime"
var _InodeTrustType_index = [...]uint8{0, 14, 29, 44}
где само числовое значение InodeTrustType-а будет индексом в массиве
смещений в константной строке.
А чтобы это автоматизировать, то можно добавить комментарий прямо в код:
//go:generate stringer -type=InodeTrustType
[оставить комментарий]