常量

简介

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

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

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. JSONobject按照put顺序存储和读取

    new的时候加true即可: JSONObject jsonObject = new JSONObject(true);

  2. Laya 吐槽日志.

    新换了一个公司,公司有两个产品都是用的laya, 一个as写的2D游戏, 一个ts写的3D游戏 as写小游戏,各种不舒服啊,  一堆 __JS这样的代码,   体验极差. laya IDE 按钮只能做 ...

  3. user is not in the sudoers file

    使用用户账户使用sudo来运行一些特权命令时出现了如下错误(sudo是一个允许特定的用户组用另一个用户(典型的是root)的特权来运行一个命令): user is not in the sudoers ...

  4. 韩顺刚-tcp报文头协议详细分析第一包数据:序号是0,发送数据的长度是0,因为没有收到对端的数据,所以确认号是0, Syn的标志位设置成1,这里没有发送的数据,只发送TCP的20个字节的头部

    TCP报文段首部格式 大部分TCP报文头部都是20个字节,有的数据包要加上选项. 上面一行代表4个字节,源端口和目的端口都是2个字节. TCP协议是面向字节流的协议 TCP是一段一段分块的发送数据的 ...

  5. 蒲公英 · JELLY技术周刊 Vol.12 尤雨溪新作 Vite, 你会支持么?

    「蒲公英」期刊,每周更新,我们专注于挖掘「基础技术.工程化.跨端框架技术.图形编程.服务端开发.桌面开发.人工智能」等多个大方向的业界热点,并加以专业的解读:不仅如此,我们还精选凹凸技术文章,向大家呈 ...

  6. 入门大数据---ClouderaManager和CDH是什么?

    1.CDH概述 CDH(Cloudra's Distribution Apache Of Hadoop)是Apache Hadoop和相关项目的最完整,经过测试和最流行的发行版.CDH提供Hadoop ...

  7. MTPuTTy使用

    在开发过程中我们常常会有连接远程 lunix 服务器的需求,这个时候我们需要一个工具来帮助我们做这件事,而这类工具就是远程连接工具.常见的工具有XShell,SecureCRT,Putty等.这里我选 ...

  8. Python实用笔记 (9)高级特性——列表生成式

    列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. 举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, ...

  9. IIS 发布页面后或者vs平台运行后显示“未能加载文件或程序集“WebApi”或它的某一个依赖项。试图加载格式不正确的程序。”

    一般情况下出现这样的问题是因为.dll文件不存在或者路径不正确. 但今天我遇到的情况都不在这两个内. 我确定.dll文件是存在的,路径也是正确的. 但是程序死活都是“未能加载文件或程序集“xxx”或它 ...

  10. 《JavaScript高级程序设计》(第二版)

    这本书的作者是 Nicholas C.Zakas ,博客地址是 http://www.nczonline.net/ ,大家可以去多关注,雅虎的前端工程师,是YUI的代码贡献者,可想而知这本书得含金量, ...