Объявление типа строки не сопоставимо со строкой - PullRequest
0 голосов
/ 03 мая 2019

У меня есть псевдоним типа "LogLevel", который представляет собой строку:

type LogLevel string

const (
    InfoLevel  LogLevel = "info"
    DebugLevel LogLevel = "debug"
    WarnLevel  LogLevel = "warn"
    ErrorLevel LogLevel = "error"
    PanicLevel LogLevel = "panic"
    FatalLevel LogLevel = "fatal"
)

Теперь я хотел бы сделать переключение для проверки этих констант по отношению к пользовательскому вводу:

    switch strings.ToLower(input) {
    case "", InfoLevel:
        return zap.NewAtomicLevelAt(zap.InfoLevel)
    default:
        fmt.Errorf("Invalid log level supplied '%s'. Defaulting to info loglevel", input)
        return zap.NewAtomicLevelAt(zap.InfoLevel)
    }

Это не работает, потому что, по-видимому, типы несовместимы?

неверный регистр InfoLevel в переключателе на строках.

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

Ответы [ 2 ]

4 голосов
/ 03 мая 2019

Один из операндов в сравнении должен быть присваиваемым другому.Тип string нельзя присвоить LogLevel и наоборот.Чтобы получить сопоставимые значения, преобразуйте string в LogLevel:

switch LogLevel(strings.ToLower(input)) {
3 голосов
/ 03 мая 2019

type LogLevel string - это определение типа.

type LogLevel = string - это псевдоним типа.

Похоже, вам нужен последний, а не первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...