这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
第一次接触go语言,从go的基础语法开始学习。根据课程我的笔记也将分为四部分:开发环境,基础语法,标准库,实战训练
第一次接触go语言,可以发现它有以下几个特点:
- 语法简单,容易上手
- 具有丰富的标准库,完善的工具链
- 高性能 高并发 是针对服务端开发的语言
开发环境
官网下载的golang安装包
使用vscode 作为开发的IDE,安装go的扩展插件
在安装过程中没有遇到什么问题,关于开发环境就写到这里
基础语法
以golang最基础的hello world 进行说明 go语言的代码结构
分为三部分
package
表明这个文件属于package main 的一部分
包具有如下特性:
- 一个目录下的同级文件归属一个包
- 包名可以与其目录不同名
- 包名为 main 的包为应用程序的入口包,编译源码没有 main 包时将无法编译输出可执行文件。
import
包的引用 这里导入了标准库中的FMT 包 用于格式化输出
go语言提供了很多相关的库,使用更为灵活
func
main 函数作为入口函数
变量
go语言是—门强类型语言,每一个变量都有它自己的变量类型。在go语言里面,大部分运算符的使用和优先级都和C++类似。需要提一点的是go 语言的字符串是内置类型,可以直接通过加号拼接,也能够直接用等于号去比较两个字符串。这与c++指针是不一样的。
在go语言里面变量的声明有两种方式,一种是通过var name [类型] ="" 这种方式来声明变量。 另一种声明变量的方式是:使用 变量名冒号:=等于值。 这种方法go会自动推导变量的类型
常量就是把var改成const。go语言里面的常量,它没有确定的类型,会根据使用的上下文来自动确定类型,会自动进行转换。
if-else
写法与c++ 相似,区别在于格式上 判断条件无需括号 ,其次执行内容必须要使用{}将其包裹起来
循环
只有for 循环 格式上与if-else 类似 无括号 循环体需要{}
switch
在c++里面, switch case如果不显示加 break的话会然后会继续往下跑完所有的case,在go语言里面的话是不需要加break 的。
go语言中的switch功能更强大。可以使用任意的变量类型,你可以在switch后面不加任何的变量,然后在case里面写条件分支。这样代码相比你用多个if else代码逻辑会更为清晰。
数组
var a [5]int
b := [5]int{1, 2, 3, 4, 5}
这两种都可以进行声明定义
切片
这里的切片更类似python的list,是一个变长的数组,利用append 进行元素的添加。同样支持[start: end]这种切片操作。
s := make([]string, 3)
map
m := make(map[string]int)
go 中的map 是完全无序的,遍历的时候不会按照字母顺序也不会按照插入顺序输出
range
参考python中遍历的range 和 in
函数
go 函数支持返回多个值,它的变量类型是后置的
指针
go也是支持指针的,与c++指针类似,但是功能有限不支持c++智能指针
实践
猜谜游戏
随机生成一个数字,获取输入判断与目标数字大小关系,将结果输出,反复循环直到猜到正确数字。
这里有个问题随机数字rand.Intn() 每次运行指定数字相同。这是由于rand.seed 的问题,如果指定了seed随机数的数值相同。这里需要指定一下rand.seed()
在线字典
这里源码就不放了 介绍一下几个实用的工具
将网络的请求转换为go的请求代码
将json数据包转换为go的结构体定义
这两个工具极大的帮助我们解析网页内容发包收包等问题。
整个就到此结束了,下次课程继续。