这是我参与「第五届青训营 」伴学笔记创作活动的第1天
1.环境准备
1.1Go语言安装
建议访问Golang中文社区进行下载对应本人电脑系统的Go安装包,如果网络较好的可以直接去Go官网进行下载,我目前使用的Go版本是go1.19.4 windows/amd64
1.2下载Go开发工具
我本人下载的是GoLand-2022.1.3
2.Go语言介绍
2.1什么是Go语言
Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。
2.2Go语言特点
- 高性能、高并发
- 语法简单(在C语言的基础上进行简化,去掉了不需要表达式的括号,只有for一种循环)
- 丰富完善的标准库
- 完善的工具链
- 静态链接
- 快速编译
- 跨平台
- 垃圾回收
3.Go语言入门
3.1Go开发环境
在最开始的环境准备阶段已经介绍,这里不在赘述。
3.2基本语法-Hello World
- package main为main包是程序的入口包(所有用Go语言编译的可执行程序都必须有一个main包),一个可执行程序有且仅有一个main包
- fmt包作用是输入输出和格式化字符串
- func main为main函数是程序的入口函数
3.3基本语法-变量
- Go语言变量类型:字符串、整型、浮点型、布尔型
- Go语言变量声明方式:使用var关键字声明、短变量声明(使用:=)
如上图6、7行代码为var关键字声明变量,标准的var关键字声明格式为var 变量名 类型 = 值,但像第6行代码中省略类型也是可以的,省略类型Go会自动推导它的类型;9、10行代码为短变量声明格式;14、15行为常量声明使用const关键字,const无确定类型会自动推导类型。
3.4基本语法if-else
如上图Go中写if-else语句与其他语言的区别在于if后不需要写括号
3.5基本语法-循环
Go中无while和do-while循环,只有一种for循环
如上图7-10行中不写条件的循环为死循环,12-14行中为我们熟知的fori循环,不难看出在Go中的for循环后的条件也是省略括号的。同样在Go的for循环中我们也是可以使用break和continue来跳出循环的,让我们再来回忆下break和continue的区别吧,break是跳出当前整个循环,continue是跳出当次循环然后继续执行下次循环。
3.6基本语法-switch-case语句
3.7基本语法-数组
- 声明数组:var 数组名[元素数量]类型
- 声明数组再赋值:var 数组名 = [元素数量]类型{........}/数组名 := [元素数量]类型{........}
3.8基本语法-切片(slice)
- 切片是一个动态可变长度的数组,切片的底层是基于数组实现的。
- 切片的声明:var 变量名 []变量类型
- 切片的声明再赋值:var 变量名 = []变量类型{.........}
- 切片使用make函数初始化创建空间:var 切片名 = make([]类型,长度,容量)/切片名 := make([]类型,长度,容量)
- 如上图第10-11行代码,切片也可以使用append函数(append函数向slice尾部添加数据,返回新的slice对象)来进行追加长度
- 如上图第15行代码可以使用copy(dstSlice,srcSlice)进行切片的拷贝,作用是将srcSlice(原切片)拷贝给dstSlice(目的切片)
3.9基本语法-map
- map(引用类型)是一种通过key来获取value的数据结构,底层存储为数组,在存储时key不能重复,map的存储是完全无序的
- map声明方式:var 变量名 map[key类型]值类型
- map的声明并赋值:var 变量名 = map[key类型]值类型{key1:value1,key2:value2......}
- map基于make函数的声明并赋值:var 变量名 = make(map[key类型]值类型)/变量名 := make(map[key类型]值类型)
如上图中13行代码,map中可使用delete进行删除键值
3.10基本语法-range
涉及到数组、切片、map的遍历,我们可以考虑使用range,使用range可以快速遍历并可以使代码更加简洁
如上图,对于数组和切片的range遍历i和num分别代表它的索引和值;而对于map的range遍历k和v分别代表它的键和值
4.参考资料
字节内部课:后端入门-Go语言原理与实践
5.总结
通过学习字节内部课后端入门-Go语言原理与实践的第一节的内容,基本上对Go语言的基本语法有了初步了解,本人Go语言0基础,讲师在讲课过程中讲得较快,内容一带而过(该课程是针对有一定基础的同学),但我不能一带而过,除了每天的规定学习内容外,课下更要反复琢磨推敲。一起卷起来,加油!!!
最后我想说,本人第一次发文,并且基础较差,请大家多多关照,欢迎大家来批评指正并一起交流学习。如果有诸君点赞支持的,在此万分感谢!