美文网首页
Go教程第三篇:变量

Go教程第三篇:变量

作者: 大风过岗 | 来源:发表于2019-11-30 15:17 被阅读0次

    Go教程第三篇:变量

    本文是《Golang系列教程》第三篇文章,它主要讲解golang中变量的用法。

    什么是变量

    变量是一个内存位置的名称,这个内存位置是用于指定类型的值。在go语言中,有许多不同的语法来声明一个变量。

    声明单一变量

    声明单一变量的语法: var name type。

    package main
    
    import "fmt"
    
    func main() {
        var age int // 变量声明
        fmt.Println("my age is", age)
    }
    
    

    var age int 语句声明了一个名称为age,数据类型为int的变量。我们没有为该变量指定任何值。
    如果一个变量没有指定任何值的话,go会自动地把它初始化为该数据类型所对应的零值。
    在本例子中,age会被指定一个0值。如果你运行这个程序,你就可以看到下面的输出:

     my age is 0
    

    一个变量可以指定为其类型所能对应的任意值。在上面的程序中,age可以被赋值为任意的整数值。

    package main
    
    import "fmt"
    
    func main() {
        var age int // variable declaration
        fmt.Println("my age is ", age)
        age = 29 //assignment
        fmt.Println("my age is", age)
        age = 54 //assignment
        fmt.Println("my new age is", age)
    }
    
    

    上面的程序,将产生如下输出:

    my age is  0
    my age is 29
    my new age is 54
    

    声明一个有初始值的变量

    在变量声明的时候,可以给定一个初始值。

    语法如下:

    var name type =initialvalue

    package main
    
    import "fmt"
    
    func main() {
        var age int = 29 //变量声明时给定初始值
    
        fmt.Println("my age is", age)
    }
    
    

    在上面的程序中,age是一个int类型的变量,同时给定了一个初始值29。如果你运行上面的程序
    ,你可以看到如下输出。这也就表明age已经被初始化了一个29的值。

    my age is 29

    类型引用

    如果变量有一个初始值,Go会自动地根据该初始值推断出此变量的数据类型。因此,如果一个变量有初始值的话,
    我们可以在变量声明里面,把类型省略掉。

    如果变量使用 var name =initialvalue 进行声明,Go将自动根据初始值推断出变量类型。

    在下面的例子中,你可以看到 在age变量声明里面已经没有的int类型了,因为该变量有一个初始值为29,
    go可以很轻易地推断出它的类型是int。

    package main
    
    import "fmt"
    
    func main() {
        var age = 29 // 自动推断变量类型
    
        fmt.Println("my age is", age)
    }
    
    

    多变量声明

    我们可以在单一的语句中声明多个变量。

    其语法如下:

    var name1, name2 type = initialvalue1,initialvalue2

    具体代码如下:

    package main
    
    import "fmt"
    
    func main() {
        var width, height int = 100, 50 //声明多个变量
    
        fmt.Println("width is", width, "height is", height)
    }
    
    

    如果这些变量有初始值的话,类型也是可以省略的。下面的程序将使用类型推断来声明多个变量。

    package main
    
    import "fmt"
    
    func main() {
        var width, height = 100, 50 //"int" 被丢弃了
    
        fmt.Println("width is", width, "height is", height)
    }
    
    

    上面程序打印结果是: width is 100 height is 50。

    正如你猜测的那样,如果没有为width和height指定初始值的话,他们将把0作为他们的初始值。

    package main
    
    import "fmt"
    
    func main() {
        var width, height int
        fmt.Println("width is", width, "height is", height)
        width = 100
        height = 50
        fmt.Println("new width is", width, "new height is ", height)
    }
    
    

    上面的程序将输出如下:

    width is 0 height is 0
    new width is 100 new height is  50
    
    

    不过有时候,我们或许想在单一的语句中,声明多个具有不同数据类型的变量,这时,怎么办呢?
    它的语法如下:

    var (
          name1 = initialvalue1
          name2 = initialvalue2
    )
    
    

    下面的程序将使用上面的语法来声明多个不同类型的变量。

    package main
    
    import "fmt"
    
    func main() {
        var (
            name   = "naveen"
            age    = 29
            height int
        )
        fmt.Println("my name is", name, ", age is", age, "and height is", height)
    }
    
    

    快捷声明(short hand declaration)

    Go 也提供了另一种简洁方式声明变量。也被称为 快捷声明,它使用 := 操作符来做到这一点。

    语法如下:

    name :=initialvale

    package main
    
    import "fmt"
    
    func main() {
        name, age := "naveen", 29 //short hand declaration
    
        fmt.Println("my name is", name, "age is", age)
    }
    
    

    你如果运行上面的程序,你就可以看到会输出 my name is naveen age is 29。

    快捷声明需要为每个变量指定初始值。例如下面的程序就会抛出一个错误: cannot assign 1 values to 2 variables。这是因为age并没有被指定一个值。

    package main
    
    import "fmt"
    
    func main() {
        name, age := "naveen" //错误
    
        fmt.Println("my name is", name, "age is", age)
    }
    
    

    在使用快捷声明时,要保证在:=操作符左侧至少有一个变量是新声明的。如下面的程序:

    package main
    
    import "fmt"
    
    func main() {
        a, b := 20, 30 // declare variables a and b
        fmt.Println("a is", a, "b is", b)
        b, c := 40, 50 // b is already declared but c is new
        fmt.Println("b is", b, "c is", c)
        b, c = 80, 90 // assign new values to already declared variables b and c
        fmt.Println("changed b is", b, "c is", c)
    }
    

    在上面的程序中,在第八行,b之前已经被声明过了,而c是新声明的。它的运行结果是:

    a is 20 b is 30
    b is 40 c is 50
    changed b is 80 c is 90
    
    
    

    反之,如果我们运行下面的程序的话,将是错误的:

    package main
    
    import "fmt"
    
    func main() {
        a, b := 20, 30 //a and b declared
        fmt.Println("a is", a, "b is", b)
        a, b := 40, 50 //error, no new variables
    }
    
    

    它将抛出错误:no new variables on left side of := 。这是因为不管是a还是b都是已经在先前已经声明过的。
    在操作符:=的左侧没有任何新的变量。

    另外,给变量指定的值也可以是运行时计算出来的。像下面的程序:

    package main
    
    import (
        "fmt"
        "math"
    )
    
    func main() {
        a, b := 145.8, 543.8
        c := math.Min(a, b)
        fmt.Println("minimum value is ", c)
    }
    
    

    在上面的程序中,变量c的值是在运行时期计算出来的,它是a和b的最小值。上面的程序将输出如下:

    minimum value is 145.8

    由于Go是一个强类型的语言,所以,如果在变量声明时指定了一个数据类型,那么就不允许给该变量指定
    另一个数据类型的值。下面的程序就会抛出一个错误: cannot use "naveen" (type string) as type int in assignment。
    因为age在声明时指定的数据类型是int,而我们却给其指定了一个string类型的值。

    package main
    
    func main() {
        age := 29      // age is int
        age = "naveen" // error since we are trying to assign a string to a variable of type int
    }
    
    

    感谢您百忙之中阅读本文。如果有任何反馈和问题,请您在评论区留言。

    备注
    本文系翻译之作原文博客地址

    相关文章

      网友评论

          本文标题:Go教程第三篇:变量

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