Golang语言基础之常量和字面量

简介: 这篇文章讲解了Go语言中常量和字面量的概念、声明方式以及使用场景,特别对常量生成器iota的使用进行了详细说明和示例演示。

                                              作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.常量

1.常量概述

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 

换句话说,常量在定义时必须赋值,且程序运行期间其值不能改变。

2.常量声明

常量的声明和变量声明非常类似,只是把"var"换成了"const",常量在定义的时候必须赋值。

举个例子:
  package main

  import "fmt"

  func main(){
    // 在声明常量时必须赋值,且在运行过程中不支持修改
    const pi = 3.1415926
    const haha = "哈哈"

    // 也支持同时定义多个常量
    const (
      xixi = "嘻嘻"
      heihei  = "嘿嘿"
      // 多常量定义时,如果没有赋值,则默认和上一行的常量赋值相同。
      wuwu    
      pupu    
    )


    var school = "清华大学"

    // 常量一点定义,就不支持修改,否则编译报错。
    // pi= 3.14
    // 变量是可以修改的
    school = "北京大学"

    fmt.Println(pi,school,haha,xixi,heihei,wuwu,pupu)
  }

3.iota

3.1 iota概述

iota是go语言的常量计数器,只能在常量的表达式中使用。iota在const关键字出现时将被重置为0。

const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。 

使用iota能简化定义,在定义枚举时很有用。

3.2 几个常见的iota示例

package main

import "fmt"

func main() {
    const (
        n1 = iota // iota在const关键字出现时将被重置为0。
        n2        //1
        _         // 使用"_"跳过某些值
        n4        //3
    )
    fmt.Println(n1, n2, n4)

    const (
        n5 = iota //0
        n6 = 100  //100,在iota声明中间插队
        n7 = iota //2
        n8        //3
    )

    const n9 = iota //0
    fmt.Println(n5, n6, n7, n8, n9)

    // 定义数量级
    const (
        _  = iota
        KB = 1 << (10 * iota)
        MB = 1 << (10 * iota)
        GB = 1 << (10 * iota)
        TB = 1 << (10 * iota)
        PB = 1 << (10 * iota)
    )
    fmt.Println(KB, MB, GB, TB, PB)

    // 多个iota定义在一行,值是相同的
    const (
        a, b = iota + 1, iota + 2 //1,2,该行iota为0
        c, d                      //2,3,该行iota为1
        e, f                      //3,4,该行iota为2
    )
    fmt.Println(a, b, c, d, e, f)
}

3.3 iota使用总结

(1)const声明如果不写,默认就和上一行一样;

(2)遇到iota就初始化默认值为零;

(3)const中每新增一行变量声明iota就递增1;

二.字面量

没有出现变量名,直接出现了值,基础类型的字面量相当于是常量。

举个例子:
  package main

  import "fmt"

  func main() {
    // 整形字面量和浮点型字面量
    fmt.Printf("%t\n", 10 == 10.00)

    // 虚数字面量
    fmt.Printf("%v\n", .4i)

    // Unicode和rune字面量
    fmt.Printf("%t\n", '\u4f17' == '众')

    //字符串字面量
    fmt.Printf("Hello\nWorld\n!\n")
  }
目录
相关文章
|
2月前
|
Go
Golang语言之管道channel快速入门篇
这篇文章是关于Go语言中管道(channel)的快速入门教程,涵盖了管道的基本使用、有缓冲和无缓冲管道的区别、管道的关闭、遍历、协程和管道的协同工作、单向通道的使用以及select多路复用的详细案例和解释。
110 4
Golang语言之管道channel快速入门篇
|
2月前
|
Go
Golang语言文件操作快速入门篇
这篇文章是关于Go语言文件操作快速入门的教程,涵盖了文件的读取、写入、复制操作以及使用标准库中的ioutil、bufio、os等包进行文件操作的详细案例。
66 4
Golang语言文件操作快速入门篇
|
2月前
|
Go
Golang语言之gRPC程序设计示例
这篇文章是关于Golang语言使用gRPC进行程序设计的详细教程,涵盖了RPC协议的介绍、gRPC环境的搭建、Protocol Buffers的使用、gRPC服务的编写和通信示例。
101 3
Golang语言之gRPC程序设计示例
|
2月前
|
安全 Go
Golang语言goroutine协程并发安全及锁机制
这篇文章是关于Go语言中多协程操作同一数据问题、互斥锁Mutex和读写互斥锁RWMutex的详细介绍及使用案例,涵盖了如何使用这些同步原语来解决并发访问共享资源时的数据安全问题。
86 4
|
2月前
|
Go 调度
Golang语言goroutine协程篇
这篇文章是关于Go语言goroutine协程的详细教程,涵盖了并发编程的常见术语、goroutine的创建和调度、使用sync.WaitGroup控制协程退出以及如何通过GOMAXPROCS设置程序并发时占用的CPU逻辑核心数。
50 4
Golang语言goroutine协程篇
|
2月前
|
Prometheus Cloud Native Go
Golang语言之Prometheus的日志模块使用案例
这篇文章是关于如何在Golang语言项目中使用Prometheus的日志模块的案例,包括源代码编写、编译和测试步骤。
51 3
Golang语言之Prometheus的日志模块使用案例
|
1月前
|
前端开发 中间件 Go
实践Golang语言N层应用架构
【10月更文挑战第2天】本文介绍了如何在Go语言中使用Gin框架实现N层体系结构,借鉴了J2EE平台的多层分布式应用程序模型。文章首先概述了N层体系结构的基本概念,接着详细列出了Go语言中对应的构件名称,包括前端框架(如Vue.js、React)、Gin的处理函数和中间件、依赖注入和配置管理、会话管理和ORM库(如gorm或ent)。最后,提供了具体的代码示例,展示了如何实现HTTP请求处理、会话管理和数据库操作。
30 0
|
2月前
|
JSON Go 数据格式
Golang语言结构体链式编程与JSON序列化
这篇文章是关于Go语言中结构体链式编程与JSON序列化的教程,详细介绍了JSON格式的基本概念、结构体的序列化与反序列化、结构体标签的使用以及如何实现链式编程。
38 4
|
2月前
|
Go
Golang语言结构体(struct)面向对象编程进阶篇(封装,继承和多态)
这篇文章是关于Go语言中结构体(struct)面向对象编程进阶篇的教程,涵盖了Go语言如何实现封装、继承和多态,以及结构体内存布局的相关概念和案例。
142 4
|
2月前
|
Go
Golang语言基础之接口(interface)及类型断言
这篇文章是关于Go语言中接口(interface)及类型断言的详细教程,涵盖了接口的概念、定义、实现、使用注意事项以及类型断言的多种场景和方法。
37 4