Go:变量、常量、枚举
一、变量
package main
import "fmt"
func variableZeroValue() {
	// 变量声明
	var a int
	var b string
	fmt.Println(a, b)			 // 0
	fmt.Printf("%d %q\n", a, b)	 // 0 ""
}
func variableInitialValue() {
	// 变量初始化
	var a, b = 1, 2     // 编译器可以自动推导出变量的类型
	c, d := 1, "pd"     // 使用:=定义变量(只能在函数内使用)
	a = 10              // 赋值不能使用 a := 10
	a, b = b, a			// 变量交换
	fmt.Println(a, b, c, d)
}
//在函数外定义变量,不能使用 :=
var a = 10
var b = 20
// 上面方式可以这样
var (
	c = 30
	d = 40
)
func main() {
	variableZeroValue()
	variableInitialValue()
	fmt.Println(a, b, c, d)
}
- 变量类型写在变量名之后;
- 编译器可以推测变量所属类型;
- 没有char,只有rune;
- 原生支持复数类型。
二、常量
在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
一个常量的声明语句定义了常量的名字,和变量的声明语法类似,常量的值不可修改,这样可以防止在运行期被意外或恶意的修改。
2.1 字面常量
所谓字面常量(literal),是指程序中硬编码的常量,如:
-12
3.1415926 // 浮点类型的常量
3.2+12i // 复数类型的常量
true // 布尔类型的常量
"foo" // 字符串常量
2.2 常量定义
通过const关键字,可以给字面常量指定一个名字:
func constDefine() {
	// 定义常量
	/*
	常量定义可以限定常量类型,但不是必需的。
	如果定义常量时没有指定类型,那么它与字面常量一样,是无类型常量。
	 */
	const pi =  3.1415926
	const zero = 0.0	   // 无类型浮点常量
	const (
		size int64 = 1024
		xx = -1			   // 无类型整型常量
	)
	const a, b float32 = 1, 2  // 常量的多重赋值
	const c, d, e = 3, 4, "foo"
	fmt.Println(pi, zero, size, xx, a, b, c, d, e)
}
2.3 预定义常量
Go语言预定义了这些常量:true、false和iota。
iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。
func func1() {
	const ( 		// iota被重设为0
		c0 = iota 	// c0 == 0
		c1 = iota 	// c1 == 1
		c2 = iota 	// c2 == 2
	)
	fmt.Println(c0, c1, c2)  // 0 1 2
	const (
		a11 = 1 << iota 	// a11 == 1 (iota在每个const开头被重设为0)
		b11 = 1 << iota 	// b11 == 2
		c11 = 1 << iota 	// c11 == 4
	)
	fmt.Println(a11, b11, c11)  // 1 2 4
	/*
	如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式;
	因此,上面的前两个const语句可简写为:
	 */
	const (
		c00 = iota
		c01
		c02
	)
	const (
		a22 = 1 << iota
		b22 = 1 << iota
		c22 = 1 << iota
	)
	const (
		b = 1 << (10 * iota)
		kb
		mb
		gb
	)
	fmt.Println(b, kb, mb, gb)  // 1 1024 1048576 1073741824
}
三、枚举
枚举指一系列相关的常量,比如下面关于一个星期中每天的定义。通过上一节的例子,我们看到可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在Go语言中通常用于定义枚举值。Go语言并不支持众多其他语言明确支持的enum关键字。
下面是一个常规的枚举表示法,其中定义了一系列整型常量:
func enum() {
	const (
		Sunday = iota
		Monday
		Tuesday
		Wednesday
		Thursday
		Friday
		Saturday
		numberOfDays  // 这个常量没有导出
	)
	fmt.Println(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday)  // 0 1 2 3 4 5 6
}
同Go语言的其他符号(symbol)一样,以大写字母开头的常量在包外可见。
以上例子中numberOfDays为包内私有,其他符号则可被其他包访问。
Go:变量、常量、枚举的更多相关文章
- C#中常量\枚举\结构及数组的运用
		又一天结束了,今天在云和学院学习的知识下面继续来做总结. 一.常量\枚举\结构的运用 理论: 常量:const 类型 常量名 = 常量值 确定数量.确定值的几个取值:东西南北.男女.上中下. 枚举: ... 
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
		JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ... 
