yyz notes yyz notes
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

益章

可乐鸡翅
首页
  • RBAC权限设计
  • 架构图标设计
  • 账号体系
  • python基础
  • python高级
  • python模块
  • python设计模式
  • python数据结构与算法
  • django
  • django-DRF
  • flask
  • 直接设计开源pip包
  • 直接设计开源项目
  • python示例题/脚本
  • python面试题
  • golang基础
  • golang高级
  • golang常用组件
  • gin框架
  • es6
  • javascript
  • react
  • vue
  • TypeScript
  • mysql
  • redis
  • minio
  • elasticsearch
  • mongodb
  • 消息队列
  • 自动化测试
  • 操作系统

    • linux
    • windows
  • nginx
  • docker
  • k8s
  • git
  • ldap
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang基础

    • 初识golang

    • golang基础语法

      • 变量
      • 常量
        • 1. 常量的定义 const
          • 普通方式
          • 批量申请变量
          • 代码示例
        • 2. iota 常量生成器
        • 3. 无类型常量
      • 基本数据类型
      • 复杂数据类型-指针
      • 复杂数据类型-数组array
      • 复杂数据类型-切片slice
      • 复杂数据类型-映射map
      • 复杂数据类型-列表list
      • nil空值-零值
      • 关键字与标识符
      • 运算符
      • 输入输出
    • golang流程控制

    • golang函数

    • golang内置函数

    • golang包

    • golang错误异常处理

    • golang面向对象(结构体)

    • golang文件处理

    • golang并发编程简介

    • golang并发编程-协程

    • golang网络编程

    • 反射 reflect

  • golang高级

  • 常用组件

  • gin

  • golang
  • golang基础
  • golang基础语法
YiZhang-You
2023-05-21
目录

常量

# 1. 常量的定义 const

# 普通方式

Go语言中的常量使用关键字 const 定义,用于存储不会改变的数据,常量是在编译时被创建的,即使定义在函数内部也是如此,并且只能是布尔型、数字型(整数型、浮点型和复数)和字符串型。由于编译时的限制,定义常量的表达式必须为能被编译器求值的常量表达式。

常量的定义格式和变量的声明语法类似:const name [type] = value,例如:

const pi = 3.14159 // 相当于 math.Pi 的近似值
1

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

  • 显式类型定义: const b string = "abc"
  • 隐式类型定义: const b = "abc"

常量的值必须是能够在编译时就能够确定的,可以在其赋值表达式中涉及计算过程,但是所有用于计算的值必须在编译期间就能获得。

  • 正确的做法:const c1 = 2/3
  • 错误的做法:const c2 = getNumber() // 引发构建错误: getNumber() 用做值

# 批量申请变量

和变量声明一样,可以批量声明多个常量:

全局和局部申请

const (
    e  = 2.7182818
    pi = 3.1415926
)
1
2
3
4

# 代码示例

package main

import "fmt"

func main() {
	// 一. 普通方式
	const n1 int = 1
	fmt.Println(n1)

	// 二. 批量申请变量
	const (
		n2 int = 2
		// n3 int // missing init expr for n3 常量的值必须是能够在编译时就能够确定的(必须要先赋值或者使用iota)
	)
	fmt.Println(n2, n3)

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 2. iota 常量生成器

常量声明可以使用 iota 常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个 const 声明语句中,在第一个声明的常量所在的行,iota 将会被置为 0,然后在每一个有常量声明的行加一。

iota用于生成一组相似规则初始化的常量,在const常量声明的语句中,第一个常量所在行,iota为0,之后每一个常量声明加一。

例如time包的例子,一周7天,每天可以定义为常量,1~6,周日为0,这种类型也称为枚举

package main

import (
	"fmt"
)

const (
	Sunday = iota
	Monday //通常省略后续行表达式
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
)

func main() {
	fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)
}

// 0 1 2 3 4 5 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

如果iota表达式被打断,需要显示恢复

package main
import (
    "fmt"
)
const (
    A = iota //初始0
    B        // +1
    C = "c"  //iota枚举被打断 ,为  c
    D        // c,与上  相同。
    E = iota // 4,显式恢复。注意计数包含了 C、D 两个,此时为4 。
    F        // 恢复iota 加一,此时为5
)
func main() {
    fmt.Println(A, B, C, D, E, F)
}

// 0 1 c c 4 5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 3. 无类型常量

Go语言的常量有个不同寻常之处。虽然一个常量可以有任意一个确定的基础类型,例如 int 或 float64,或者是类似 time.Duration 这样的基础类型,但是许多常量并没有一个明确的基础类型。

编译器为这些没有明确的基础类型的数字常量提供比基础类型更高精度的算术运算,可以认为至少有 256bit 的运算精度。这里有六种未明确类型的常量类型,分别是无类型的布尔型、无类型的整数、无类型的字符、无类型的浮点数、无类型的复数、无类型的字符串。

通过延迟明确常量的具体类型,不仅可以提供更高的运算精度,而且可以直接用于更多的表达式而不需要显式的类型转换。

// math.Pi 无类型的浮点数常量,可以直接用于任意需要浮点数或复数的地方

var x float32 = math.Pi
var y float64 = math.Pi
var z complex128 = math.Pi
1
2
3
4
5

如果 math.Pi 被确定为特定类型,比如 float64,那么结果精度可能会不一样,同时对于需要 float32 或 complex128 类型值的地方则需要一个明确的强制类型转换:

const Pi64 float64 = math.Pi

var x float32 = float32(Pi64)
var y float64 = Pi64
var z complex128 = complex128(Pi64)
1
2
3
4
5

对于常量面值,不同的写法可能会对应不同的类型。例如 0、0.0、0i 和 \u0000 虽然有着相同的常量值,但是它们分别对应无类型的整数、无类型的浮点数、无类型的复数和无类型的字符等不同的常量类型。同样,true 和 false 也是无类型的布尔类型,字符串面值常量是无类型的字符串类型。

编辑 (opens new window)
变量
基本数据类型

← 变量 基本数据类型→

最近更新
01
配置yun源
05-24
02
linux-配置python虚拟环境
05-24
03
linux文件目录管理
05-24
更多文章>
Theme by Vdoing | Copyright © 2023-2023 yizhang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式