2016-05-04 2 views

ответ

4

Это пример untyped constants. Из документов:

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

С 'a' является нетипизированной константой, компилятор попытается преобразовать ее в тип, сопоставимый с другим операндом. В этом случае он преобразуется в byte.

Вы можете увидеть, что это не работает, когда постоянная руна не помещается в один байт:

package main 

import (
    "fmt" 
) 

func main() { 
    const a = '€' 
    fmt.Println("a"[0] == a) // constant 8364 overflows byte 
} 

https://play.golang.org/p/lDN-SERUgN

0

Руна literal 'a' представляет собой константу руны. Константа может быть нетипизирована. В короткой форме декларации r := 'a' константа руны 'a' неявно конвертируется в свой тип по умолчанию, который равен rune. Но вы можете явно преобразовать его, назначив типизированную переменную.

var r byte = 'a' 

Смотреть это работает https://play.golang.org/p/lqMq8kQoE-

 Смежные вопросы

  • Нет связанных вопросов^_^