Go语言规范-常量/变量

常量

常量有以下几种:

  • 布林常量
  • Rune 常量
  • 整数常量
  • 浮点数常量
  • 复数常量
  • 字符串常量

其中Rune、整数、浮点数以及复数常量统称 数值常量.

常量值的表示形式

常量值的表示可以是:

  • rune、整数、浮点数、虚数或字符串字面
  • 一个标记常量的标识符
  • 一个常量表达式
  • 一个结果是常量的类型转换
  • 某些内建函数的结果值(如:可用于任何值的unsafe.Sizeof、可用于某些表达式的cap或len、可用于复数常量的real以及imag、以及可用于数值常量的complex)

布林的真实值由预定义常量 true 和false表示。
预定义的标识符iota标记了整型常量。
通常来说复数常量是以一个常量表达式 的形式存在的

由于数值常量表示任意精度的、确定的值,并且不会溢出,因此没有常量来标记IEEE-754 负零、无穷和非数值值。

常量的类型

常量可以是有类型或无类型的。字面常量、true、false、iota以及特定的只具有无数型常量操作数的常量表达式是无类型的。

一个常量可以通过 常量声明类型转化 被显示地赋与类型,也可以在赋值或作为表达式的操作数时被隐式地赋与类型。如果常量值不能被表示成特定类型,是一个错误。

一个无类型的常量会根据上下文所需隐式转换,从而具有 默认类型。例如:在短变量声明i:=0中没有显式的类型。无类型常量的默认类型可以是bool、 rune、 int、float64、complex128或string中之一,取决于它是否是一个布林、rune、整数、浮点数、复数或字符串常量。

常量的精度

尽管在语言中规定了数值常量具有任意精度,但是编译器的内部表示可能只具有有限精度。即每个实现必须:

  • 用至少256位来表示整型常量。
  • 用至少256位的尾数以及至少16位的有符号二进制指数来表示浮点常量及复数常量。
  • 如果不能精确表示一个整型常量时应该给出一个错误。
  • 如果因为溢出而不能表示一个浮点或复数常量时应该给出一个错误
  • 当因为精度限制而不能表示一个浮点或复数常量时,应该舍入到最近似的可表达的常量。

以上要求对字面常量和通过求值常量表达式得到的结果都适用。

变量

变量是一个持有 的存储空间位置。其合法值集由变量的 类型 决定。

变量声明(对于函数参数及返回值来说,是函数声明或函数字面的签名),为已命名的变量保留了存储空间。调用内建函数new或取一个组合字面的地址,会在运行时给变量分配存储空间。这样的匿名变量是通过 (可能是隐含的)指针间接引用的。

结构化变量array、slice、以及struct 类型具有可以独立寻址的元素和字段。每个这样的元素都可以当成是一个变量。

变量的静态类型 (或 立即类型)是在声明中给出的类型、或是调用new或组合字面时提供的类型、或是结构化变量中元素的类型。接口类型的变量还有单独的动态类型,即运行时赋给变量的值的类型(除非这个值 是预定义标识符nil,它没有类型)。在执行时动态类型是可以变化的,但是存储在接口变量中的值总是可以被赋给变量的静态类型。

var x interface{}  // x 是 nil 并且具有静态类型 interface{}
var v* T           // v 值为 nil,并且具有静态类型 *T
x = 42             // x 值为 42,并且具有动态类型 int 
x = v              // x 值为 (*T)(nil),并且具有动态类型 *T

变量的值 是通过引用表达式中的变量来取得的;它是最近一次赋给变量的值,如果一个变量没有被赋值过,它的值就是其类型所规定的零值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值