8.13Go之常量

8.13Go之常量

Go中常量的定义

  • 常量是一个简单值的标识符,在程序运行时,不会被修改的量。

  • 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。--->基本类型

常量的定义格式

和变量不一样,只有两种声明格式:

  • :=符号会默认左侧声明的是一个变量

  • 常量的声明必须初始化赋值,可以使用不显示声明常量类型,由编译器自行判断。但是变量的值必须声明

const VALUE = 1
const VALUENO2 string = "Jun"

常量声明的实例演示

package main

import "fmt"

/*
go语言之常量的练习
1、关键字
2、声明方法
*/
const VALUE = 1
const VALUENO2 string = "Jun"
const (
LENGTH int = 10
WIDTH int = 5
)

var (
area int
)

func main() {
const a, b, c = 1,false,"Jun"
   const e,f,g int = 1,2,3
fmt.Println(LENGTH,WIDTH,area,a,b,c)
}
常量和变量相同的点
  • 常量和变量一样也可以声明成全局常量

  • 和变量一样,常量也可以多赋值,并且可以根据实际的值来判断常量类型

常量和变量不相同的点
  • go的常量赋值没有类似变量的这种形式:

    • const e,f,g int
      e,f,g = 1,2,3
      //这在golang中定义常量是不允许的,必须放在一行
      const e,f,g int = 1,2,3
      //这是允许的
  • go的局部常量可以不适用(方法中的常量),变量不行

常量的计算表达式

Go中使用内置函数去计算表达式的值:--->常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过

package main

import (
"fmt"
"unsafe"
)

/*
go语言之常量的练习
1、关键字
2、声明方法
*/
const VALUE = 1
const VALUENO2 string = "Jun"
const (
LENGTH int = 10
WIDTH int = 5
A = "Lucifer"
B = len(A)
C = unsafe.Sizeof(A)
)

func main() {
const a, b, c = 1,false,"Jun"
const e,f,g int = 1,2,3
fmt.Println(A,B,C)
}
//len()方法--->计算常量的长度
//unsafe.Sizeof方法--->返回字符串长度+字符串起始地址指针
/*
Golang中的sring内部实现由两部分组成,一部分是指向字符串起始地址的指针,另一部分是字符串的长度!!!
*/

特殊常量:iota

特点:

  • iota,可以认为是一个可以被编译器修改的常量

  • iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

声明形式:

package main

import (
"fmt"
)

const (
h = iota
i
j
)

func main() {
fmt.Println(h,i,j)
}

第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2

实例二:

package main

import "fmt"

const (
valueNo1 = iota //(adj 极小的)第一个iota=0
valueNo2
valueNo3
valueNo4 = "Jun" //这是一个独立的值,但是iota还是在计数--->这里的iota += 1(实际在这里iota=3)
valueNo5
//这里如果不显式声明valueNo5的值,那么它将和valueNo4指向一个对象
    valueNo6 = 100
valueNo7
valueNo8 = iota
valueNo9
)

func main() {
fmt.Println(valueNo1,valueNo2,valueNo3,valueNo4,valueNo5,valueNo6,valueNo7,valueNo8,valueNo9)
}

分析:

  • iota从声明开始就一直计数

  • 常量中如果不显示给常量赋值那么它默认是前一个常量的值

    •     valueNo5
      //valueNo5因为没有显示的给他赋值所以它的值是valueNo4的"Jun"
      valueNo6 = 100
      //在valueNo6中重新给valueNo6显示赋值了所以valueNo7的值是valueNo6的值
      valueNo8 = iota
      //在使用iota赋值给valueNo8那么不会重新计数而是=从第一次声明iota开始到该位置的值
posted @ 2021-08-14 18:09  俊king  阅读(55)  评论(0编辑  收藏  举报