Go教程第三篇:变量

· · 888 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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教程第三篇:变量

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

888 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传