Go 语言基础之变量

由于不是纯编程零基础的教程,所以不会在这里讲述“变量”的概念,后续的文章也是。

在 Go 语言中,定义变量主要有两种方式,一个是使用 var 关键字,另外一个就是使用 := 的方式。虽然这部分内容很简单,但是各种使用姿势还是要学会的。

使用 var 来定义变量

如果做过前端,那一定很熟悉 var,在 Go 中,你可以像在 JavaScript 中一样定义一个变量,如下:

var age = 18

Go 语言是强类型语言,使用 var 后会自动推断变量的类型,不需要你定义类型,但是你仍然可以在声明变量的时候定义它的类型,如这样:

var age int = 18

// 格式为:var 变量名 变量类型

这里表明 age 变量是一个整型类型,关于数据类型后面会说到。需要注意的是,如果声明了类型,就不可以赋值为别的类型的值,如下面这样就会报错的:

var age int = "18" // error

age 定义为 int 类型,却赋值为字符串类型,所以报错了。

变量可以先声明,再赋值。当声明一个变量却没有赋值时,变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为 0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil

var name string  // 声明变量却没有赋值,要同时定义类型
fmt.Println(name)  // 打印操作,输出为空
name = "abc"  //  赋值
fmt.Println(name)  // "abc"

这段代码的开始,我们只声明了变量 name 为字符串类型,但没有赋值,此时它的值是空字符串,等赋值操作后即可改变值。要注意的是,只声明变量而不赋值时,一定要同时指定变量类型,且后续赋值时也一定要是该类型的值,像这样是错的:

var name  // error,变量只声明而不赋值时一定要指定类型
name = "foo"

用 var 同时定义多个变量

var 可以一次定义多个变量:

var a, b = 18, "hello world"

如果变量是相同的类型,也可以统一指定类型:

var a, b int = 18, 20  // 指定 a 和 b 都是 int 类型

但不能给每个变量都定义不同的类型:

var a int, b string = 18, "hi" // error

我们很自然地想到这样写法,同时定义 a 为整型,b 为字符串类型,这样写成一行的定义多个变量类型的方式是不允许的,要么都不指定类型,要么都指定为同一类型。一行的不行,可以用多行的方式,你也可以这样批量定义变量:

var (
  a int
  b string
)

// 也可以同时赋值
var (
  a int    = 18
  b string = "hi"
)

这种方式就方便多了,不过一定要记得加上括号。

使用 := 定义变量

:= 也叫短变量声明,它只能用在函数内部,也就是说只能定义局部变量,像这样:

package main

a := 1 // error,:= 不能用在函数外部

func main() {
  b := 2 // ok
}

使用 := 无需声明类型,建议在函数内部使用这种方式,更简洁。

匿名变量

这里补充一个匿名变量。在有多重赋值的情况下,如果想要忽略某个值,可以使用 匿名变量(anonymous variable)。 匿名变量用一个下划线 _ 表示,例如:

package main

import "fmt" // 导入包 fmt

// 这里是一个函数方法,会返回两个值
func getInfo() (int, string) {
  return 18, "foo"
}

func main() {
  // 使用 x 来接受方法的第一个返回值。使用 _ 来忽略第二个返回值
  x, _ := getInfo()
  fmt.Println(x) // 18
}

匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。在实际项目中,匿名变量时常用到,应该要熟悉它。

结尾

学会定义变量是一门语言中比较简单的环节,自己手动敲代码练习一遍就会了,建议文中所有代码都编辑器过一遍哦。

如有错误,欢迎指出。

posted @ 2021-05-25 23:57  黑色瓶子  阅读(208)  评论(0编辑  收藏  举报