go语言学习笔记 — 基础 — 基本语法 — 常量与变量 — 常量变量的声明(2):常量的初始化定义

常量是一个简单值的标识符,在程序运行时,不会被修改。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

常量的初始化定义特点

  • 常量的值在编译时就已确定,可以用于数组声明
const size = 4

var arr [size]int
  • 常量定义格式与变量基本相同
  • 常量定义的等号右边,必须是常量或常量表达式
  • 常量表达式中的函数必须是go内置函数

常量的初始化定义

  • 单个常量的定义(常用)
const identifier [type] = value

你可以省略类型说明符[type],因为编译器可以根据变量的值来推断其类型。

// 显式类型定义
const b string = "abc"

// 隐式类型定义
const b = "abc"
  • 多个常量的定义(常用)
const (
    pi = 3.14115
    e = 2.718281
)

const (
    text = "123"
    length = len(text)
    num = b * 20
)
  • 多个常量的并行定义
// 多个常量的类型要相同
const c_name1, c_name2 = value1, value2

常量枚举(一组常量值)

  • 对于从0开始赋值的常量初始化,go现在没有枚举,可以使用iota模拟枚举
const (
    Unknown = 0
    Female = 1
    Male = 2
)

const (
    Unknown = iota   //0
    Female           //1
    Male             //2
) 
  • 一个const声明的内部,每一行常量将会自动套用前面常量的数据类型,并自动增加值。这种模式有点类似于电子表格中的单元格自动填充
  • iota的起始值为0,一般情况下枚举常量值从0开始。设计每个枚举类型都有一个空值,方便业务和逻辑的灵活使用
  • iota不仅只生成每次增加1的枚举值。我们还可以使用左移操作符,来做一些强大的枚举常量值生成器
const (
	Readable = 1 << iota   // 0001,1 << iot,每次左移一个二进制位
	Writeable              // 0010
	Executable             // 0100
)
package main

import "fmt"

const (
    i = 1 << iota  // i=1<<0,<<表示左移
    j = 3 << iota
    k
    l
)

func main() {
    fmt.Println("i=",i)
    fmt.Println("j=",j)
    fmt.Println("k=",k)
    fmt.Println("l=",l)
}
  • iota,特殊常量,可看作是一个能被编译器修改的常量。iota在const关键字出现时(const内部的第一行之前),将被重置为0。iota可理解为const()语句块中的行索引,const()中每新增一行声明,将使iota计数加1。
// 第一个iota等于0,每当iota在新的一行被使用时,它的值都会自动加1

const (
    a = iota   //0
    b = iota   //1
    c = iota   //2
)

所以a=0, b=1, c=2可以简写为如下形式

const (
    a = iota   //0
    b          //1
    c          //2
)

iota例子

package main

import "fmt"

func main() {
    const (
        a = iota   //0
        b          //1
        c          //2
        d = "ha"   //独立值,iota += 1
        e          //"ha",iota += 1
        f = 100    //独立值,iota +=1
        g          //100,iota +=1
        h = iota   //7,恢复计数
        i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i)
}

常量声明和枚举的例子

package main

import (
	"fmt"
)

// 定义单个常量
const a = 1
const b = 'A'

// 定义多个常量
const (
	text = "123"
	length = len(text)
	num = b * 20
)

// 并行定义多个常量
const i, j, k = 1, "2", '3'
const (
	text2, length2, num2 = "1234", len(j), k*10
)


func main() {
	fmt.Println(a, b, text, length, num)
	fmt.Println(i, j, k, text2, length2, num2)
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值