美文网首页
第四篇:面向过程编程-变量与常量

第四篇:面向过程编程-变量与常量

作者: 意一ineyee | 来源:发表于2018-03-28 14:45 被阅读22次

    目录

    一、变量

    1、变量的定义
    2、变量的赋值
    3、变量的初始化
    4、匿名变量

    二、常量

    1、字面常量
    2、const关键字定义一个常量
    3、预定义常量iota

    一、变量

    变量就是给一块数据存储空间的命个名,在开发中我们可以通过定义一个变量来申请一块数据存储空间,然后通过引用变量名来使用这块存储空间。

    1、变量的定义
    • 需要注意的是:
      • 定义了但没有使用的变量,编译器会报错
      • :=定义变量并赋值只能用在函数内部,在函数外部定义变量的话只能用老办法
    • 定义方法1:Go语言定义一个和C语言有点不同,它引入了一个关键字var(variable的缩写)来表明我们要定义一个变量,紧跟着是变量名,然后才是变量的类型,和C的反了一下。如:

    (清单1.1)

    var v1 bool
    var v2 int
    var v3 float64
    var v4 string
    
    • 定义方法2:当然为了避免我们一直重复地写var关键字,我们可以把多个变量放在一起来定义。如:

    (清单1.2)

    var (
        v1 bool
        v2 int
        v3 float64
        v4 string
    )
    
    2、变量的赋值
    • 普通赋值:当我们已经定义好一个变量后,就可以对它进行赋值。如:

    (清单1.3)

    var (
        v1 bool
        v4 string
    )
    
    v1 = true
    v4 = "你好"
    
    • 多重赋值:Go语言有一个很好玩的地方就在于它可以给多个变量一起赋值。

    例如要交换两个变量的值,在C语言中我们可能需要一个中间变量来帮忙,但是在Go语言中就不需要了。如:

    (清单1.4)

    var (
        i int
        j int
    )
    
    i = 11
    j = 12
    
    i, j = j, i // 多重赋值
    
    3、变量的初始化

    初始化和赋值是两个不同的概念,赋值是指变量在定义完之后的复制操作,如上面的。而变量的初始化是指我们在定义变量的时候,同时给变量赋一个初始值,来完成变量的初始化操作,如下。

    • 最原始的变量初始化方法:在变量的定义后面给变量赋值。如:
      (清单1.5)
    var v1 int = 11
    
    • 不指定变量类型的初始化方法:其实在Go语言中,我们已经不再需要指定变量的类型了,编译器会在编译阶段根据变量值自动推导出变量的类型。这让Go看起来好像动态语言一样,但其实它是一门静态语言。如:
      (清单1.5)
    var v1 = 11 // 编译器在编译阶段会自动根据11推导出v1的类型为整型
    
    • 最强变量初始化法:这个方法什么关键字也不需要了,直接用“冒号+等于号”:=就可以定义一个变量并给它赋值。我们看到前两种方法是用var定义了一个变量之后,然后再给变量赋值,为了更简洁,Go里还提供了一个非常简单的变量赋值方法,就是它引入了一个新的运算符“冒号+等于号”:=,它代表的意思就是定义一个变量并赋值,因此“冒号”就代替了var的作用,我们也就不用再写var

    (清单1.6)

    v1 := 11 // 定义一个变量v1并赋值,编译器在编译阶段会自动根据11推导出v1的类型为整型
    

    当然了我们要注意,:=运算符是变量定义+赋值运算符,因此不能把它等同于赋值运算符=所以:=左边的变量不能是已经定义过的,否则编译器会报错。如:

    (清单1.7)

    var v1 := 11
    

    或者

    var v1 int
    v1 := 11
    

    编译器都会报错。

    4、匿名变量

    前面我们举过例子,当函数返回多个返回值时,我们不想获取其中的某个变量,就可以用下划线_这个匿名变量来接收返回值,这样代码更清晰、好看、不乱,没用的东西就不写嘛。如:

    (清单1.8)

    package main
    
    import "fmt"
    
    func main() {
    
        _, firstName, _ := getName() // 使用匿名变量接收不需要的返回值
    
        fmt.Println(firstName)
    }
    
    func getName() (lastName, firstName, nickname string) {
    
        return "王", "二狗", "狗子"
    }
    

    二、常量

    在Go语言中,常量是指编译期间就已知且不可改变的值。常量可以是布尔类型、数值类型(如整型、浮点型和复数类型)、字符串类型等。

    1、字面常量

    所谓字面常量,是指程序中硬编码的常量。如:

    (清单2.1)

    true/false // 布尔类型的常量
    11 // 整型常量
    3.1415926... // 浮点型常量
    P"yiyi" // 字符串常量
    
    2、定义一个常量:使用const关键字

    我们就可以使用const关键字给一些字面常量起一个比较易于理解的名字。如:

    (清单2.2)

    const Pi = 3.141592653589793
    const zero = 0
    

    当然,我们要知道Go语言针对所有的关键字,为了避免我们重复的书写关键字,都提供了“括号”()的写法,const当然也不例外。如:

    
    

    但是也要注意,使用const关键字定义一个常量时,等号右边必须是编译期间就已经能知道结果的值,不能是程序在运行期才能得到结果的值,否则编译会报错。如:

    (清单2.3)

    const v1 = 1 + 1 // 这样是可以的
    const v2 = add(1, 1) // 这样是不可以的
    

    Go语言放弃了宏定义,我们要注意宏定义和const是不一样的。

    3、预定义常量

    Go语言提供了一些预定义的常量:如true和false就是专门用作布尔值的,还有一个预定义常量是iota

    iota的用法是:每当它遇到const关键字的时,就会被置为0,然后在遇到下一个const关键字之前,iota每出现一次,它的值就会自动加1。如:

    (清单2.4)

    const ( // 遇见const关键字,iota被置为0
        v1 = iota // 所以v1 = 0
        v2 = iota // v2 = 1
        v3 = iota // v3 = 2
    )
    
    const ( // 又遇见const关键字,iota被置为0
        v4 = 2 * iota // 所以v4 = 0
        v5 = 4 * iota // v5 = 4
    )
    

    iota的应用场景:通过上面对iota用法的了解,我们可以发现iota常量通常和const关键字搭配在一起使用,如实现枚举。

    Go语言中没有其它语言里我们常用的enum关键字来定义枚举,所以我们需要使用iota+const来实现,如:

    (清单2.5)

    const (
        Monday = iota // 如果两个const赋值语句的表达式一样,我们可以省略后面的复制表达式,只给第一个常量值赋值就可以了
        Tuesday
        Wednesday
        Thursday
        Friday
        saturday // saturday和sunday是小写的,所以包内私有,其它枚举值包外可见
        sunday
    )
    

    相关文章

      网友评论

          本文标题:第四篇:面向过程编程-变量与常量

          本文链接:https://www.haomeiwen.com/subject/liiuqftx.html