0
点赞
收藏
分享

微信扫一扫

Go 语言基础-变量



什么是变量?

变量是我们给内存位置赋的一个名称,可以在该位置上存储特定类型的值。Go 语言语法中有多种方式声明变量,我们一一来看下。

声明单个变量

声明单个变量的语法: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 会使用类型的零值初始化变量。在这里,因为 int 类型的零值是 0,所以 age 的初始值是 0。执行上面的程序,将会输出:

My age is 0

同类型的任何值都可以赋给同类型的变量,上面的代码,任何 int 类型的值都可以赋值给变量 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)
}

执行[1]

上面的代码输出:

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

执行[2]

上面的代码中,age 是 int 类型的变量,初始值为 29,执行程序输出:

My age is 29

类型推断

如果声明变量时有初始值,Go 会自动根据初始值推断该变量的类型,所以就可以不用显式地声明变量的类型,语法如下:

var name = initialvalue

Go 会自动地根据初始值的类型推断变量的类型。

下面代码的第 6 行,声明变量 age 时省略了类型 int,但赋了初始值,所以 Go 会根据初始值 29 推断出 age 变量类型为 int。

package main

import "fmt"

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

执行[3]

多变量声明

通过单条语句可以声明多个变量,语法如下:

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

执行[4]

声明变量时如果有初始值,则变量的类型可以省略,比如:

package main

import "fmt"

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

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

执行[5]

上面两段程序输出是一样的:

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

执行[6]

上面的代码输出:

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

执行[7]

输出如下:

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

上面的代码,我们声明了 string 类型的变量 name,两个 int 类型变量 age、height。

短变量声明

Go 语言还提供了一种更简洁的声明变量方式:短变量声明,使用 := 操作符,形如:

name := initialvalue

下面这段代码通过短变量声明的方式声明了变量 count 并初始化为 10,Go 会根据整型数值 10 推断 count 的类型为 int。

package main

import "fmt"

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

执行[8]

上面的代码输出:

Count = 10

短变量声明也可以用来声明多个变量,语法如下:

package main

import "fmt"

func main() {
name, age := "naveen", 29 //short hand declaration

fmt.Println("my name is", name, "age is", age)
}

执行[9]

上面的代码声明了变量 name、age,类型分别是 string、int。

执行这段代码将会输出:

my name is naveen age is 29

短变量声明必须给所有左边的变量赋值,比如下面这段代码,因为没有给变量 age 赋值,所以会报错 assignment mismatch: 2 variables but 1 values。

package main

import "fmt"

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

fmt.Println("my name is", name, "age is", age)
}

执行[10]

短变量声明时,:= 操作符左边至少有一个是新声明的变量,比如下面这段代码:

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

执行[11]

上面代码的第 8 行,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
}

执行[12]

执行之后发现会报错 /prog.go:8:10: no new variables on left side of :=,这是因为在上面代码的第 8 行,变量 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)
}

执行[13]

上面的代码,math 是标准库的包,Min() 是包里的函数,不用担心,我们将在后面的章节中学习这些知识。现在我们只需要知道,c 是调用 Min() 函数计算出的 a 和 b 之间的较小值。

代码输出:

Minimum value is  145.8

由于 Go 是强类型的语言,所以变量被声明之后,不能使用另一种类型的值赋值。下面这段代码,变量 age 声明为 int 类型,但却赋给 string 类型的值,所以会报错 cannot use "naveen" (type string) as type int in assignment。

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
}

执行[14]

感谢阅读,欢迎留言交流!


via:
​​​https://golangbot.com/variables/​​作者:Naveen R

这是持续翻译的第 28/100 篇优质文章。
如果你有想交流的话题,欢迎留言。

资料下载


  • 回复「电子书」,获取入门、进阶 Go 语言必看书籍。
  • 回复「视频」,获取价值 5000 大洋的视频资料,内含实战项目(不外传)!
  • 回复「路线」,获取最新版 Go 知识图谱及学习、成长路线图。
  • 回复「面试题」,获取四哥精编的 Go 语言面试题,含解析。
  • 回复「后台」,获取后台开发必看 10 本书籍。


如果您的朋友也在学习 Go 语言,相信这篇文章对 TA 有帮助,欢迎转发分享给 TA,非常感谢!

Go 语言基础-变量_golang

举报

相关推荐

0 条评论