以后就不宣传啥关注的了,占篇幅。dddd,就来这么高~ 以后就不宣传啥关注的了,占篇幅。dddd,就来这么高~
# Go变量
Go语言里面的变量类型,可不像Python那么简单,毕竟这是它作为静态语言的最后的骄傲。
go语言的变量类型有许多,比Python划分的更细节。下面是我列举的一些对比:
| int | float | string | list | dict | set | 指针 | |
|---|---|---|---|---|---|---|---|
| Python | 有 | 有 | 有 | 有 | 有 | 有 | 无 |
| go | 有,划分更细,有int int8 int16 int32 int64 uint uint32 uint64 rune | 有,有float32 float64 | 有 | 有数组和slice之分,数组不可变,slice约等于python的list | 有map,但是严格规定了map的类型 | 无 | 有 |
# 变量的定义和声明
# 科普一下变量的声明和赋值
我们定义一个变量,在Python里面,往往一步就能解决:
# 简单一句,就可以定义一个值为1的变量a
a = 1
2
上面的代码看起来我们一步就完成了a的定义,但其实变量的定义是分2个阶段的。
声明阶段
在静态语言中,变量都是需要指定它的类型的,这一个步骤又被称为
变量的声明。这一步我们在其他语言经常见到:
int a;
赋值阶段
而变量只声明,那它的值是多少呢?所以我们会有第二个步骤:
赋值,我们需要给变量赋一个初始值。但往往这2步可以合二为一:
int a = 3;
int a是第一个步骤,a = 3是第二个步骤,这就是合起来的写法。
所以Python只不过是简化了这个过程,这也是Python简洁的原因之一。
# 再谈go语言的变量
go语言在变量的定义和Python不同,它有多种方式。我们都知道,静态语言,譬如Java这样的,都是这样的变量声明方式:
变量类型 变量名 = 变量值
但go比较奇葩,喜欢反着来,比较适合水哥。接下来我们来看看go的几种变量声明方式。
var
var声明是类似于
js的方式,比如:
// 注意: go语句结尾不需要分号,很帅气
var a = 3
2
上面是一种声明方式,但因为go严格规定了类型,而上面为什么没有对应的类型呢?因为go为了方便,有些变量一看就知道是什么类型,它会给你进行隐式声明(在一些资料里面经常会用到隐式和显式,啥意思呢,就是偷偷的和光明正大的意思)。
所以呢,上面的声明变量的语句又等于:
// 看到这里你是不是一千万个卧槽,居然还有这么奇葩的语法
var a int = 3
2
因为3一般都是整形,所以如果你不声明类型的话,会默认给你安排成int。所以其实代码里面大部分的变量都是可以省略掉类型的(map/slice这样的除外,再省略就不知道里面是啥了)。
:=
go为了不被人吐槽每次都要带上
var,所以他有一种:=的赋值方式,这个就约等于python的=赋值了,注意是冒号等于。但前提是,这个变量不能是全局变量。也就是说这样赋值的变量只能在方法里面用:
package main
func bangyidage() {
// var方式
var a = 1
// :=方式
b := 3
// 带类型的方式
var c float32 = 12.3
}
2
3
4
5
6
7
8
9
10
其中b := 3的方式比较方便,用的也比较多。但有个要注意的地方就是,go的变量不能声明了不用,也不能重复声明!!!
比如我先声明了var a = 1,接着使用 a:=2,会报:

如果我们定义了变量b,又想修改之。那我们可以给他重新赋值,也就是上文说的变量的第二个步骤:
a := 2
// 这时候我要改a为3
a = 3
2
3
# 通过=直接赋值就好了,因为a之前已经定义过,所以不能对他重复声明,而:=是带有声明操作的。
补充一个知识点,go里面是可以先声明,后赋值的(也就是把变量的声明和赋值分开),如果只声明一个变量,变量的默认值为该类型的初始值。什么意思呢?假设你声明一个int,那它默认就是0,声明为string,默认就是空字符串。
有这么一个场景,如果榜一大哥今天打赏5块以上,那么我的心情就会是Happy,没打赏我就是空字符串,5块以下就是UnHappy。在go里面就是这样子的:
package day03
import "fmt"
// dashang是个int类型的变量
func bangyidage(dashang int) {
var a string
if dashang >= 5 {
// 如果要对已经声明过的变量赋值,直接用=即可,注意不是:=哦
a = "happy"
} else {
a = "unhappy"
}
fmt.Println("我的心情: ", a)
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 同时定义多个变量
go也支持同时定义多个变量,和Python基本一致:
// 除了:=以外,其他都一样
a, b := 1, 2
// var也支持
var c, d = 3, 4
var e, f int = 5, 6
2
3
4
5
6
7
# 今日总结
- go里面有多种数据类型,比Python种类更丰富,更细致
- go定义变量的方式有很多种,有
var和:=2种 - go的变量不能重复声明,只能重新赋值
- go允许变量只声明不赋值,那样变量的值默认是该类型的初始值
- go变量不能声明却不使用,否则会导致编译出错
- :=只能用于方法里面的变量声明
- go变量的声明方式是: var 变量名 类型,与传统的方式不一致(奇葩)
- go也支持同时声明多个变量
# 下节介绍
go里面的常量。Respect!