常量

简介

道可道,非常道。这里常道指的永恒不变的道理,常有不变的意思。顾名思义和变量相比,常量在声明之后就不可改变,它的值是在编译期间就确定的。

下面简单的声明一个常量:

const p int = 1

声明常量的时候可以指定类型也可以类似:=简单声明一样,不指定类型如下:

const p = 1

也可以同时给多个赋值:

const i, j = 1, 2
const m, n = 1, "a"

也可以批量的声明:

const (
a = 0
b = 1
)

如果批量的声明,后面的可以省略声明具体的值,它会和上一行的值保持一致比如:

const (
a = 1
b
c = 2
d
) fmt.Println(a, b, c, d) // "1 1 2 2"

无类型常量

我们曾多次提到Go是一门静态语言,变量的类型是不可变,甚至不可以对intint32两种类型的变量进行+操作,即使int也是32位的例如:

package main

import "fmt"

func main() {
var a int = 1
var b int32 = 2
fmt.Println(a + b)
}

编译的时候会报invalid operation: a + b (mismatched types int and int32)

而简单声明的变量又是什么类型呢把上面的代码修改

package main

import "fmt"

func main() {
a := 1
var b int = 2
fmt.Println(a + b)
}

发现是可以运行的,但是如果把b改成var b int32 = 2 也会报相同的错误,说明:=会给变量指定一个默认的数据类型,这个类型是确定。

常量和变量有一个很大的不同就是,它对六种基础数据类型 布尔、整数、字符、浮点数、复数、字符串,如果声明的时候没有明确指定类型,它是不确定类型的,而是用到它的时候再确定它是否满足这个类型的运行去确定它具体的类型。回到上面的代码,我们如果改成这样:

package main

import "fmt"

func main() {
const a = 1
var b int32 = 2
fmt.Println(a + b)
}

这时运行通过,运行的时候a是 int32类型。那么是不是它以后一直是这一种类型呢,我们看看下面的代码:

package main

import "fmt"

func main() {
const a = 1
var b int32 = a
var c int = a
fmt.Println(a)
fmt.Println(c)
}

我们可以看到cb不是相同类型,但还是可以把a即赋值给b也可以赋值给c。也就是说只要是整数,不论是什么类型都可以参与运行。同样的道理,只要声明常量的时候没有指定类型,给它的赋值又是六种基本类型,常量都可以满足这个特性。

特殊常量iota

iota可以理解为一个特殊的常量,它只能和const一起出现,而且只要const出现它就会被重置为0,然后每有一个常量被声明它就加1

package main
import "fmt"
func main() {
const (
a = iota
b
c
)
println(a, b, c) // 0 1 2
const (
d = iota
e
f
)
fmt.Println(d, e, f) // 0 1 2
}

上面的a, b, c的声明从0开始,每增加一行就加1。到d, e, f之后由于出现了const所以iota又被重置为0了。

iota也可以在声明中参加运算,例如

const (
a = iota * 3
b
c
)
fmt.Println(a, b, c) // 0 3 6

下面一行保持和第一行相同的运行规则只是iota1了,所以相当于b = 3 * 1

