[golang note] 变量常量
2016-02-17 15:22
736 查看
变量
• 变量声明
√ golang变量声明的关键字为var。√ golang变量声明时类型信息放置在变量名之后。
▶ 单个变量声明
▪ 语法如下
var name type
▪ 示例如下
var v1 int // 整形 var v2 *int // 指针 var v3 string // 字符串 var v4 []int // 数组切片 var v5 [10]int // 数组 var v6 map[string]int // map var v8 func(a int) int // 函数 var v7 struct { // 结构体 f int }
▶ 多个变量声明
▪ 语法如下
var ( name1 type1 name2 type2 name3 type3 ... )
▪ 示例如下
var ( v1 int // 整形 v2 *int // 指针 v3 string // 字符串 v4 []int // 数组切片 v5 [10]int // 数组 v6 map[string]int // map v8 func(a int) int // 函数 v7 struct { // 结构体 f int } )
• 变量声明时初始化
▶ 第一种方式
▪ 语法如下
var name type = value var ( name1 type1 = value1 name2 type2 = value2 name3 type3 = value3 ... )
▪ 示例如下
var v1 int = 10 var ( v2 int = 20 v3 string = "abc" )
▶ 第二种方式
▪ 语法如下
var name = value // 编译器可以自动推导出变量的类型
▪ 示例如下
var v1 = 10 var ( v2 = 20 v3 = "abc" )
▶ 第三种方式
√ golang引入了一个c和c++中没有的符号:=,用于明确表明同时进行变量声明和初始化的工作。√ 出现在:=左边的变量不应该是已声明过,否则编译器将给出错误:no new variables on left side of :=。
▪ 语法如下
name := value // 编译器可以自动推导出变量的类型
▪ 示例如下
v1 := 10 v2 := 20 v3 := "abc"
• 变量赋值
▶ 多元赋值
▪ 语法如下
variable1, variable2, ... variablen = value1, value2, ... valuen
▪ 示例如下
var v1, v2 int v1, v2 = 10, 20
多元赋值支持不引入中间变量来交换两个变量的值。
v1 := 10 v2 := 20 v1, v2 = v2, v1
• 变量包可见性
√ golang中,以大写字母开头的变量在包外可见,否则为包内私有。例如下面golearning工程下有两个包:main包和math包。其中src/math/math.go中定义了一个Pi变量,在src/main/main.go中使用该变量:
![](https://images2015.cnblogs.com/blog/526315/201602/526315-20160217151248378-1326652757.png)
// math.go package math var Pi float64 = 3.14159265358979323846 // main.go package main import ( "fmt" "math" ) func main() { fmt.Println(math.Pi) }
如果将Pi改为小写pi,那么编译器将给出错误:
![](https://images2015.cnblogs.com/blog/526315/201602/526315-20160217151732409-769951284.png)
常量
√ golang中,常量是指编译期间运算得出且不可改变的值。• 常量定义
√ golang常量定义的关键字为const。// 定义单个常量 const Pi float64 = 3.14159265358979323846 // 定义多个常量 const ( Size int64 = 1024 Eof int64 = -1 )
√ golang常量定义可以限定常量类型,也可以不限定。如果常量定义时没有限定类型,那么它与字面常量一样,是一个无类型常量。
// 定义单个常量 const Pi = 3.14159265358979323846 // 无类型浮点常量 // 定义多个常量 const ( Size = 1024 // 无类型整型常量 Eof = -1 // 无类型整型常量 )
√ golang常量定义的右值可以是一个在编译期运算的常量表达式,这与c语言中宏的性质是一样的。
const Mask = 1 << 3 // correct const Path = os.Getenv("PATH") // incorrect : const initializer os.Getenv("PATH") is not a constant
• 特殊常量
▶ 字面常量
√ 字面常量(literal),是指程序中硬编码的常量。√ golang中字面常量是无类型的,只要该字面常量在相应类型的值域范围内,就可作为该类型的常量。
-12 // 整数类型的常量 3.14159265358979323846 // 浮点类型的常量 3.2+12i // 复数类型的常量 true // 布尔类型的常量 "foo" // 字符串常量
▶ 预定义常量
√ golang预定义了这些常量:true、false和iota。▪ true和false
√ 预定义常量true和false所属的基础类型为bool。package main import ( "fmt" "reflect" ) func main() { const Mask = true fmt.Println(reflect.TypeOf(Mask)) // bool }
▪ iota
√ 预定义常量iota所属的基础类型为int。√ iota可认为是一个可被编译器修改的常量:在每一个const关键字出现时值重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。
const ( a = iota // 0 b = iota // 1 c = iota // 2 ) const ( d = 1 << iota // 1 e = 1 << iota // 2 f = 1 << iota // 4 ) const ( g = 42 * iota // 0 h = 42 * iota // 42 i = 42 * iota // 84 )
√ 如果两个const赋值语句的表达式一样,那么可以省略后一个赋值表达式。
const ( a = iota // 0 b // 1 c // 2 ) const ( d = 1 << iota // 1 e // 2 f // 4 ) const ( g = 42 * iota // 0 h // 42 i // 84 )
▶ 枚举
√ golang并不支持众多其他语言中支持的enum关键字。√ 在golang中定义枚举值的方式:在const后跟一对圆括号的方式定义一组常量。
const ( Sunday = iota Monday Tuesday Wednesday Thursday Friday Saturday NumberOfDays )
• 常量包可见性
√ golang中,以大写字母开头的常量在包外可见,否则为包内私有。相关文章推荐
- hdoj4893Goffi and GCD【欧拉函数】
- golang 阻塞的坑
- hdoj4892Goffi and Squary Partition
- 配置gosublime
- 为什么GOF的23种设计模式里面没有MVC?
- AlphaGo、深度学习及SEO
- 计算餐补(go语言实现)
- 学django过程的资料
- 升级mongo3.2.1后遇到的数据重复的问题---后续
- 下载国外apk
- 我与小娜(13):LIGO是什么组织?
- Google是如何运营的
- ubuntu dajngo部署静态文件
- django部署
- 深入学习golang—channel
- Google插件免费实现无地域无限制访问
- (转)back(-1) or go(-1)区别
- django引入静态文件小结
- 西安力邦智能医疗&可穿戴设备沙龙--第1期---苹果HealthKit、谷歌GoogleFit来袭,智能医疗要爆发吗?
- LeetCode Algorithms #263 <Ugly Number>