Go语言基础之变量和常量

旧街凉风 提交于 2020-02-22 21:20:31

1 为什么需要变量

联想到现实中,任何事物都是变化的,如果想用程序实现对一个事情的描述,那么久的用一些变化的量去描述这个事情中的一些变化的属性,比如说人类的身高、年龄等,这些量都是随着时间变化的,或者是不同的人用不同身高和年龄。所以说,要使用变量去对这些属性进行描述。

变量是程序的基本组成单位。我们都知道程序都是对数据进行处理,那么这些数据在程序运行的过程就是存储在变量中,在Golang语言中一个变量存储一种类型的数据,程序在每次运行时变量中可能存储的是不相同的数据。

2 Golang变量介绍

2.1 变量的概念

在数学概念中,变量(variable)表示没有固定值且可改变的数。从计算机视角来说,变量相当于内存中一段或多段数据存储空间的表示。可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,同样的道理,通过变量名可以访问到变量(值)。

作为静态类型语言,Go变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们只能修改变量值,无法改变类型。

2.2 变量的使用步骤

  • 声明变量(定义变量)
  • 变量赋值
  • 使用变量

在Golang中,既支持先声明变量,后给变量赋值;又支持在声明变量时给变量赋值。

2.3 关键字var定义变量

用关键字var定义变量

var x int         //自动初始化为0 
var y = false     //自动推断为bool类型

一次定义多个变量

var x, y int     //相同类型的多个变量 
var a, b = 100, "tom"      //不同类型初始化值

//批量声明变量
var (
    a string
    b int
    c bool
    d float64
)

2.4 简短模式

func main() {    
    x := 1    
    a, b = 100, "jerry" 
}

这种简短模式虽然方便,但是使用时有以下注意点:

  • 定义变量,同时显示初始化
  • 不能提供数据类型
  • 只能用在函数内部

当这种简短模式第一次出现在函数内部时的作用在于定义变量并给这个变量赋值。注意下面的使用方式:

var x = 10 
func main() {   
    fmt.Println(&x, x)      
    x := 20       //重新定义和初始化同名局部变量   
    fmt.Println(&x, x) 
}

简短模式在 特殊情况下退化成仅对变量赋值,如下代码:

func main() {   
    x := 100   
    fmt.Println(&x)    
    x, y := 200, "tom" //x 退化为赋值操作,仅有y是变量定义   
    fmt.Println(&x, x, y) 
}

注意:退化赋值的前提条件是最少有一个新变量被定义,且必须在同一作用域。

另外,Golang支持多变量赋值。在进行多变量赋值操作时,首先计算出所有右值,然后再依次完成赋值操作。示例如下:

func main() {    
    x, y := 1, 2   
    x, y = y+3, x+2      
    fmt.Println(x, y) 
}

2.5 匿名变量

在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)。匿名变量用一个下划线 _表示,例如:

func foo() (int, string) {
    return 10, "viktor"
}
 
func main() {
    x, _ := foo()
    _, y := foo()
    fmt.Println("x=", x)
    fmt.Println("y=", y)
}

匿名便令不占用命令空间,不会分配内存,所以匿名变量之间不存在重复声明。

2.6 变量命令建议

  • 以字母或下划线开始,由多个字母、数字和下划线组合而成
  • 区分大小写
  • 使用驼峰拼写格式
  • 局部变量优先使用短名
  • 不要使用保留关键字
  • 不建议使用与预定义变量、类型、内置函数相同的名字

3 Golang常量介绍

相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。常量的声明和变量的声明类型,只是将var换成const,常量在定义的时候必须赋值。

3.1 常量的声明和赋值

常量值必须是编译时确定的数值、字符串、布尔值。

const pi = 3.1415926
const e = 2.7182

声明了pie这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。

const同时声明多个常量时,如果省略了值则表示和上面的一行的值相同,如下代码:

const (
    a1 = 100
    a2
    a3
)
//常量a1,a2,a3的值都是100

3.2 iota

iota是Golang中的常量计数器,只能在常量的表达式中使用。

iotaconst关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次(iota可以理解为const语句块中的行索引)。使用iota能简化定义,在定义枚举时很有用。如下示例:

const (
    n1 = iota  //0
    n2         //1
    n3         //2
    n4         //3
)

几个常见的iota示例

使用_跳过某些值

const  (
    n1 = iota  //0
    n2         //1
    _
    n4         //3
)

iota声明中间插队

const (
    n1 = iota  //0
    n2 = 100   //100
    n3 = iota  //2
    n4         //3
)
    const n5 = iota  //0

定义数量级

const (
    _ = iota
    KB = 1 << (10 * iota)   //二进制的1左移指定位数
    MB = 1 << (10 * iota)
    GB = 1 << (10 * iota)
    TB = 1 << (10 * iota)
    PB = 1 << (10 * iota)    
)

多个 iota定义在一行

const (
    a, b = iota + 1, iota + 2  //1,2
    c, d                       //2,3
    e, f                       //3,4    
)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!