- iOS开发Swift篇(01) 变量&常量&元组
		iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ... 
- C#基础总结之一变量常量-if嵌套语句-witch结构-类型转换
		//Console.WriteLine("Hello World"); //打印显示 //Console.ReadLine(); //接收输入的值 //Console.ReadKe ... 
- 李洪强iOS开发Swift篇---11_变量&常量&元组
		李洪强iOS开发Swift篇---11_变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对 ... 
- PHP 获得当前页面所有变量常量的值
		get_defined_vars() - 返回由所有已定义变量所组成的数组,这个函数在二次开发的时候用起来非常给力: get_defined_constants();可以返回当前的所有常量 zend的 ... 
- Cocos2D在新版Swift中常量枚举值引用代码的修改
		大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在SpriteBuilder中是无法直接给一个CCB文 ... 
- TF:Tensorflow定义变量+常量,实现输出计数功能—Jason niu
		#TF:Tensorflow定义变量+常量,实现输出计数功能 import tensorflow as tf state = tf.Variable(0, name='Parameter_name_c ... 
- C#基础课程之二变量常量及流程控制
		课堂练习:.一个四位整数 输出它的千位,百位,十位,个位 数字. ; ; % ; % ; ; Console.WriteLine("千位数" + b+" 百位数" ... 
- Swift-基础语法之变量&常量&元组
		使用 let来声明一个常量,用 var来声明一个变量.常量的值在编译时并不要求已知,但是你必须为其赋值一次.这意味着你可以使用常量来给一个值命名,然后一次定义多次使用 myVariable = let ... 
随机推荐
- BS与CS的联系与区别。
			C/S是Client/Server的缩写.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix或 SQL Server.客户端需要安装专用的 ... 
- javaSE基础(三)
			泛型类:像ArrayList这样的特殊类,他们允许通过类型参数来指明使用的数据类型. 报装类:一种用于将基本类型的数据"封装"成对象的类. 装箱:将 基本类型的数据自动转换为对应类 ... 
- P2465 [SDOI2008]山贼集团  dp
			这个题是一道树形dp+状压dp二合一,先预处理每种组合会有什么额外的费用,然后在树上dp就行了. 题干: 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两 ... 
- windows下mongodb设置用户名密码&用python连接
			环境: 主机:WIN10 python版本:3.5 mongodb版本:3.4.2 开发环境:pyCharm mongodb设置用户名密码: 编写mongodb配置文件mongodb.confdbpa ... 
- Flask中的ThreadLocal本地线程,上下文管理
			先说一下和flask没有关系的: 我们都知道线程是由进程创建出来的,CPU实际执行的也是线程,那么线程其实是没有自己独有的内存空间的,所有的线程共享进程的资源和空间,共享就会有冲突,对于多线程对同一块 ... 
- bzoj1776
			点分治/贪心 对于点分治的理解不够深刻...点分治能统计树上每个点对的信息,那么这里就是统计同种颜色点对之间的最大距离,自然可以用点分 然后点分,每次统计最大距离,但是略微卡常... 还有一种贪心的方 ... 
- HTML5牛刀小试
			第一周的HTML5苦逼之路,就这么简单,充实,忙碌的开始了,丝毫不敢有一丢丢懈怠,压力是有的,但更多的是对自己的信心,更是对自己的踏上苦逼之路的意志的肯定. 简单回顾了下这周所学内容.从认识HTML基 ... 
- source命令用法(转载)
			转自:http://zhidao.baidu.com/link?url=mNfsPHSjTEm7llgyMYx0UVNwkJmD_cxLeHtZnHcM6Ms8LDXofVHka_EzHi6GltbR ... 
- maptalks 如何加载 ArcGIS 瓦片图层
			最近需要加载 ArcGIS 瓦片图层,运行官网加载 ArcGIS 瓦片图层的 demo 是没有问题的.如果把 ArcGIS 瓦片图层 URL 换成是自已发布的 ArcGIS 地图服务,发现加载不出来, ... 
- (数论 欧拉筛法)51NOD 1106 质数检测
			给出N个正整数,检测每个数是否为质数.如果是,输出"Yes",否则输出"No". Input 第1行:一个数N,表示正整数的数量.(1 <= N &l ... 
