|
|
- # 常量
- 基本类型的字面量表示(除了false和true 他们是预声明的有名常量) 都属于无名常量或者叫字面常量
- 在Go中有些值的类型是不确定的, 这些值称为不确定值,对于大多数不确定值来说, 他们各自有一个默认类型, 除了声明的nil, nil是没有默认的类型的
- 与不确定类型相对应的就是类型确定值
-
- 一个字面(常)量的默认类型取决于它的它为何种字面量形式:
- 一个字符串字面量的默认类型是预声明的 string 类型。
- 一个布尔字面量的默认类型是预声明的 bool 类型。
- 一个整数型字面量的默认类型是预声明的 int 类型。
- 一个rune字面量的默认类型是预声明的 rune (亦即 int32 )类型。
- 一个浮点数字面量的默认类型是预声明的 float64 类型。
- 如果一个字面量含有虚部字面量,则此字面量的默认类型是预声明的 complex128 类型。
-
- ## 类型转换
- 对于一个类型不确定常量值 v ,有两种情形显式转换 T(v) 是合法的:
- 1.v 可以表示为(第6章) T 类型的一个值。 转换结果为一个类型为 T 的类型确定常量值。
- 2.v 的默认类型是一个整数类型( int 或者 rune ) 并且 T 是一个字符串类型。 转换 T(v) 将 v 看作
- 是一个Unicode码点。 转换结果为一个类型为 T 的字符串常量。 此字符串常量只包含一个Unicode
- 码点,并且可以看作是此Unicode码点的UTF-8表示形式。 对于不在合法的Unicode码点取值范围
- 内的整数 v , 转换结果等同于字符串字面量 "\uFFFD" (亦即 "\xef\xbf\xbd" )。 0xFFFD 是
- Unicode标准中的(非法码点的)替换字符值。 (但是请注意,今后的Go版本可能只允许rune或
- 者byte整数被转换为字符串 ? 。 从Go官方工具链1.15版本开始, go vet 命令会对从非rune和非
- byte整数到字符串的转换做出警告。)
-
- # 变量
- 包级别的变量在声明的时候依赖关系将影响他们的初始化顺序
-
- # 常量表达式
- 当一个运算表达式所涉及的是所有操作都是常量的时候,此表达式称为一个常量表达式
- 一个常量表达式的估值是在编译阶段进行的。一个常量表达式的估值依然是一个常量。
- 如果一个表达式中涉及到的操作数中至少有一个不为常量,则此表达式称为非常量表达式
-
- 类型确定的有名常量
- const x float32 = 3.14
-
- 常量声明中的自动补全
- const (
- X float32 = 3.14
- Y // 这里必须只有一个标识符
- Z // 这里必须只有一个标识符
-
- A, B = "Go", "language"
- C, _
- // 上一行中的空标识符是必需的(如果
- // 上一行是一个不完整的常量描述)。
- )
- 自定补全为
- const (
- X float32 = 3.14
- Y float32 = 3.14
- Z float32 = 3.14
-
- A, B = "Go", "language"
- C, _ = "Go", "language"
- )
- # 在常量声明中使用iota
- iota是Go中预声明的一个特殊的有名常量 iota被预声明为0, 但是在编译阶段并非恒定
-
-
-
|