Go的100天之旅-常量的更多相关文章

  1. Go的100天之旅-07条件和循环

    目录 条件语句 if条件语句 switch条件语句 循环语句 for循环 goto语句 条件语句 Go的条件语句和其它语言类似,主要是不支持三目运算符所以?:这种条件判断是不支持的.Go提供的条件判断 ...

  2. Go的100天之旅-04基础数据类型

    基础数据类型 在变量的定义中,我们讲了每个变量是有类型的,类型在计算机中是用来约束数据的解释.Go语言和其它计算机语言一样,提供丰富了丰富的数据类型,我们就来看看到底有哪些类型,同时也可以比较一下它和 ...

  3. Go的100天之旅-03变量

    变量 变量介绍 变量这个词来源于数学,类似方程中的x.y,代表的是存储在计算机中的值.这里主要介绍Go和其它编程语言不一样的地方,在前面我们提到过,Go是一门静态语言.静态语言区别动态语言一个重要的特 ...

  4. Go的100天之旅-02基本语法

    基本语法 Go关键字 下面是Go的25个关键字: break default func interface select case defer go map struct chan else goto ...

  5. Go的100天之旅-01初识Go

    初识Go Go简介 Go的历史 上个世纪70年代Ken Thompson和Dennis M. Ritchie合作发明了UNIX操作系统同时Dennis M. Ritchie发明了C语言. 2007年的 ...

  6. Go的100天之旅-06数组和Slice

    目录 数组 Slice 数组 Go的数组和其它语言基本上一样,是长度固定的特定类型元素组成的序列,这基本上是所有语言数组的特性.和其它语言相比差异主要在声明和初始化的写法上,下面是简单声明一个数组: ...

  7. Go的100天之旅-08字符串

    目录 简介 UTF-8字符 字符串的常用操作 简介 字符串在各种编程语言中都是很基础的一种类型,在Go中字符串简单理解就是一个数组,数组里面的元素是byte类型.因此基本上拥有类似数组的全部特性.例如 ...

  8. 原创 C++之常量(一)

    1概述 一个C++程序就是一系列数据与操作的集合.当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中.当数据与内存发生关联的时候,这些数据就会具有如下的特性: 数据在内存中的地址.这 ...

  9. C语言基础(2)-常量

    常量就是在程序运行中不可变化的量. #define #define MAX 100 定义了一个常量名字叫MAX,值是100,用#define定义的常量一般用大写字母. #define是一个预编译指令, ...

随机推荐

  1. 01---eclipse使用

    一.eclipse快捷键 1.alt+? 或 alt+/:自动补全代码或者提示代码,可用于main函数(main).输出函数(syso)等 2.ctrl+1:错误提示 3.ctrl+/:自动注释当前行 ...

  2. Paper templates for Word(Word论文模板)

    经常看论文的朋友可能会发现,像一些大的会议的论文格式都是相同的,他们的格式一般都十分固定,这些论文是用什么软件做出来的呢?一开始我想当然的认为是用LaTeX,因为LaTeX提供了一些文类,我自然而然的 ...

  3. Android学习笔记.9.png格式图片

    .9.png可以保证图片在合适的位置进行局部拉伸,避免了图片全局缩放造成的图片变形问题.AS提供了制作点9图片的便捷入口,并且会检查你的.9图是否有不合理的拉伸区域. 选中图片点击create 9-p ...

  4. MySQL的分页存储过程

    -- 创建分页存储过程-- 1 判断存在即删除DROP PROCEDURE IF EXISTS popp;-- 2 创建万能分页CREATE  PROCEDURE popp(_fls VARCHAR( ...

  5. Cannot instantiate the type Map

    今天在使用Map中犯了个低级错误,记录一下: 打算使用map为一个视频List观看记录的统计标识,key为vid,value默认为false,当该key已经统计,标识value为true,初始实例化M ...

  6. Jmeter系列(26)- 详解 JSON 提取器

    果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 为什么要用 JSON 提取器 JSON ...

  7. JavaWeb网上图书商城完整项目--验证码

    1.首先需要集成下面的jar 2.在web.xml配置验证码的servlet <?xml version="1.0" encoding="UTF-8"?& ...

  8. JavaWeb网上图书商城完整项目--day02-20.修改密码各层实现

    1.我们来看看后台操作的业务流程 每一层都按照上面的步骤来进行实现: 这里我们要使用commUtils.toBean把表单提交的参数封装成User对象,必须保证User对象中的字段和表单提交的字段的名 ...

  9. junit搭建自动化测试框架(一)

    这里主要使用Junit搭建一个分层的自动化测试框架.这就是一个有业务逻辑的单元测试的思想.灵活性很大,对测试人员的代码能力要求较高. 以登录QQ邮箱为例,数据源使用了集合接口Map.借鉴了MVC的思想 ...

  10. Python 简明教程 --- 20,Python 类中的属性与方法

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 与客户保持良好的关系可以使生产率加倍. -- Larry Bernstain 目录 类中的变量称为属 ...