1 概述

常量,一经定义不可更改的量。功能角度看,当出现不需要被更改的数据时,应该使用常量进行存储,例如圆周率。从语法的角度看,使用常量可以保证数据,在整个运行期间内,不会被更改。例如当前处理器的架构类型,可以保证不被更改。

语法如下

2 定义单个常量

const 常量名 <可选的类型> = 常量值

const c1 int = 1000

Go语言中,标识符(常量名)是否大小写,取决于是否需要在导出时被识别。

常量的值仅仅支持,基础类型,字符串,字符,整型,浮点,布尔。

3 类型推导

类型可以通过值推导出来,大多数情况可以省略类型,例如

const c2 = 1000

除非你想使用例如,int8, byte,float32这些非默认类型时,需要指定类型,例如

const c3 int16 = 1000

4 定义多个常量

可以一行定义多个常量,例如:

const c4, c5 = 42, 1000

也可以使用 const()定义块,定义多个,每个常量单独一行,例如

const (
c6 = 42
c7 = 1000
)

推荐使用const()块语法,一次性定义多个。

const()块定义时,如果常量未给出定义,则延续上面的定义规则,例如:

const (
c7 = 42
c8 // c8 = 42
c9 // c9 = 42
)

此时,c8, c9, 值都是42。

5 iota迭代定义常量

const配合iota关键字使用,可以定义一组由0开始+1迭代的常量
演示语法:

const (
gender_secret = iota
gender_male // = iota
gender_female // = iota
)

此时,三个常量值,分别是,0, 1, 2
iota的规则是:若iota出现在const()中,那么const()定义的第一行的iota就是0,第二行就是0+1=1,不论iota是否被常量使用。演示如下:

const (
c1 = 42 // iota = 0,虽然未使用iota,但后边(const()中)有使用,此时iota被初始化为0,下面每行累加1
c2 = iota // iota = 1,iota继续累加,使用了iota
c3 = 1024 // iota = 2,同样未使用,但iota的值继续累加。c3 被定义为1024
c4 // iota = 3,c4延续上面的定义c4=1024,iota继续累加
c5 = iota // iota = 4,iota继续累加,使用了iota
c6 = iota // iota = 5,iota继续累加,使用了iota
)

此时结果为:42, 1, 1024, 1024, 4, 5

6 常量在编译时确定

编译时确定,因此不能使用变量为其赋值。可以使用,确定的字面量,字面量运算,内置函数运算,其他定义常量,这些在编译时可以确定的内容为常量赋值,演示为:

const c1 = "hank"
const (
c2 = c1
c3 = 42 + 1024
c4 = len("hank")
)

以上语法都可以!

7 常量的作用

  • 将特殊的值,语义化。使用时,可以知道其具体含义。
  • 数据的集中管理,更改常量定义,即可完成全部的修改。
  • 保证不被程序的其他代码所更改。

完!

原文出自:小韩说课
微信关注:小韩说课

Go语言中的常量的更多相关文章

  1. C语言中字符串常量到底存在哪了?

    常量存储总结局部变量.静态局部变量.全局变量.全局静态变量.字符串常量以及动态申请的内存区 1.局部变量存储在栈中2.全局变量.静态变量(全局和局部静态变量)存储在静态存储区3.new申请的内存是在堆 ...

  2. 收藏:C语言中字符串常量到底存在哪了?

    来源:https://www.cnblogs.com/jaysir/p/5041799.html 常量存储总结局部变量.静态局部变量.全局变量.全局静态变量.字符串常量以及动态申请的内存区 1.局部变 ...

  3. 004_go语言中的常量

    代码演示 package main import "fmt" import "math" const s string = "constant&quo ...

  4. 有关指针和C语言中的常量

    常量类型(五种): 字面常量(2,3,6....) ;                           enum 定义的枚举常量; 字符常量('a','b'....) ;              ...

  5. Rust语言中的常量,变量,运算符,数据类型

    简单练练, 夏天太热. const MAX_POINTS: u32 = 100_100; fn main() { let mut x = 5; let y = 5; let y = y + 1; le ...

  6. Swift语言指南(一)--语言基础之常量和变量

    原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...

  7. C语言中常量

    C语言中常量 不具有数据类型的常量------宏常量 宏常量定义:用一个标识符号来表示的常量,又称为符号常量. 宏定义:  #define 标识符  字符串                 ----- ...

  8. Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数

    Swift语言中为外部参数设置默认值可变参数常量参数变量参数输入输出参数 7.4.4  为外部参数设置默认值 开发者也可以对外部参数设置默认值.这时,调用的时候,也可以省略参数传递本文选自Swift1 ...

  9. Go语言入门(二)Go语言中的变量、常量、数据类型、流程控制以及函数

    Go语言中的变量 通常用var关键声明变量,有常规方式和简化方式. 常规方式: var name1 type1 name1 = value1 //赋值 简化方式: var name2 = value1 ...

随机推荐

  1. 如何使用CSS进行网页布局(HTML/CSS)

    什么叫做布局? 又称为版式布局,是网页UI设计师将有限的视觉元素进行有机的排列组合. 题目:假设高度已知,请写出三栏布局,其中左栏和右栏宽度各为300px,中间自适应 1.浮动布局 <!DOCT ...

  2. 0 Linux下Java使用ProcessBuilder执行命令与直接Bash执行命令之间的不同(环境变量方面)

    0 问题发生 xiaojietest.java package tasks; import java.io.BufferedReader; import java.io.BufferedWriter; ...

  3. JVM知识(四):GC配置参数

    JVM配置参数分为三类参数:跟踪参数.堆分配参数.栈分配参数 这三类参数分别用于跟踪监控JVM状态,分配堆内存以及分配栈内存. 跟踪参数 跟踪参数用户跟踪监控JVM,往往被开发人员用于JVM调优以及故 ...

  4. CentOS6.4 下安装 jdk1.7.0_67

    1.卸载系统自带的jdk 1.1.查看该操作系统上是否已经安装了jdk [root@xhTest-1 ~]# rpm -qa | grep jdk 1.2.删除系统自带的jdk [root@xhTes ...

  5. node环境和浏览器的区别

    一.全局环境下this的指向 在node中this指向global而在浏览器中this指向window,这就是为什么underscore中一上来就定义了一 root: 1 var root = typ ...

  6. SQL Server FOR XML PATH 和 STUFF函数的用法

    FOR XML PATH ,其实它就是将查询结果集以XML形式展现,将多行的结果,展示在同一行. 下面我们来写一个例子: 假设我们有个工作流程表: CREATE TABLE [dbo].[Workfl ...

  7. MySQL: sql_safe_updates

    在my.cnf中设置sql_safe_updates=1 启动mysqld失败. error log报错: 2018-11-20T14:28:14.567022+08:00 0 [ERROR] unk ...

  8. 使用xtrabackup不停服务做从库

    一.安装xtrabackup 1.YUM安装,下载percona源: yum install http://www.percona.com/downloads/percona-release/redh ...

  9. Linux alias命令详解

    alias:内置命令(没有路径),设置命令的别名,保护系统,方便 unalias:别名取消 常用的命令展示 临时设置 alias cp='cp –i' unalias cp      取消系统的别命令 ...

  10. 基于php-fpm的配置详解

    php5.3自带php-fpm/usr/local/php/etc/php-fpm.confpid = run/php-fpm.pidpid设置,默认在安装目录中的var/run/php-fpm.pi ...