GO语言变量 | 青训营笔记

120 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

go语言与我常用的Java语言乍看相似, 细看有很大的不同, 所以做一篇关于基础语法的笔记, 供自己学习使用.

变量的基本数据类型

此处列举出go语言常用的数据类型

  • 布尔: bool

  • 数字: int, float32, float64

  • 字符串: string

  • 派生类:

    • 指针
    • 数组
    • 结构体
    • 函数
    • 接口
    • map

变量的声明

自动类型推断

go语言的变量名可以由字母, 数字和下划线组成, 它的变量声明和JavaScript相似, 可以使用

var a = 1
var b = "string"
var c = true

这样的方式声明变量.

这种方式是自动的类型推断, 可以根据右边值的类型自动推断左边变量的数据类型.

但是, 要注意的是, go语言是一个强类型语言, 一个变量的类型在它声明的时候就已经被确定, 无法更改, 所以, 如下的写法是错误的:

var a = 1
a = "str" //这种写法是错误的, 因为变量a已经是int类型了.

既然go是强类型语言, 那么必然会有另一种声明方式, 那就是:

显式类型声明

让我们回顾一下C++的变量声明方法吧

int a = 1;
char b;
auto c = 2.1;

学过C++的同学应该都知道, 前两个声明语句是显式地将变量类型写了出来, 是最经典的声明语句, 而最后一个则是C++11新增的auto语法, 也可以自动类型推断.

看起来C++中的auto语法与go语言中的var好像是相同的作用, 那么go语言的显式类型声明是和C++一样吗?

让我们来看看在go中是如何指定变量类型的:

var a int = 1
var b string
var c bool = true

令人难以置信的是, go语言竟然将变量类型写在了变量的后面, 也就是说, 与C++的auto不同, go语言的var语法只是表名了这句话是声明语句, 而是否是自动类型推断, 是要看变量的后有没有变量类型.

此外, 可以注意到, 第二行中的声明语句没有附初始值, 这样的语句在go中会默认附上零值.

海象运算符

在go中, 还有一种变量声明方式, 即为海象运算符:=

例如

a := 1//这种写法等于 var a = 1

它是一种简写形式, 可以精简代码.

多变量声明

不多说, 直接上代码:

var a1, b1, c1 int
a1, b1, c1 = 1, 2, 3var a2, b2, c2 = 1, 2, 3
​
a3, b3, c3 := 1, 2, 3