[О блоге] [наверх] [пред] [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

    [оставить комментарий]