GO语言基础入门--变量

1、GO变量声明

本Go语言基础入门内容均来自于《Go语言编程》,个人记录,加深理解。

Go语言的变量声明方式和c/c++语言不同。Go语言引入了var关键字。变量声明如下:
  
var v1 int//声明一个整型变量v1
var v2 string
var v3 [10]int	//数组
var v4 []int//数组切片
var v5 struct { //结构体
  f int
}
var v6 *int//指针
var v7 map[string] int//map,ley为string,value为int
var v8 func(a int) int
可以看到,变量的声明没有以分号 ; 作为结束符
var关键字也可一次定义多个变量
<pre name="code" class="cpp">var (
  v1 int
  v2 string
)


2、变量初始化

var关键字在变量的定义是是可以省略的,如:
var v1 int = 10 // 正确的使用方式1
var v2 = 10 // 正确的使用方式2,编译器可以自动推导出 v2的类型
v3 := 10 // 正确的使用方式3,编译器可以自动推导出 v3的类型
使用:= 可以减少代码的书写量,这对程序员来说是大大的好处啊
但在我们使用的过程中,不应该出现如下:
var i int
i := 2
这会导致编译错误,出现这样的错误:no new variables on left side of :=

3、变量赋值

<pre name="code" class="cpp" style="font-family: Courier;">var v10 int//先声明,再赋值
v10 = 123
i, j = 2, 3//Go支持多重赋值

多重赋值最简单的好处就是,交换两数的值。如:
i, j = j, i

编译器会先计算等号右边的值,再为左边的赋值

4、匿名便量

Go语言支持多返回值和匿名变量
func GetName() (firstName, lastName, nickName string) {
 return "May", "Chan", "Chibi Maruko"
}
该函数返回3个 string 类型的变量 
firstName, lastName, nickName
我们可以在不新定义变量的情况下,直接返回 匿名变量。这样使我们的代码变得更加简洁,优雅
当然我们在接收函数返回的时候也可以选择性的接收参数
_, _, nickName := GetName()

5、常量

在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
字面常量
-12
3.14159265358979323846 // 浮点类型的常量
3.2+12i // 复数类型的常量
true // 布尔类型的常量
"foo" // 字符串常量
常量定义
通过const关键字,定义常量:
const Pi float64 = 3.14159265358979323846
const zero = 0.0 // 无类型浮点常量
const (
 size int64 = 1024
 eof = -1 // 无类型整型常量
)
const u, v float32 = 0, 3 // u = 0.0, v = 3.0,常量的多重赋值
const a, b, c = 3, 4, "foo"
// a = 3, b = 4, c = "foo", 无类型整型和字符串常量
如果常量在定义时没有限定类型,那么该常量 是一个 字面常量
常量定义的右值也可以是一个在编译期运算的常量表达式,如:
const mask = 1 << 3
由于常量的赋值是一个编译期行为,所以右值不能出现任何需要运行期才能得出结果的表达
式,比如试图以如下方式定义常量就会导致编译错误:
const Home = os.GetEnv("HOME")
原因很简单, os.GetEnv() 只有在运行期才能知道返回结果,在编译期并不能确定,所以
无法作为常量定义的右值。
预定义常量
Go语言预定义了这些常量: true、 false和iota。
iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被
重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。
从以下的例子可以基本理解iota的用法:
const (  // iota被重设为 0
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const (
a = 1 << iota // a == 1 (iota在每个const开头被重设为 0)
b = 1 << iota // b == 2
c = 1 << iota // c == 4
)
const (
u = iota * 42 // u == 0
v float64 = iota * 42 // v == 42.0
w = iota * 42 // w == 84
)
const x = iota // x == 0 ( 因为 iota又被重设为 0了 )
const y = iota // y == 0 ( 同上)
如果两个const的赋值语句的表达式是一样的,那么可以省略后一个赋值表达式。因此,上
面的前两个const语句可简写为:
const ( // iota被重设为 0
c0 = iota // c0 == 0
c1 // c1 == 1
c2 // c2 == 2
)
const (
a = 1 <<iota // a == 1 (iota在每个const开头被重设为 0)
b // b == 2
c // c == 4
)

6、枚举

枚举指一系列相关的常量,比如下面关于一个星期中每天的定义。通过上一节的例子,我们
看到可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在Go语言中通常用于定义
枚举值。 Go语言并不支持众多其他语言明确支持的enum关键字。
const (
Sunday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
numberOfDays // 这个常量没有导出
)
同Go语言的其他符号( symbol)一样,以大写字母开头的常量在包外可见。
以上例子中numberOfDays为包内私有,其他符号则可被其他包访问。



本文来自:CSDN博客

感谢作者:chenqijing2

查看原文:GO语言基础入门--变量

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。