Go语言基础语法 | 青训营笔记

98 阅读3分钟

一、Go 简介

1.1 Go 特性

  • 高性能、高并发

  • 语法简单、学习曲线平缓

  • 丰富标准库

  • 完善的工具链

  • 静态链接

  • 快速编译

  • 跨平台

  • 垃圾回收

1.2 Go 应用

  • 从字节跳动看:字节已经全面拥抱了 go 语言,公司内部有上万个微服务使用 golang 来编写,不久前也开源了 GO RPC 框架 KiteX 。

  • 从招聘数据看:腾讯、百度、美团、滴滴、深信服、平安、 OPPO 、知乎、去哪儿、360、金山、微博、哔哩哔哩、七牛、 PingCAP 等公司也在大量使用;在国外,Google 、 Facebook 等公司也在大量使用 Go 语言。

  • 从业务维度看:Go语言已经在云计算、微服务、大数据、区块链、物联网等领域蓬勃发展,尤其是在云计算、微服务等领域已经有较高的市场占有率; Docker 、 Kubernetes 、 Istio 、 etcd 等几乎所有云原生组件都是用Go实现的。

1.3 字节选择 Go 的原因

  • 1.最初使用的 Python ,性能不佳

  • 2.C++不太适合在线 Web 业务

  • 3.早期团队非 Java 背景

  • 4.Go 的性能较好

  • 5.Go 部署简单、学习成本低

  • 6.内部 RPC 和 HTTP 框架的推广

二、Go 入门

2.1 Go 安装

访问 go.dev/ 或访问 studygolang.com/dl,选择对应平台下载安装

2.2 Go 开发环境

  • 基于云的开发环境:gitpod.IO在线编程环境,需要GitHub账号

  • 集成开发环境:Vs Code(免费)或者Goland(收费)

2.3 编写HelloWorld程序

每个Go程序都是由包构成,程序从main包开始运行。通过import语句导入fmt包用来进行格式化输出。fmt包中格式化输出字符串的函数有Printf、Sprintf、Fprintf等,读取格式化字符串的函数有Scanf、Sscanf、Fscanf等。

package main

import (

    "fmt"

)

func main() {

fmt.Println("Hello World")

}

2.4 变量

  1. Go是强类型语言,变量类型主要有整型、浮点型、布尔型、字符串等,其中字符串是内置类型,可以直接用+和=操作。

  2. Go运算符的优先级大部分与C/C++类似。

  3. Go变量的声明有两种:

  • var声明,可以写在函数体外,可以自动推导类型

  • :=声明,不能在函数体外面使用,需要指定类型

2.5 常量

用const进行声明,常量没有确定类型,会根据上下文自动确定类型。

2.6 if else 语句

Go中的if else语句与C/C++类似,主要有两个不同点:

  • if后没有括号()

  • if必须接大括号{}

2.7 循环语句

Go中只有for循环,用法和C/C++类似。

2.8 switch 语句

Go中的switch与C/C++类似,主要有三个不同点:

  • switch关键字后不接()

  • 不需要break语句,自动中断

  • case几乎没有限制,可以使用任意变量类型乃至判断语句

2.9 数组

Go中的数组是一个具有编号且长度固定的元素序列,实际并不常用。

2.10 切片

通过make([]type, len, cap)函数创建一个左闭右开的切片,使用append追加元素,不支持负数索引。原理上,切片存储了一个长度和容量以及指向底层数组的指针,容量不够会扩容返回新的切片。

2.11 Map

Go中的map是完全无序的,遍历将按随机顺序输出。GoMap是一个映射,存储键值对,可以用make函数创建。

三、Go的实战

3.1 猜谜游戏

生成随机数(需要选种子),读取用户输入,实现判断逻辑,实现游戏循环。

3.2 在线词典

抓包,将参数序列化后加入请求参数中,生成go代码,将响应信息转换为Go语言Json对象,JSON转Golang Struct,将响应信息反序列化。

3.3 socks5代理

计网原理,代理机制,TCP echo sever,请求阶段,relay阶段。