[关闭]
@codemanship 2014-06-15T16:39:42.000000Z 字数 1900 阅读 5105

学习Golang语言(2): 变量

学习Golang语言 golang Go语言


跟着“码术”一起学习Golang语言。学习一门新的语言,我们首先了解的是新语言的变量声明,基本类型,关键字以及控制流。本章主要讲解变量声明.

学习一门新的语言,我们首先了解的是新语言的变量声明,基本类型,关键字以及控制流。

Go语言在语法上类似于C语言。但是不同于C语言,Go虽然也是用分号进行语句分割,但是程序员不需要在每行程序结尾添加分号。Go语言的编译器会自动在每行末尾添加分号。
但是,如果你需要将两行(或者更多行)语句放在同一行内,那么需要使用分号(;)进行分隔。

变量声明
Go语言不同于其他语言的地方在于:变量的类型在变量名之后。例如:
C中: int a;而在Go中:var a int。
此外,Go语言在定义变量时候如果没有赋值,则为该变量赋值为其类型的零值。
变量声明有两种方式:使用var关键字;或者使用:= 操作符赋值。

var number int //声明变量number为int数据,此时默认复制为0  
number := 2 //直接声明变量number,同时赋值为2

注意
使用 := 操作符声明变量和其初始值,不必明确指明变量类型,因为初始值已经说明了变量的类型。
:=操作符同时完成了变量声明和赋值的操作。
使用:= 操作符,对于整形字面量Go语言推断其类型为int,对于浮点型字面量Go语言推断其类型为float64 对于复数字面量Go语言推断其类型为complex128.
通常的做法是不去显式地声明其类型,除非我们需要使用一个Go语言无法推断的特殊类型。


变量声明还有一下几点:
多个var声明可以进行分组;const和import也可以进行类似操作。使用圆括号,例如:

var(
   a int
   b bool
)

多个相同类型的变量可以在一行完成声明:

var x,y int       //   将x和y声明为int变量同样可以这么使用:=操作符
a,b := 100,101  // 将a和b声明为int变量同时分别赋值:100和101  

Go中还有一个特殊的变量名 ' _'(下划线);它表示所有赋给它的值都被丢弃。

_, b := 100 , 101   // 表示丢弃100,将101赋值给变量b

对于声明了但没有使用的变量,在编译时候编译器会报错。这体现了Go语言简介的思想:所有无用的代码,库都不应该出现。

常量
说道变量声明,肯定需要谈到变量中的特例:常量。
常量在Go中也就是constant。它在编译时就被创建,只能是数字,字符串或者布尔值。
常量声明格式: const identifier [type] = value; 例如:const Pi = 3.14159 生成x这个常量。
其中[type] 是可选项。编译器会根据所赋值的类型自动为常量选择类型。

const a string = "hello"
const a = "hello"

以上两个效果一样。

常量必须是在编译时候被赋值,常量可以是被定义为一个计算式,但是计算式中所有值在编译时都是确定的。例如:

  1. 正确:const c1 = 2/3
  2. 错误:const c2 = getNumber()//编译会出错,因为getNumber()在编译时值不确定。

数值型常量没有大小和符号的要求,可以是任意高的精度,不会溢出。

const Ln2= 0.693147180559945309417232121458\  
176568075500134360255254120680009  
const Log2E= 1/Ln2     // 这是一个精确的倒数  
const Billion = 1e9       // float 常量  
const hardEight = (1 << 100) >> 97  

数值型常量只有在赋值给一个精度太低不能代表其值的变量时才溢出。此时编译时会报错。

多个常量声明:

const beef, two, c = “meat”, 2, “veg”  
const Monday, Tuesday, Wednesday, Thursday, Friday, Saturday = 1, 2, 3, 4, 5, 6  
const (  
Monday, Tuesday, Wednesday = 1, 2, 3  
Thursday, Friday, Saturday = 4, 5, 6  
)  

而在生成枚举值时候可以使用关键字:itoa

const(
     a = itoa
     b = itoa
)

第一个itoa表示0,因此a=0,当iota再次在新的一行中被使用,它的值会增加1.因此b =1.
此外,还可以进行一下省略:

const(
     a = itoa
     b
)

例如: 在 time 库中: 一周中每天的名字:

const (
Sunday = iota    // 0
Monday           // 1
Tuesday          // 2
Wednesday        // 3
Thursday        // 4
Friday           // 5
Saturday         // 6
)

欢迎关注码术!一起学习golang.
欢迎关注码术

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注