参考资料

Hello World

功能:向控制台打印 Hello World

点击下载:源码

输出

for 循环

功能:输出九九乘法口诀表

点击下载:源码

输出

功能:实现 while 逻辑(Golang 中无 while 循环,可借助 for 实现)

点击下载:源码

输出

switch 多分支

Golang 的 switch 非常灵活:

  • 如果 switch 有表达式,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项
  • 如果 switch 没有表达式,从上到下直到匹配 case 的表达式为真
  • switch 默认每个 case 最后带有 break,即,匹配成功后不会自动向下执行其他 case,而是跳出整个switch,可使用 fallthrough 强制执行后面的 case 代码,fallthrough 不会判断下一个 case 的表达式是否为真

功能:switch 多分支的使用

点击下载:源码

输出

字符串

功能:字符串的基础使用

点击下载:源码

输出

时间

功能:时间相关的基础使用

点击下载:源码

输出

array 数组

功能:array 数组基础使用

点击下载:源码

输出

map

功能: map 基础使用

点击下载:源码

输出

点击下载:源码

输出

slice 切片

功能:slice 基础使用

点击下载:源码

输出

传递指针和对象的区别

功能:传递指针改变原对象,传对象类似于传值,不改变原对象。

点击下载:源码

输出

指针综合使用

输出

struct 结构体

功能:struct 的定义、实例化、使用

点击下载:源码

输出

自定义结构体 slice 排序

功能:自定义结构体 slice 对象,对其进行升序、降序排序

点击下载:源码

输出

map 排序

功能:借助 slice,实现 map 的按序输出

点击下载:源码

输出

通用单链表

功能:通用单链表,包含统计链表长度,头部插入、尾部插入

点击下载:源码

输出

继承

功能:单继承、多继承

点击下载:源码

输出

匿名函数

功能:介绍匿名函数的使用

点击下载:源码

输出

函数闭包

功能:介绍函数闭包的使用

点击下载:源码

输出

defer/panic/recover 综合使用

  1. defer:延迟调用。多个defer,依次入栈,在函数即将退出时,依次出栈调用

输出

  1. panic 和 defer 结合使用:panic 触发错误,defer 依次出栈调用,没有 recover 捕获的情况下,最后才打印错误

输出

  1. defer/panic/recover 结合使用,panic 触发错误,defer 依次出栈调用,直到被 recover 捕获,打印捕获的信息,之后继续 defer 出栈

输出

  1. recover 必须在 defer中 调用,才有效,否则返回 nil

输出

  1. panic 其后的代码不会执行

输出

输出

json 使用

常见数据结构序列为 json

功能:使用 json

点击下载:源码

输出

struct field's tag in json

功能:在 json 中使用结构体字段标签,实现结构体与 json 的映射,一般在服务调用之间通过 json 打包数据场合,例如,解析 json 请求到结构体中,将结构体序列化到回复 json 中

点击下载:源码

输出

protobuf 使用

数据结构无嵌套

功能:使用 protobuf

点击下载:源码

  1. 定义 proto 文件
  1. 利用 protoc 编译 proto 文件,生成对应的 Golang 文件,命令如下(根据实际情况替换目录)
  1. 使用 protobuf 示例

输出

:工程目录结构

数据结构有嵌套

功能:使用 protobuf

点击下载:源码

  1. 定义 proto 文件
  1. 利用 protoc 编译 proto 文件,生成对应的 Golang 文件,命令如下(根据实际情况替换目录)
  1. 使用 protobuf 示例

输出

:工程目录结构

Redis 客户端

Redis 集群

功能:连接 redis 集群,进行存取操作

点击下载:源码

输出

Redis Server

功能:连接 redis server,进行存取操作

点击下载:源码

输出

HTTP 服务器

功能:

基础 HTTP 服务器

点击下载:源码

输出

wrk 压力测试

服务器压测表现良好,平均每秒能够处理 5 W 个请求。

gin 基础 HTTP 服务器

点击下载:源码

输出

gin 处理多路由请求

功能:

点击下载:源码

输出

gin 支持跨域

HTTP 客户端

基础 HTTP 客户端

功能:HTTP 客户端,请求 http://localhost:12306/api/version

点击下载:源码

输出

当启动 HTTP 服务器端并能够处理该请求时,客户端返回结果如下所示

断点续传多线程下载

输出

程序优雅退出(信号处理)

功能:

点击下载:源码

输出

启动程序,按 Ctrl + C,输出如下

阿里云 OSS 上传文件

读文件

小文件

大文件

当文件是纯文本文件,有换行符的时候

当文件是二进制文件,没有换行符的时候

获取指定目录下文件列表

获取指定目录下文件列表(包含子目录)

获取文件完整路径、当前路径、文件名

输出

JWT

功能:JWT 生成、校验、刷新 token

grpc

  1. 创建 grpc_helloworld 目录,初始化 golang 工程
  1. 创建协议文件 proto/helloworld.proto
  1. 编译 proto 文件

工程目录如下

  1. 创建 server
  1. 创建 client
  1. 运行

grpc-web

在 grpc 基础上,服务端由 golang 实现,客户端由 node 实现

由于浏览器不支持 grpc 特性,需要在后端服务前面架设 envoy 代理降级兼容使用,且目前无法使用 nginx 替代 envoy

整体架构


browser -> nginx(58888 端口) -> envoy(8080 端口) -> server(8888 端口)


配置

  1. 使用 envoy 代理后端服务

配置文件 envoy.yaml

运行 envoy 代理

  1. 编译 proto 文件
  1. 创建客户端相关文件

创建 client.js

创建 index.html

创建 package.json

  1. 编译客户端文件
  1. 使用 web 服务器挂载前端文件
  1. 通过浏览器访问,并打开开发者模式