Go语言学习笔记(三)
一、理解变量
1.1 变量是什么
- 变量的定义(自己想)
- Go语言是一种静态类型语言,声明变量必须显式或者隐式地指定其类型。
1.1.1 为变量赋值的方法
声明变量的方法和别的语言类似,可以在声明的时候初始化,也可以先声明在赋值,但是要注意的是,Go语言不支持不同类型变量之间的赋值,否则会导致编译错误
//声明时初始化
var s string = "从前喜欢一个人"
//声明变量后赋值
var s string
//这条语句执行后,s是一个空字符串,理由见(二)
s = "现在喜欢一个人"
1.2 快捷变量声明
Go语言支持多种快捷变量声明方式。可以在一行内声明多个类型相同的变量并给他们赋值(C++??),但是一个变量声明之后不能再次声明,否则会编译错误,但是可以为已经定义的变量赋值,示例如下:
//1.声明相同类型的多个变量
var s,t string = "foo","bar"
//2.声明不同类型的多个变量
var (
s string = "foo"
i int = 4
)
这里要注意声明变量的时候和C++相似但不一样,声明变量的格式:
var <变量名列表(用逗号隔开)> <变量类型(只能写一个)> <值列表(用逗号隔开)> //这里的值和变量名是一一对应的
1.3 理解变量和零值
在Go语言中,声明变量时如果没有赋初值,则变量将为默认值——零值。
其他语言未赋初值的变量的值为nil(Null,None)
或者undefined
通过如下程序,我们可以知道不同类型变量的零值:
package main
import (
"fmt"
)
func main(){
var(
i int
f float64
b bool
s string
)
fmt.Printf("%v %v %v %q\n", i, f, b, s)
}
输出结果为:0 0 false “”
因为Go语言的这个机制,所以我们检查某个变量是否被初始化,不能检查他是否为nil
,而应该检查他是否为对应的零值,
Go 语言禁止将变量初始化为nil值,因为这将导致编译错误
1.4 编写简短变量声明
Q:什么是简短变量声明?
A:字面意思,声明更短更简洁,不需要关键词var
,和变量的类型名,类似于python
的变量声明,例子如下:
s := "hello world"
注意:在使用简短变量声明时,:=
的左值中至少得有一个是新的变量(从未出现的),否则会报错:
no new variables on left side of :=
之所以或报错,是因为简短变量声明的原理是,操作系统根据右值确定左值的类型,但是左值如果是一个已经声明的变量(类型已经确定)像什么样子??
1.5 变量的声明方式
var s string = "Hello World"
var s = "Hello World"
var t string
t = "Hello World"
u := "Hello World"
Go语言对声明方式的限制条件很低:不能在函数外面使用简短变量声明。
对了,在Go语言中,变量声明之后必须使用,否则同样会报错
1.6 理解变量作用域
- 作用域指的是变量在什么地方可以使用,而不是变量在什么地方声明的。
- Go语言使用基于块的词法作用域,和C++差不多。
- 全局变量的作用域是最大的,他的生存期是从定义到程序结束
1.7 使用指针
这是一部分悲伤的内容
- 在Go语言中声明变量的饿时候,将在计算机内存中给它分配一个位置,以便能够储存、修改和获取变量的值
- 要获取变量在计算机内存中的地址,可以在变量名前加上
&
字符- 我们可以用fmt.Println(&s)来获取变量s在计算机内存中的位置
指针指向的是一块内存空间,它的值是内存空间的地址,要对内存空间的数据进行操作需要加上*号
1.8 声明常量
- 常量指的是在整个程序声明周期内都不变的值。常量初始化之后,可以引用他,但不能修改它。
- 常量的命名方式和变量类似就是把
var
换成了const
- 使用简短变量声明语句声明的变量,它的值可以被修改(但是不可以再使用:=来赋值)
参考书籍
[1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译
题外话:
- 今天很高产,o( ̄︶ ̄)o,速刷一遍之后开始刷黑砖了