Golang 入门 : 常量
常量
相对于变量而言,常量是在程序使用过程中,不会改变的数据。有些地方你需要将定义好的常量重复使用,代码中你不允许它的值改变。例如 圆周率 在程序执行过程中不会改变。
常量的声明
const Pi float64 = 3.14
const 声明、Pi 常量、float64 类型、3.14 值
多变量声明
const (
Pi float64 = 3.14 // 定义常量 Pi 类型为 float64 值为 3.14
Pi2 // 未定义类型和值默认取上一条类型和值
Age = 18 // 重新定义类型和值时为 int 值为 18
)
如果未声明常量的类型和值,它将从上一个常量中获取它,在上面 pi2 将会从 pi 上获取类型和值,如果新声明了常量,并且有分配值,它就是新声明的常量。 例如上面的 Age 就是 int 类型的 18。 如果再继续声明 Age2 不给 Age2 赋初始值的话, 默认就会取上一个 Age 的值和类型。
常量的作用域
常量只能在其声明的范围内使用,如果在一个函数内部作用域中声明的常量与外部名称相同,则只能用自己内部的常量,它将忽略外部的常量。例如:
package main
import "fmt"
// 定义了一个全局常量
const Pi float64 = 3.14
func main() {
// 在 main 函数中定义了一个局部常量
const Pi float64 = 3.1415
// 优先使用局部常量
fmt.Println(Pi)
myfunc()
}
func myfunc() {
// 这里是用全局常量
fmt.Println(Pi)
}
总结一下
- 常量数值不能修改。
- 常量定义后可以不使用。
- 常量定义不能使用简短定义方式。
- 常量种使用的数据类型只能是 整型、布尔、浮点、复数、字符串类型。
iota 特殊的常量
iota 是常量里面的计数器,初始值默认值是0,可以被编译器自动修改,每定义一组常量时,iota 逐行自增1。
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha" iota += 1
f = 100 //iota +=1
g //100 iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}
iota如何使用
Go语言中没有提供像其他语言中的 enum 枚举类型,但是可以使用 const 来模拟枚举类型。iota 可以被用作枚举值。
package main
import (
"fmt"
)
type Mytype int
//定义一个常量 来模拟枚举类型 Spring设置为iota为值默认就是 0
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays
)
func main() {
//打印定义的常量枚举信息Tuesday 值2
fmt.Printf("%v\n", Tuesday) //2
}
有趣的的 iota 实例
package main
import "fmt"
const (
i=1<<iota
j=3<<iota
k
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
以上实例运行结果为:
i= 1
j= 6
k= 12
l= 24
iota 表示从 0 开始自动加 1,所以 i=1<<0, j=3<<1(<< 表示左移的意思),即:i=1, j=6,这没问题,关键在 k 和 l,从输出结果看 k=3<<2,l=3<<3。
简单表述:
- i=1:左移 0 位,不变仍为 1;
- j=3:左移 1 位,变为二进制 110, 即 6;
- k=3:左移 2 位,变为二进制 1100, 即 12;
- l=3:左移 3 位,变为二进制 11000,即 24。
注:<<n==*(2^n)。
左移运算符 << 是双目运算符。左移 n 位就是乘以 2 的 n 次方。 其功能把 << 左边的运算数的各二进位全部左移若干位,由 << 右边的数指定移动的位数,高位丢弃,低位补 0。
右移运算符 >> 是双目运算符。右移 n 位就是除以 2 的 n 次方。 其功能是把 >> 左边的运算数的各二进位全部右移若干位, >> 右边的数指定移动的位数。
Golang 入门 : 常量的更多相关文章
- Java程序员的Golang入门指南(下)
Java程序员的Golang入门指南(下) 4.高级特性 上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号.函数多返回值.switch-case默认break.函数闭包.集合 ...
- Java程序员的Golang入门指南(上)
Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如 ...
- Golang入门(2):一天学完GO的基本语法
摘要 在配置好环境之后,要研究的就是这个语言的语法了.在这篇文章中,作者希望可以简单的介绍一下Golang的各种语法,并与C和Java作一些简单的对比以加深记忆.因为这篇文章只是入门Golang的第二 ...
- Golang 入门 : 竞争条件
笔者在前文<Golang 入门 : 理解并发与并行>和<Golang 入门 : goroutine(协程)>中介绍了 Golang 对并发的原生支持以及 goroutine 的 ...
- Golang 入门 : goroutine(协程)
在操作系统中,执行体是个抽象的概念.与之对应的实体有进程.线程以及协程(coroutine).协程也叫轻量级的线程,与传统的进程和线程相比,协程的最大特点是 "轻"!可以轻松创建上 ...
- Golang 入门 : channel(通道)
笔者在<Golang 入门 : 竞争条件>一文中介绍了 Golang 并发编程中需要面对的竞争条件.本文我们就介绍如何使用 Golang 提供的 channel(通道) 消除竞争条件. C ...
- 推荐一个GOLANG入门很好的网址
推荐一个GOLANG入门很好的网址,栗子很全 https://books.studygolang.com/gobyexample/
- Golang的常量定义及使用案例
Golang的常量定义及使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常量的定义 package main import ( "fmt" ) fu ...
- Golang入门(4):并发
摘要 并发程序指同时进行多个任务的程序,随着硬件的发展,并发程序变得越来越重要.Web服务器会一次处理成千上万的请求,这也是并发的必要性之一.Golang的并发控制比起Java来说,简单了不少.在Go ...
- Golang入门(3):一天学完GO的进阶语法
摘要 在上一篇文章中,我们聊了聊Golang中的一些基础的语法,如变量的定义.条件语句.循环语句等等.他们和其他语言很相似,我们只需要看一看它们之间的区别,就差不多可以掌握了,所以作者称它们为&quo ...
随机推荐
- Qt编写地图综合应用18-地图模式
一.前言 除了传统的街道图地图外,默认的一般都是街道图,还有卫星图.三维图等,其中又有叠加层,比如叠加路况图层和路网图层等,最近去了多家的地图官网看对应的api接口,总体上感觉现在都往2.5D或者3D ...
- [转]E1接口介绍
E1 通道本来设计用来传输电话的,每个 E1(带宽 2.048M)可以传 30 路电话,后来扩大的应用范围,可以用作传网络,串口等不同的业务:E1 是一个基本的传输单元,其最终还是通过光纤来传输的,如 ...
- Windows应用开发-常用工具集推荐
.NET/WPF开发 Visual Studio 最新版本是VS2022,官网下载:Visual Studio 2022 IDE - 适用于软件开发人员的编程工具 VsColorOutput 控制台 ...
- DVWA靶场File Inclusion (文件包含) 漏洞所有级别通关教程及源码解析
文件包含 文件包含漏洞(File Inclusion Vulnerability)是一种常见的网络安全漏洞,主要出现在应用程序中不安全地处理文件路径时.攻击者可以利用此漏洞执行恶意文件,或者访问不该被 ...
- 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'
Navicat导出的MySQL8.0脚本在低版本MySQL导入执行报错 utf8mb4_0900_ai_ci 替换 utf8_general_ci utf8mb4 替换 utf8 完成以上两点替换再次 ...
- WPF BitmapSource /BitmapImage 获取像素点颜色
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- [转载]「服务」WCF中NetNamedPipeBinding的应用实例
「服务」WCF中NetNamedPipeBinding的应用实例 WCF中有很多种绑定,根据官方的说法,NetNamedPipeBinding是适用于同一台主机中不同进程之间的通信的. 今天终于实现了 ...
- Word文档转换成Html格式
CentOS 下安装 OpenOffice4.0 一.更新服务器 yum源 [root@APP2 /]# yum clean all [root@APP2 /]# yum makecache [roo ...
- w3cschool-Lua 教程
https://www.w3cschool.cn/lua/ Lua 学习笔记之一(初阶话题) 1.八种基本类型: 如下表 基本类型 描述 备注 数值(number) 内部以double表示 字符串(s ...
- 我的程序库:HiCSDB
HiCSDB是我写的一个通用程序库,地址:https://github.com/xumingxsh/HiCSDB 该库的目标是简化C#的数据库交互操作. 在这个库中,我将数据库的交互操作抽象为一下几个 ...