Go语言基本类型之常量详解|Go编程语言教程

silverwq
2022-07-04 / 0 评论 / 264 阅读 / 正在检测是否收录...

介绍

常量是一种表达式,其可以在程序编译阶段就可以算出来。其值本质上都属于基本类型:布尔值、字符串、数字。

常量在程序运行过程中,不允许被修改,恒定不变。

因为常量的值在编译的时候就可以知道,所以可以出现在类型的声明中,例如数组中

const IPv4Len = 4
var p [IPv4Len]byte // 出现在数组的声明中

常量可以指定类型,如果没有指定的话,就以右边表达式自动推导:

const IP string = "127.0.0.1"
fmt.Printf("%T", IP) // string

// 自动推导为无类型字符串
const name = "zhangsan"
fmt.Printf("%T", name) // string

若同时声明一组常量,除了第一项外,其它项右侧的表达式都可以省略,会复用前面一项的表达式和类型

const (
    n1 = 100
    n2       // 等效 n2 = 100
    n3       // 等效 n3 = 100
)

常量声明器 Iota

Iota 的值是 0 开始,逐项加 1

// iota,如果把const当作php里的array,iota就是array的index
// 一行当作php的array数组里的元素
const (
    n1 = 10   // 第1行iota就是固定为0
    n2 = iota // 第2行iota就是固定为1,等效n2 = 1
    n3        // 第3行iota就是固定为2,等效n3 = 2
    n4        // 第4行iota就是固定为3,等效n4 = 3
)
const (
    a, b = iota + 1, iota + 2 //1,2
    c, d                      //2,3
    e, f                      //3,4
)

无类型常量

常量可以属于任何基本类型,但是也可以是无类型。从属类型待定的常量有 6 种:

  1. 无类型整数,可以和各类型的整数进行运算,但是不能和其他类型运算
  2. 无类型浮点数,可以和各类型的浮点数进行运算,但是不能和其他类型运算
  3. 无类型布尔
  4. 无类型文字符号
  5. 无类型复数
  6. 无类型字符串

借助推迟确定类型,常量可以保存更加高的精度(因为类型有最大值),还能写出更多的表达式,无需类型转换。

var a float32 = 100.1
fmt.Printf("%T", math.Pi) // 是float64
fmt.Println(a / math.Pi)  // a是float32和pi可以相除
0

评论 (0)

取消