这是我参与[第五届青训营]伴学笔记创作活动的第1天。
前言
本文主要总结了后端Go语言基础知识,主要有Go的特点以及被广泛采用的原因,以及Go的变量与语法介绍,重点需要掌握基础变量与语法的使用与格式编写,以便正确书写代码。
1.1什么是Go
Go(又称Golang)是Google的Robert Griesemer,Rob Pike以及Ken Thompson开发的一种静态强类型、编译型语言。
- 高性能、高并发:对高变化的支持,不需要第三方库,只需要标准库或任意基于标准库的第三方库。
- 语法简单、学习曲线平缓:在C的基础上进行大幅度简化。
- 丰富的标准库:高稳定性与兼容性保障,持续享受语言带来的优化。
- 完善的工具链:编译、代码格式化、错误检查、代码补充提示等。
- 静态链接:所有编译默认为静态链接。
- 快速编译
- 跨平台:linux、windows、macos等操作系统,开发安卓、ios软件,在奇怪设备上运行,如路由器树莓派等。
- 垃圾回收
1.2哪些公司使用Go
ByteDance字节跳动、Google、Tencent腾讯、facebook、美团、七牛云、滴滴、bilibili等。
1.3为什么全面拥抱Go
- 由性于能问题,把Python换成Go
- C++不太适合在线Web业务
- 早期团队非Java背景
- Go性能好
- 部署简单、成本低
- 内部PRC和HTTP框架推广
2.1开发环境
-安装Golang-配置集成开发环境-基于云的开发环境
2.2基础语法
-Hello World
- 导入main包来导入程序入口文件
- 导入程序fmt包来格式化I/O的输入和输出
- 写函数func mian(){...}
-变量
2.3基础语法if-else
- 计算表达式左右无括号,后接大括号!!
2.4基础语法-循环
- 没有while、do-while循环,只有for。for内什么都不写是死循环,也可以使用最基础的C循环。
2.5基础语法-swicth
- swith后的变量也不需要括号。golang中没有break也不会继续运行其他分支,可以使用任意的变量类型,例如字符串、结构体,甚至可以取代if-else语句。
2.6基础语法-数组
- 数组长度是固定的,因此不常用,常用的是切片。
2.7切片
- 切片是可变长度的数组,slice就是arr切片的引用,改变slice也会改变数组。用make来创建切片,用append来赋值(也可以在创建时直接赋予长度),cap可以获取slice最大值(从数组导出),copy函数复制从源slice的src复制元素到目标dst。s[2,5]第2个到第5个(不包括第5个)的元素,不同python,不支持复数索引,用len取出长度再做简单运算。
2.8基础语法-map
- 使用最频繁的数组结构。用[]写与读,delete删除,读取是使用ok来查看是否存在某元素。
2.9基础语法-range
- 可快速遍历,对于数组,返回两个值:索引(不需要时可用下划线)和对应位置的值。
2.10基础语法-函数
- goland里面变量类型后置。
2.11基础语法-指针
- 相比其他语言,golang指针支持的操作非常有限,主要用途为对传入的参数进行修改。
2.12基础语法-结构体
- 结构体是带类型的字段的集合,可以用结构体名称初始化结构体变量,初始化时需要传入每个字段初始值,未定义则赋空值。
2.13基础语法-结构体方法
- 类似于其他语言的类成员函数。
2.14基础语言-错误处理
- 使用单个的返回值来处理错误信息,不同于异常处理,在代码中加入“error”提示可能会出现错误。接收需要两个变量,调用完后判断是否存在error,没用error时才能取返回值,否则会报控值错误。
2.15基础语法-字符串操作
- Go语言字符串都是采用UTF-8字符集编码,字符串由一对双引号""或者反括号括起来定义的,单引号不能表示字符串,该点不同于PYthon。Go语言字符串不可以改变,这与Python相同。
2.16基础语法-字符串格式化
- 最常用的是fmt.Println打印并换行,fmt.Printf类似C的Printf,可以用%v打印各种类型。
2.17JSON处理
- JSON.Marshal序列化,序列化后的字段大写字母开头,或者AGE json="age"表示小写。
2.18基础语法-时间处理
- 格式化用的是特定时间,而不是YY:DD:HH。
2.19基础语法-数字解析
- 内置的strconv包提供了数字解析功能,strconv.ParseInt(传入数值,进制,返回精度)。
2.20基础语法-进程信息
总结
Go语言与其他编程语言各有千秋,包括java、c#等多数的系统级语言的根本编译哲学来源C++,而Go源于C语言。Go的编译效率高,拥有接近C的运行效率以及接近PHP的开发效率,它支持当前所有的编程范式,包括过程式、面向对象、面向接口与函数式,因此程序员们可以各取所需进行自由组合。GO拥有强大的标准库,部署方便,并发简单,稳定性也较好。
- 对于C/C++,Go语言拥有垃圾回收功能,使得代码量减少,开发效率提高。
- 对于Java,Go类型系统简单、有函数式编程范式以及并发编程模式,代码块简洁,可运行于多核计算环境。
- 对于Python/Ruby,Go语法简单、类型系统非侵入和扁平化、多范式编程模型,运行速度较于其他静态类型的编译语言要快很多。