🚀Go的基础语法
📓推荐网站(不断完善中):个人博客
📌个人主页:个人主页
🏝立志赚钱,干活想躺,瞎分享的摸鱼工程师一枚
🏖前言
完成了我们众多的准备工作,已经对于Go的一些基础背景了解之后,我们接下来就要进入关于Go的语法学习,正式开始进行Go之旅,一Go到底吧!
1.基础理论
1.1.关于程序的运行
在之前写案例的过程中我们运行了我们第一个Go语言程序,并且知道了Go的运行可以有
go build
和go run
的两种指令去操作,这里我们用两张简单的图回顾一下他们的区别
-
go build
是先将.go
文件进行编译后运行- 有可执行文件的好处就是:如果我们想要在没有Go环境的机器上运行程序,只需要将可执行文件复制过去即可直接运行。
-
go run
则是直接运行不会生成可执行文件
1.2.一些基本的注意事项
-
Go的源文件是
.go
结尾 -
在我们hello程序中的
main()
函数是程序的入口,运行程序,需要有它。 -
在开发过程中请
区分大小写
-
Go的编译是一行行进行的,所以我们要一行一行的写语句,不能将两个语句写在一行内,会报错(这也表现出了Go的简洁性)
-
在Go的代码中如果出现的东西
没有被使用
,那么程序一样是会报错的(Go的代码规范,提高了大家的可阅读性)- 使用
Goland
IDE工具会在一段时间后自动删除没有使用到的内容
- 使用
-
Go语言中一些常见的转义字符
-
\t
:制表符,可理解成一个tab位 -
\n
:换行 -
\r
:回车 -
\\
:输出一个\ -
以代码的形式理解可以复制这段代码看看效果
-
package main import "fmt" func main() { fmt.Println("姓名\t性别\t籍贯\t住址\ntom\t男\t天津\t北京") }
-
需要注意的是
{
不能单独放在一行,否则代码在运行时会产生错误:
-
-
2.关于注释
什么是注释?
注释就是帮助开发者来了解和解释当下这段代码所代表的意思是什么,提高代码的可阅读性,加强开发者们在工作中的合作
Go中的几种常见注释
// 单行注释
/*
我是多行注释
*/
注意:在程序编译的过程中,注释是不会被纳入编译的
3.关于标识符
简单解释一下,所谓的
标识符
就好比我们每个人都有一个名字,或者说是代号。在程序中也是这样,我们在进行一些操作的时候需要用一个代号来表示当前的变量、类型、函数
等等,以方便我们在程序中重复的使用他们。
标识符的规则
我们要知道,既然标识代表的是名字,名字是不可以随便乱起的,也是需要遵守规则的。就好比我们中国人的名字与外国人的名字一样,不同的地方都要遵守一定的取名规则,这样的名字取出来才不会让程序无法识别。
- 标识符可以是多个字母(AZ和az)数字(0~9)
- 可以是下划线
- 第一个字符必须是字母或下划线而不能是数字
有效的标识符
// 有效的标识符
mahesh kumar abc move_name a_123
// 无效的标识符
1ab(以数字开头)
case(Go 语言的关键字)
a+b(运算符是不允许的)
4.关键字
关键字
,顾名思义,在程序中是比较关键的。为什么这样说?因为关键字实际上就是这门语言在开发之初就已经定义好的,具备一定功能的单词。实际上在我们编写代码的时候也可以明显的观测出,比如在我们的Hello代码中就可以看到,关键字的颜色与我们普通的代码是不一样的(依此也可以作为区分的小技巧)。那么我们在用标识符取名字的时候就要避开这些关键字的名称,不可冲突!
常见的关键字
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
预定义标识符
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
---|---|---|---|---|---|---|---|---|
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
注意⚠️:无论是关键字或者是预定义标识符,都已经是Go语言中事先标记好的,在用标识符取名字的过程中要避开,不可重名!
5.数据类型
在Go中的数据类型分两大部分,其一是
基本数据类型
,其二则是复杂数据类型/派生类型
在学习的前期我们可以先了解一些
基本数据类型
即可,在后续学习过程中再慢慢陆续接触其他数据类型。
数据类型参考表
序号 | 类型和描述 |
---|---|
1 | 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 |
2 | 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。 |
3 | 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 |
4 | 派生类型: 包括:(a) 指针类型(Pointer)(b) 数组类型© 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型 |
6.关于变量
变量算是每一种编程语言中的基本组成单位了,在任何学习的过程中都离不开它。
可以把它理解成是一个存放东西的箱子,我们可以把不同的东西放入箱子中,在需要的时候找到那个箱子就等于拿到了里面的东西。
6.1.创建变量的语法
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。(其实就是标识符规则)
声明变量的一般形式是使用
var
关键字,变量可以一个一个声明也可以同时声明多个。
语法
var 变量名 数据类型 = 值
例子
可以将以下例子手动打出并输出看看!
package main
import "fmt"
func main() {
// 此为单个变量的声明
var a string = "GoDemo"
fmt.Println(a)
// 此为多个变量的声明
var b, c int = 1, 2
fmt.Println(b, c)
}
6.2.关于变量的默认值
在上面的案例中,我们可以看到我们在创建变量的时候会赋予其值,但是实际上,我们也可以不赋予值,那么我们的Go语言就会给这个变量赋于默认值。
语法
var 变量名 数据类型
案例
package main
import "fmt"
func main() {
// 声明一个变量并初始化
// 如果字符串没有定义的话,则默认为""
var a = "RUNOOB"
fmt.Println(a)
// 没有初始化就为零值
var b int
fmt.Println(b)
// bool 零值为 false
var c bool
fmt.Println(c)
}
其他默认值
除了上述的默认值,在Go语言中还有一个比较常见的默认值就是
nil
,如下
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
6.3.变量的进阶
变量自动识别类型
其实在上面的例子中我们可以看到,博主声明了一段字符串但是并没有声明数据类型
这是因为在Go中其实是可以在你赋于初始值的时候进行自动类型判断
不带类型的语法
var 变量名 = 值
案例
package main
import "fmt"
func main() {
var str = "Let's go"
fmt.Printf("str数据类型为:%T", str)
}
6.4.短变量声明
由上述案例我们可以知道在变量的初始化时省略变量的类型而由系统自动推断,因此
var
这个关键字就略显多余因而Go对于变量还有进一步的优化,可以说大大提升了代码的简洁性,就是短变量声明,其关键符号为
:=
需要注意的是,短变量声明不可以在函数外使用,多用于函数内。
比较麻烦的写法
package main
import "fmt"
func main() {
var i, j = 10, 20
fmt.Println("输出的内容为:", i, j)
}
上述代码中我们已经简化了原本
var 变量名 数据类型 = 值
的这种用法,但经过短变量声明后可以更简洁为
package main
import "fmt"
func main() {
i, j := 10, 20
fmt.Println("输出的内容为:", i, j)
}
两种写法得到的结果是相同的
🏆写在结尾
今天本文的主要内容还是针对于Go语言中的一些基础语法的应用进行解析。涉及的内容有注释、标识符、关键字、数据类型、变量
其实谱写前面内容的目的也是为了后面我们学会使用变量做铺垫,变量是程序中非常必要的一个组成部分。
以上为个人学习分享,如有错误请指正