typedef с ограничением диапазона - PullRequest
0 голосов
/ 25 октября 2018

В Go мы можем сказать:

type Month int

, чтобы создать новый тип, основанный на int.

Можно ли также сказать, что диапазон значений, разрешенных для этого типа, равен1 - 12, и чтобы гарантировать, что никакое значение <1 или> 12 не может быть присвоено?

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Вы можете ограничить доступ к одному пакету, используя неэкспортированную переменную для хранения значения.Например,

package date

type Month struct {
    month int
}
0 голосов
/ 25 октября 2018

Нет, вы не можете накладывать ограничения на int независимо от того, определяете ли вы его как пользовательский тип или нет.Самое близкое, что вы можете получить, это что-то вроде следующего кода, использующего конструкцию с именем iota

type Month int

const (
    Jan Month = iota + 1
    Feb
    Mar
    Apr
    May
    Jun
    Jul
    Aug
    Sep
    Oct
    Nov
    Dec
)

func main() {
    fmt.Println(Jan, Feb, Mar)
}

. Это выведет 1 2 3.Для этого есть гораздо больше применений, вы можете найти больше информации здесь https://splice.com/blog/iota-elegant-constants-golang/

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

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