zoukankan      html  css  js  c++  java
  • Golang教程:变量

    声明单一变量

    声明一个变量的语法为:var name type,例如

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

    语句 var age int 声明了一个类型为 int,名称为 age 的变量。在这里我们没有给它赋任何值。如果一个变量没有被赋予任何值,Go 会自动将这个变量初始化为其类型的 0值,比如这里的 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 // variable declaration with initial value
    
        fmt.Println("my age is", age)
    }

    在上面的程序中, age 是一个 int 型的变量,初始值为 29运行上面的程序,输出如下。可以看到 age 的初始值确实为29

    my age is 29

    类型推导

    如果声明一个变量时提供了初始值,Go可以根据该初始值来自动推导变量的类型。因此如果声明变量时提供了初始值,就可以不必指定其类型。

    也就是说,如果声明变量的形式为:var name = initialvalue,Go将根据 initialvalue 自动推导变量 name 的类型。

    在下面的例子中,你可以看到声明变量 age 时并没有指定其类型。因为 age 的初值为 29,Go 自动推断其类型为 int

    package main
    
    import "fmt"
    
    func main() {  
        var age = 29 // type will be inferred
    
        fmt.Println("my age is", age)
    }

    多变量声明

    多个变量可以在一条语句中声明。

    多变量声明的语法为:var name1, name2 type = initialvalue1, initialvalue2,例如:

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

    如果指定了初始值,则 type 可以省略。下面的程序利用类型推导声明了多个变量:

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

    可以看到输出结果为:

    width is 100 height is 50

    正如你猜想的那样,如果不指定 width 和 height 的初值,它们将自动被赋值为 0,也就是说它们将以 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)
    }

    这里我们声明了一个字符串类型的变量 name,以及两个整型的变量 age 和 height。(我们将在下一篇教程中讨论 Golang 中可用的类型)。上面的程序将会产生如下输出:

    my name is naveen , age is 29 and height is 0

    速记声明

    Go 提供了另一种简洁的声明变量的方式。这种方式称为速记声明(shorthand declaratiion)。速记声明使用 := 操作符来声明变量。

    速记声明的语法为:name := initialvalue,例如:

    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

    记声明要求必须给声明的每一个变量都提供初始值。下面的 程序将会报错:assignment count mismatch: 2 = 1。这是因为 没有给 age 提供初始值。

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

    速记声明要求在 := 的左边必须至少有一个变量是新声明的。

    一个变量不能被赋予与其类型不同的值。下面的程序将报错: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
    }
  • 相关阅读:
    递归斐波那契数列时间复杂度
    动态规划 矩阵链乘法
    kmp算法
    贪心 单源最短路径
    贪心法 背包问题求解
    贪心法 货币支付问题或找零问题
    贪心算法简介
    排列问题的递归算法和非递归算法
    php __set() __get() __isset() __unset()四个方法的应用
    使用栈结构完毕四则运算
  • 原文地址:https://www.cnblogs.com/liuzhongchao/p/9155582.html
Copyright © 2011-2022 走看看