本篇文章内容:
*Go语言的背景
*Go语言基础语法
*入门实战的小项目。
一、Go语言的背景和开发环境
1.Go语言的优点:
①高性能、高并发
②语法简单、学习曲线平缓
③丰富的标准库
④完善的工具链
⑤静态链接
⑥快速编译
⑦跨平台
⑧垃圾回收
从业务维度看过语言已经在云计算、微服务、大数据、区块链、物联网等领域蓬勃发展。Docker、Kubernetes、lstio、prometheus 几乎所有的云原生组件全是用 Go 实现的。
2.Go语言的开发环境
开发环境安装 Golang 可以直接浏览器输入 go.dev 打开 Golang 的官网,然后点击 download 然后按照提示就可以安装Golang。 如果打不开,可以使用 Golang 中国的镜像 studygolang.com/dl 如果你访问 github 的速度非常慢的话,你可以配置 go mod proxy,打开 goproxy.cn/ 按照提示操作即可,配置完成你下载第一方包的速度会大大加快 配置开发 Golang 的编辑器或者IDE。 VSCode或者Golang 的,这是如今功能最多、使用最广泛的编器或者IDE.
安装 VSCode ,完成之后,需要在左边扩展里面搜索 Go 插件然后安装。
二、Go语言的基础语法
1.变量类型
go 语言是一门强类型语言,常见的变量类型包括 字符串、整数、浮点型、布尔型等。 go 语言的字符串是内置类型,可以直接通过加号拼接,也可以用等于号比较两个字符串。 变量的声明有两种方式:一种是通过var name string = “ ” ,这种方式声明变量,一般会自动去推导变量类型。另一种是:使用变量 冒号 := 等于值。 常量的话就是把 var 改成const,值在一提的是语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型。
2.分支语句
if else:if else 和 C 的写法类似,不同点1是if 后面没有括号,即便写了,在保存时编译器也会自动去掉。不同点2是 if 后面必须接大括号,不能直接把 if 里面的语句写一行。 循环:go中没有 while 循环、do while 循环,只有唯一的 for 循环。for循环的中间的三段,任意一段都可以不写。也可以全都不写,就是以一个死循环,途中可以用 break 跳出。 switch:go 中的 switch 分支结构与 C 或者 C++ 类似。go和C++不同,在 go 中不需要加 break 的。go 中的 switch 可以使用任意的变量类型,甚至可以取代 if else 语句
3.数组&切片
数组就是一个具有编号且长度固定的元素序列。可以取特定索引的值,也可以直接打印一个数组。在真实业务代码中,使用更多的是切片。 切片可以任意更改长度和追加元素。用 make 来创建切片。slice 的原理是有一个存储了一个长度和一个容量,加一个指向一个数组的指针,在执行 append 操作的时候,如果容量不够,会扩容并且返回新的 cilce。
4.哈希/字典(map)
map 是实际使用过程中最频繁用到的数据结构。golang 的map 是完全无序的,遍历的时候是随机顺序。
5.range
对于 slice 或者 map,可以使用 range 进行快速遍历。
6.函数
函数相加.png go 中变量类型是后置的,同时 Golang 里面的函数原生支持返回多个值。 在实际业务逻辑代码里面几乎所有的函数都返回两个值,第一个真正的返回结果,第二个值是一个错误信息
7.指针
go里面也支持指针,但支持操作优先,其中一个主要用途就是对于传入参数进行修改。
8.结构体和结构体方法
结构体.png 结构体是带类型的字段的集合。初始化一个结构体变量,构造的时候需要传入每个字段的初始值,也可以键值对的方式指定初始值。 结构体方法.png
结构体方法是为结构体去定义一些方法。在实现结构体的方法的时候有两种写法。一种是带指针的,另一种是不带指针的。带指针可以对这个结构体进行修改,不带指针的话,实际上就是一个拷贝,无法对结构体进行修改。
9.其他
在 go 语言里面符合语言习惯的做法就是使用一个单独的返回值来传递错误信息。 go语言的处理方式,能够很清晰地知道哪个函数返回了错误,并且能用简单的 if else 来处理错误。 字符串操作:
contains 判断一个字符串里面是否有包含另一个字符串; count 字符串计数; index 查找某个字符串的位置; join 连接多个字符串; repeat 重复读个字符串; replace 替换字符串。 字符串格式化:
可以用 %v 打印任意类型的变量; %+v 打印详细结果; %#v 则更详细。 时间处理:
在 go 语言中最常用的就是 time.now() 来获取当前时间; time.date 构造一个带时区的时间; time.sub 对两个时间进行减法; time.UNIX 获取当前时间戳; time.format 限制时间格式; time.parse 默认时区
三、Go语言的小项目练习
1.猜谜游戏
GitHub地址:github.com/wangkechun/…
2.在线词典
GitHub地址:github.com/wangkechun/…
3.SOCKS5 代理
GitHub地址:github.com/wangkechun/…