美文网首页
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教程第三篇:变量

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

  • Golang学习笔记-1.3 变量

    本文系第三篇Golang语言学习教程var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量...

  • Go基础学习之包,变量和函数

    学习了一下Golang语言官网推荐的Go基础教程 - A Tour of Go,在此记录包,变量和方法部分的学习心...

  • go语言教程

    go语言教程 已定稿 1. go语言介绍 已定稿 2. 变量、常量、指针 已定稿 3. 数据类型 已定稿 4. 控...

  • Go语言结构+目录+源码=Go语言教程

    1 目录和源码 首先我门看目录和源码,从之前的Go 语言教程我们知道,Go语言有工程目录,和GOPATH环境变量对...

  • beego安装后 bee new 时报错"bee: c

    按照教程已经正确的go get了 beego 和 bee;也在环境变量$PATH中添加了$GOPATH/bin; ...

  • 【Mac】beego安装后 bee new 时报错"bee: c

    按照教程已经正确的go get了 beego 和 bee;也在环境变量GOPATH/bin; 结果在 GOPATH...

  • go语言学习资料

    菜鸟教程-Go 语言教程 https://www.runoob.com/go/go-tutorial.html老男...

  • go 安装配置(一)

    基本 安装gobrew install go 查看go环境变量go ev 设置go环境变量vim .bash_pr...

  • Golang命令

    Go命令教程 (访问密码:kmNYam)Go命令教程 go buildgo build命令用于编译我们指定的源码文...

网友评论

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

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