Go语言学习笔记(三)

84 阅读4分钟

Go语言学习笔记(三)

Go语言学习笔记(入门) 专栏收录该内容 25 篇文章3 订阅 订阅专栏 Go语言学习笔记(三) 一、理解变量 1.1 变量是什么 1.1.1 为变量赋值的方法 1.2 快捷变量声明 1.3 理解变量和零值 1.4 编写简短变量声明 1.5 变量的声明方式 1.6 理解变量作用域 1.7 使用指针 1.8 声明常量 题外话: 一、理解变量 1.1 变量是什么 变量的定义(自己想) Go语言是一种静态类型语言,声明变量必须显式或者隐式地指定其类型。 1.1.1 为变量赋值的方法 声明变量的方法和别的语言类似,可以在声明的时候初始化,也可以先声明在赋值,但是要注意的是,Go语言不支持不同类型变量之间的赋值,否则会导致编译错误

//声明时初始化
var s string = "从前喜欢一个人"

//声明变量后赋值
var s string
//这条语句执行后,s是一个空字符串,理由见(二)
s = "现在喜欢一个人"

1 2 3 4 5 6 7 1.2 快捷变量声明 Go语言支持多种快捷变量声明方式。可以在一行内声明多个类型相同的变量并给他们赋值(C++??),但是一个变量声明之后不能再次声明,否则会编译错误,但是可以为已经定义的变量赋值,示例如下:

//1.声明相同类型的多个变量
var s,t string = "foo","bar"
//2.声明不同类型的多个变量
var (
	s string = "foo"
	i int = 4
)

1 2 3 4 5 6 7 这里要注意声明变量的时候和C++相似但不一样,声明变量的格式:

var <变量名列表(用逗号隔开)> <变量类型(只能写一个)> <值列表(用逗号隔开)> //这里的值和变量名是一一对应的

1 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) } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 输出结果为:0 0 false “”

因为Go语言的这个机制,所以我们检查某个变量是否被初始化,不能检查他是否为nil,而应该检查他是否为对应的零值, Go 语言禁止将变量初始化为nil值,因为这将导致编译错误

1.4 编写简短变量声明 Q:什么是简短变量声明? A:字面意思,声明更短更简洁,不需要关键词var,和变量的类型名,类似于python的变量声明,例子如下:

s := "hello world"

1 注意:在使用简短变量声明时,:=的左值中至少得有一个是新的变量(从未出现的),否则会报错:

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" 1 2 3 4 5 Go语言对声明方式的限制条件很低:不能在函数外面使用简短变量声明。

对了,在Go语言中,变量声明之后必须使用,否则同样会报错

1.6 理解变量作用域 作用域指的是变量在什么地方可以使用,而不是变量在什么地方声明的。 Go语言使用基于块的词法作用域,和C++差不多。

全局变量的作用域是最大的,他的生存期是从定义到程序结束 1.7 使用指针 这是一部分悲伤的内容

在Go语言中声明变量的饿时候,将在计算机内存中给它分配一个位置,以便能够储存、修改和获取变量的值 要获取变量在计算机内存中的地址,可以在变量名前加上&字符 我们可以用fmt.Println(&s)来获取变量s在计算机内存中的位置 指针指向的是一块内存空间,它的值是内存空间的地址,要对内存空间的数据进行操作需要加上*号

1.8 声明常量 常量指的是在整个程序声明周期内都不变的值。常量初始化之后,可以引用他,但不能修改它。 常量的命名方式和变量类似就是把var换成了const 使用简短变量声明语句声明的变量,它的值可以被修改(但是不可以再使用:=来赋值) 参考书籍 [1]: 【Go语言入门经典】[英] 乔治·奥尔波 著 张海燕 译 CSDN