Go的100天之旅-常量
常量
简介
道可道,非常道。这里常道指的永恒不变的道理,常有不变的意思。顾名思义和变量相比,常量在声明之后就不可改变,它的值是在编译期间就确定的。
下面简单的声明一个常量:
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是一门静态语言,变量的类型是不可变,甚至不可以对int和int32两种类型的变量进行+操作,即使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)
}
我们可以看到c和b不是相同类型,但还是可以把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
下面一行保持和第一行相同的运行规则只是iota加1了,所以相当于b = 3 * 1
Go的100天之旅-常量的更多相关文章
- Go的100天之旅-07条件和循环
目录 条件语句 if条件语句 switch条件语句 循环语句 for循环 goto语句 条件语句 Go的条件语句和其它语言类似,主要是不支持三目运算符所以?:这种条件判断是不支持的.Go提供的条件判断 ...
- Go的100天之旅-04基础数据类型
基础数据类型 在变量的定义中,我们讲了每个变量是有类型的,类型在计算机中是用来约束数据的解释.Go语言和其它计算机语言一样,提供丰富了丰富的数据类型,我们就来看看到底有哪些类型,同时也可以比较一下它和 ...
- Go的100天之旅-03变量
变量 变量介绍 变量这个词来源于数学,类似方程中的x.y,代表的是存储在计算机中的值.这里主要介绍Go和其它编程语言不一样的地方,在前面我们提到过,Go是一门静态语言.静态语言区别动态语言一个重要的特 ...
- Go的100天之旅-02基本语法
基本语法 Go关键字 下面是Go的25个关键字: break default func interface select case defer go map struct chan else goto ...
- Go的100天之旅-01初识Go
初识Go Go简介 Go的历史 上个世纪70年代Ken Thompson和Dennis M. Ritchie合作发明了UNIX操作系统同时Dennis M. Ritchie发明了C语言. 2007年的 ...
- Go的100天之旅-06数组和Slice
目录 数组 Slice 数组 Go的数组和其它语言基本上一样,是长度固定的特定类型元素组成的序列,这基本上是所有语言数组的特性.和其它语言相比差异主要在声明和初始化的写法上,下面是简单声明一个数组: ...
- Go的100天之旅-08字符串
目录 简介 UTF-8字符 字符串的常用操作 简介 字符串在各种编程语言中都是很基础的一种类型,在Go中字符串简单理解就是一个数组,数组里面的元素是byte类型.因此基本上拥有类似数组的全部特性.例如 ...
- 原创 C++之常量(一)
1概述 一个C++程序就是一系列数据与操作的集合.当一个C++程序开始运行的时候,与该程序相关的数据就会被加载到内存中.当数据与内存发生关联的时候,这些数据就会具有如下的特性: 数据在内存中的地址.这 ...
- C语言基础(2)-常量
常量就是在程序运行中不可变化的量. #define #define MAX 100 定义了一个常量名字叫MAX,值是100,用#define定义的常量一般用大写字母. #define是一个预编译指令, ...
随机推荐
- Tensorflow 中(批量)读取数据的案列分析及TFRecord文件的打包与读取
内容概要: 单一数据读取方式: 第一种:slice_input_producer() # 返回值可以直接通过 Session.run([images, labels])查看,且第一个参数必须放在列表中 ...
- Flask04-SQL
from flask import render_template, flash, redirect from app import app from app import db, models fr ...
- 逻辑式编程语言极简实现(使用C#) - 1. 逻辑式编程语言介绍
相信很多朋友对于逻辑式编程语言,都有一种最熟悉的陌生人的感觉.一方面,平时在书籍.在资讯网站,偶尔能看到一些吹嘘逻辑式编程的话语.但另一方面,也没见过周围有人真正用到它(除了SQL). 遥记当时看&l ...
- Myeclipse启动WebLogic 总是报账号密码无效<Authentication denied: Boot identity not valid
在MyEclipse下配置了Weblogic 11后,每次启动从报错: Critical> 看了下描述,是用户名及密码什么的问题,我想起来,配置Weblogic 的域的时候将密码改成了12345 ...
- Excel表格中第一个输入的零不显示怎么办?
Excel表格是办公的人经常要用到的软件,经常用它来统计和记录各种数据,但是有时候表格中第一个数字是零的时候,经常第一个零输入时不显示的,这个情况我们怎么解决呢?这里小编跟大家讲一下希望能帮助大家. ...
- STL初步学习(map)
3.map map作为一个映射,有两个参数,第一个参数作为关键值,第二个参数为对应的值,关键值是唯一的 在平时使用的数组中,也有点类似于映射的方法,例如a[10]=1,但其实我们的关键值和对应的值只能 ...
- abp审计日志功能的关闭
参考官网介绍:https://aspnetboilerplate.com/Pages/Documents/Audit-Logging
- python基础知识练习2
1.请写出如下代码的结果: import copy list1 = [1,2,['a','b'],('c','d')] list2 = list1 list3 = copy.copy(list1) l ...
- java面试题——对于多态你是怎么理解的呢?不一样的角度,带你重新看java
java面试的时候经常会被问到一个问题,那就是java三大特性:继承,封装和多态.那么这三者的含义究竟是什么你真的清楚吗?我看网上大多都是人云亦云.所以我想把我的想法记录下来供大家参考-今天先聊一个, ...
- 硬刚 lodash 源码之路,compact & concat
前置 本篇随笔包含 _.compact 和 _.concat 及其依赖的工具函数. 你可能需要一些 JavaScript 基础知识才能看懂一些没有注释的细节. compact _.compact(ar ...