3 变量

100 阅读3分钟

本文为译文。原文地址:Variables

声明一个单变量

**var name type**是声明一个单变量的语法。

package main

import "fmt"

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

这里var agr int声明了一个叫做名为age,类型为int的变量。我们没有分配任何值给这个变量。如果变量没有被分配任何值,go会自动根据变量的类型初始化一个**zero value**如果你运行该程序,则会得到以下输出。

My age is 0  

声明一个带初始值的变量

一个变量当被声明的时候可以携带一个初始值。语法如下

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)
}

类型推导

如果一个变量有一个初始值,go会自动使用其初始值推导出其变量类型。因此,如果变量有一个初始值,那么其类型可以被省略。

var name = initialvalue  

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)
}

如果变量有初始值,那么变量类型是可以被省略的。

package main

import "fmt"

func main() {  
    var width, height = 100, 50 //"int" is dropped

    fmt.Println("width is", width, "height is", height)
}

如果你没有对变量进行初始化操作,go也会自动进行赋zero value

package main

import "fmt"

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

如果我们想以不同的类型声明变量,语法如下

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)
}

快捷声明

go提供了一种简洁的办法做变量声明。语法**name := initialvalue**

下面的代码声明了变量count赋值为10.go会自动的进行类型推导为int.

package main

import "fmt"

func main() {  
    count := 10
    fmt.Println("Count =",count)
}

同时我们也可以声明过个值

  name, age := "naveen", 29 //short hand declaration

快速声明需要对所有的变量都必须进行初始化。下面的程序将会打印一个错误assignment mismatch: 2 variables but 1 values 这是因为age没有被分配一个初值

package main

import "fmt"

func main() {  
    name, age := "naveen" //error

    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)
}

下面的程序就会报错了//error, no new variables

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
}

变量也可以被分配一个运行时计算出来的值。

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就是在运行时才被赋的值。