常量

简介

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

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

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. cc22a_demo_c++重载自增自减操作符-代码示范

    cc22a_demo_c++重载自增自减操作符-代码示范 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespa ...

  2. WeChair项目Beta冲刺(6/10)

    团队项目进行情况 1.昨日进展    Beta冲刺第六天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑开发,编码预约 ...

  3. C语言副本机制

    1.除了数组外,其他都有副本机制(包括结构体数组) 2.结构体作为参数具有副本机制,结构体返回值也有副本机制 . 3.函数的参数和返回值都有他的副本机制. #include<stdio.h> ...

  4. 最通俗易懂的RSA加密解密指导

    前言 RSA加密算法是一种非对称加密算法,简单来说,就是加密时使用一个钥匙,解密时使用另一个钥匙. 因为加密的钥匙是公开的,所又称公钥,解密的钥匙是不公开的,所以称为私钥. 密钥 关于RSA加密有很多 ...

  5. java soket通信总结 bio nio aio的区别和总结

    1 同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣服,自己亲自干这件事,别的事干不了. 2 异步 异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作 ...

  6. 动力节点 mysql 郭鑫 34道经典的面试题

    DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `DEPTNO` int(2) NOT NULL COMMENT '部门编号', `DNAME` ...

  7. cookie和session及token

    cookie,session傻傻分不清楚? 做了这么多年测试,还是分不清什么是cookie,什么是session?很正常,很多初级开发工程师可能到现在都搞不清什么是session,cookie相对来说 ...

  8. 寻找hive数据倾斜路

    前言 一直以来我都是从书上.博客上.别人口中听说数据倾斜,自己也从而指导一些解决数据倾斜的方式或者一些容易出现数据倾斜的场景.但是从来没有认真的去发现过,寻求过,研究过. 正文 我打开了hive官网  ...

  9. DNS篇(详解DNS)

    *文章来源:https://blog.egsec.cn/archives/601 *本文将主要说明:本文主要叙述什么是DNS.域名的层级.DNS 解析过程.DNS的缓存时间.DNS 的记录类型.DNS ...

  10. linux主机连接sftp报错received unexpected end-of-file from SFTP server

    SFTP 连接主机失败,提示信息如下: 登陆目标主机,编辑查看 /etc/ssh/sshd_config 文件,找到 Subsystem 关键字 替换为 Subsystem sftp internal ...