各种笔记
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.2 KiB

常量

基本类型的字面量表示(除了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, 但是在编译阶段并非恒定