Способность присвоения (Assignability)
Значение x способно к присваиванию переменной типа T ("x способно к присваиванию T", "x is assignable to T"), если применяется одно из следующих условий:
- тип х идентичен T.
- тип V значения x и тип T имеют идентичные базовые типы, и по крайней мере один из V или T не является определенным типом.
- T является типом интерфейса, а x реализует T.
- x - двунаправленное значение канала (bidirectional channel), T - тип канала, тип V значения x и T имеют идентичные типы элементов, и, по крайней мере, один из V или T не является определенным типом.
- x - это предварительно объявленный идентификатор nil, а T - это указатель, функция, срез (slice), карта (map), канал или тип интерфейса.
- x - нетипизированная константа, представимая значением типа T.
Представимость (Representability)
Константа x может быть представлена значением типа T, если выполняется одно из следующих условий:
- х находится во множестве значений, определенных Т.
- T является типом с плавающей точкой (floating-point type), и x может быть округлен до точности T без переполнения. При округлении используются правила округления до четности IEEE 754, но с отрицательным нулем IEEE, дополнительно упрощенным до нулевого знака. Обратите внимание, что постоянные значения никогда не приводят к отрицательному нулю IEEE, NaN или бесконечности.
- T является сложным типом, а компоненты x: real(x) и imag(x) - представляются значениями типа компонента T (float32 или float64).
x T x представима значением T потому что
'a' byte 97 это набор байтовых (byte) значений
97 rune rune это псевдоним int32,
а 97 входит в набор 32-битных
целых чисел (32-bit integers)
"foo" string "foo" входит в набор
строовых (string) значений
1024 int16 1024 входит в набор 16-битных
целых чисел (16-bit integers)
42.0 byte 42 входит в набор беззнаковых
8-битных целых чисел
(unsigned 8-bit integers)
1e10 uint64 10000000000 входит в набор
беззнаковых 64-битных целых чисел
(unsigned 64-bit integers)
2.718281828459045 float32 2.718281828459045 округляется
до 2.7182817 которое входит
в набор float32 значений
-1e-1000 float64 -1e-1000 округляется
до IEEE -0.0 которое
далее упрощается до 0.0
0i int 0 это целочисленное (integer) значение
(42 + 0i) float32 42.0 (с нулевой мнимой (imaginary) частью)
входит в набор float32 значений
x T x не представима значением T потому что
0 bool 0 не входит в набор boolean значений
'a' string 'a' это rune, она не входит в набор
строковых (string) значений
1024 byte 1024 не входит в набор беззнаковых 8-битных
целых чисел (unsigned 8-bit integers)
-1 uint16 -1 не входит в набор беззнаковых 16-битных
целых чисел (unsigned 16-bit integers)
1.1 int 1.1 это не цельночисловое (integer) значение
42i float32 (0 + 42i) не входит в набор float32 значений
1e1000 float64 1e1000 переполняется до IEEE +Inf после округления
Читайте также:
- Спецификация Go: типы (types)
- Спецификация Go: типы структур (struct types)
- Спецификация Go: свойства типов и значений - идентичность типа (Type identity)
Комментариев нет:
Отправить комментарий