Golang получить значение типизированных констант - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь выяснить, как правильно использовать константы в Go для вариантов использования, как если бы я использовал перечисления в других языках, но я изо всех сил стараюсь правильно использовать типизированные константы.

Давайте скажем, у нас есть следующие константы:

type Status string

const (
    Created Status = "Created"
    Completed Status = "Completed"
)

Похоже, вы можете получить Status из строки следующим образом:

status := Status(s)

Как вы можете go другим способом ? Я знаю, что вы можете реализовать метод String, но что если я просто захочу, чтобы базовое значение было в типе ядра, будь то int или string? Inte rnet подводит меня ...

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Подумайте, есть небольшая путаница, но ваш базовый тип для констант, которые вы создаете, это строки, а не целые числа. Поэтому использование int(Created) приведет к ошибке cannot convert Created (type Status) to type int.

Если вы после Enum и хотите, чтобы с ним было связано строковое значение - вам следует использовать интерфейс Stringer, как вы предлагали простой подход был бы следующим:

type Status int

func (s Status) String() string {
    switch s {
    case 0:
        return "Created"
    case 1:
        return "Deleted"
    default:
        return ""
    }
}

const (
    Created Status = iota
    Deleted
)

Тогда в любое время, когда вам нужна строковая версия вашего статуса, вы можете позвонить string(Created) или просто передать его как обычно (т.е. fmt.Println(Created))

0 голосов
/ 28 января 2020

Как упоминает @ burak-serdar, решение довольно простое:

string(status)

Или:

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