以后就不宣传啥关注的了,占篇幅。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!