通过示例学 Golang 2020 中文版【翻译完成】
原文:GolangByExample
协议:CC BY-NC-SA 4.0
阶段:机翻(1)
人最大的痛苦就是说一些自己都不相信的话。——燕京学堂鹿会
- 在线阅读
- 在线阅读(Gitee)
- ApacheCN 学习资源
目录
- 通过示例学 Golang 2020 中文版
- 关于 Golang
- 关于 Golang
- GO 的安装
- 设置工作区和你好世界程序
- 变量
- 变量
- 理解
var
关键字 - 变量的作用域
- 变量和常量的命名约定
- 理解
:=
符号或短变量声明 - 你好世界
- 常量
- 常量
- 常量在声明后可以重新赋值吗
- 内/外作用域中的常量
- 全局和局部常量
- 类型化和非类型化常量
- 声明常量
- 字符串常量
- 数字/整数/浮点常量
- 布尔常量
- 字符常量
- 多个常量声明
- 常量映射
- 常量结构
- 常量数组或切片
- 条件和循环
- 理解
if-else
语句 for
循环switch
语句Switch
语句的fallthrough
关键字- 了解
for-range
循环——完整指南 goto
语句
- 理解
- 包/模块
- 包和模块——第 1 部分
- 包和模块——第 2 部分
- 模块
go.mod
文件中的直接依赖与间接依赖- 从
go.mod
文件手动下载依赖项 - 库版本或依赖项的选择
- 从不同本地模块导入包
- 导入同一模块中的包
go mod tidy
做了什么- 为您的项目或模块添加依赖项
- 可执行和不可执行模块
- 用于
go.mod
文件中的依赖项的//indirect
- 了解模块名称或模块导入路径
- 模块的供应商依赖关系
- 了解
go.sum
和go.mod
文件 - 包与模块
- 移除模块的依赖关系
- 初始化函数
- Golang 程序的执行顺序
- 嵌套包
- 包名和目录/文件夹名——它们需要相同吗
- 导入的空白标识符
- 导入包时导入相同的包名或别名
- 数组/切片
- 了解数组——完整指南
- 切片
- 二维和多维数组和切片
- 复制数组或切片
- 迭代数组和切片的不同方法
- 检查一个项目是否存在于切片中
- 在切片中查找和删除
- 在数组中查找和删除
- 打印数组或切片元素
- 声明/初始化/创建数组或切片
- 将数组/切片转换为 JSON
- 追加或添加到切片或数组
- 结构切片
- 映射切片
- 通道的切片或数组
- 布尔值的切片或数组
- 创建整数切片或数组
- 创建浮点切片或数组
- 创建字符串切片或数组
- 排序切片的一部分
- 将一个切片追加或添加到另一个切片
- 映射
- 迭代映射的不同方法
- 映射的长度
- 映射
- 一种检查映射中是否存在键的有效方法
- 更新映射中的一个键
- 映射允许的键和值类型
- 创建/初始化/声明映射
- 映射和 JSON 的转换
- 将映射转换为 JSON
- 将 JSON 转换为映射
- 如何检查映射是否包含键
- 结构
- 结构
- 声明或创建/初始化结构变量
- 指向结构的指针
- 漂亮地打印结构变量
- 结构的导出和未导出字段
- 结构中的匿名字段
- 检查两个结构是否相等或结构相等性
- 访问和设置结构字段
- 嵌套结构
- 结构字段元数据或标记
- 结构与 JSON 的转换
- 如何初始化带有另一个嵌套结构的结构
- 如何初始化具有数组或切片字段的结构
- 如何从另一个包访问结构
- 方法
- 方法
- 方法的指针接收器
- 非结构类型的方法
- 方法链
- 接口
- 接口
- 将接口作为参数传递给函数
- 接口到结构
- 嵌入接口
- 接口比较
- 接口的好处
- 实现接口时方法中的指针与值接收器
- 声明和实现接口
- 接口的隐式实现
- 实现多个接口的类型
- 打印接口的基础类型和值
- 接口的内部工作原理
- 实现接口的非结构自定义类型
- 接口的零值
- 访问接口的底层变量
- 内置包
- 复制函数
- 追加函数
- 上下文
- 使用上下文包——完整指南
- GO 安装/设置
- 在 MAC 上安装 Golang
- 在 Linux 上安装 Golang
- 在 Windows 上安装 Golang
- 通道
- 通道
- 通道内部工作原则
- 作为函数参数的通道
nil
通道的发送和接收- 通道的关闭操作
- 通道的方向
- 通道的长度和容量
- 通道上的所有操作/函数
- 从一个通道读取/接收所有值
- 通道的
for-range
循环
- Goroutines
- Goroutines
- 获取当前正在运行/活动的 goroutines 的数量
- 等待所有 Goroutines 完成执行
- 从 goroutine 接收或获取返回值
- 从 goroutine 接收或获取多个返回值
- 暂停 goroutine 的执行,直到活动或事件完成
- 选择
select
语句for
循环中的select
语句- 带有默认情况的选择
- 使用发送操作的选择
- 使用
nil
通道的select
语句 select
与switch
select
语句中的fallthrough
关键字select
的break
语句- 在
select
语句中执行多个case
- 空
select
或无case
的选择 - 带有超时的
select
语句
- 数据类型
- 所有数据类型及示例
- 所有基本数据类型
- 了解整数的大小和范围
- 所有类型的默认零值及示例
- 字符
- 理解
uintptr
- 理解符文
- 指针
- 指针
- 指向指针的指针
- 解引用指针
- 指针算法
- 指针的默认零值
iota
iota
- 字符串
- 检查字符串是否是数字
- 移除或去除字符串中的所有空格
- 编写多行字符串
- 字符串比较
- 检查字符串是否包含另一个字符串
- 分割字符串
- 从一个句子中获取所有单词
- 通过分隔符连接字符串
- 检查字符串是否以前缀开头
- 检查字符串是否以后缀结尾
- 将字符串转换为小写
- 将字符串转换为大写
- 将字符串转换为标题
- 剪裁字符串的前缀
- 剪裁字符串的后缀
- 剪裁字符串的前导空格和尾随空格
- 计算字符串中子字符串的实例数
- 查找子字符串第一个实例的索引
- 使用另一个子字符串替换子字符串的所有实例
- 使用另一个子串替换子串的一些实例
- 将字符串中的一个字符替换为另一个字符
- 查找子字符串最后一个实例的索引
- Index character in a string in Golang
- 字符串的所有排列
- 交换字符串的字符
- 交换两个字符串
- 反转一个字符串
- 查找并删除字符串中的字符
- 查找并删除子字符串
- 通过索引删除字符串
- 创建字符串的计数/重复副本
- 不区分大小写的字符串比较
- 字符数或字符串长度
- 获取任何字母或数字的 ASCII 码/值
- 迭代字符串
- 字符串长度
- 字符的 ASCII 数字
- 在字符串中写入或打印反斜杠
- 打印带双引号的字符串
- 排序字符串
- 数学
- 数字的上限
- 数字的下限
- 获取浮点数的整数值
- 数字的舍入
- 偶数的舍入
- 移除浮点数的小数点
- 获取一个数的绝对值
- 圆周率
- 一个数的平方根
- 一个数的立方根
- 对数
- 余数或模数
- 把数字分成整数和分数部分
- 计算
power(x, y)
- 检查数字是负数还是正数
- 两个数的最小值
- 两个数的最大值
- 随机
- 生成随机数
- 生成随机密码
- 选择数组或切片中的随机元素
- 选择字符串中的随机字符
- 打乱字符串
- 打乱切片或数组
- 生成
n
个整数的随机数组/切片 - 生成给定范围内的数字
- 生成随机字符串
- 浮点
- 将字符串解析为浮点
- 布尔值
- 解析布尔值或检查给定的字符串是否是布尔值
- 布尔值的格式说明符或打印布尔值
- 同步
- 了解等待组
- 循环
- 实现
while
循环
- 实现
- 函数
- IIF 或立即调用函数
- 函数闭包
- 将函数作为参数传递给另一个函数
- 从函数返回函数
- 向的函数传递可变数量的参数
- 方法与函数的区别
- 匿名函数
- 高阶函数
- 用户定义函数类型
- 从函数返回多个值
- 函数
- 如何从另一个包调用函数
- 延迟
defer
关键字- 延迟 gorroutine
- 延迟函数的用例
- 延迟中的内联函数
- 延迟参数的求值
- 延迟中的自定义函数
- 延迟的工作原理
- 延迟函数和命名返回值
- 多重延迟函数
- 延迟和方法
main()
函数中的延迟
- 恐慌与恢复
- 恐慌与恢复
- 在不同函数中恢复恐慌
- 延迟和恐慌
- 运行时异常恐慌
- 恐慌与格式字符串
- 从恐慌中恢复
- 恢复恐慌时函数的返回值
recover()
函数的返回值- 恐慌的栈跟踪
- 如何创建恐慌
recover()
函数示例- 恐慌时会发生什么
- 通过调用
panic()
函数来创建恐慌 - Base64 编码/解码
- 通用文章
- 使用深度分析仪测量
newrelic
实例 - Redis 客户端示例
- Redis 客户端集群示例
- 映射:不安全的并发使用
- 十六进制和八进制
- 双引号、单引号和反引号
- 客户端超时:所有主要类型的客户端超时
- 生成 UUID/GUID
- 服务器错误——500 vs 502 vs 503 vs 504
- 在控制台中打印/输出彩色文本
- 打印/输出粗体文本
- 打印/输出斜体文本
- 打印/输出带背景的文本
- 打印/输出划掉的文本
- 打印/输出带有下划线的文本
- 格式化消息而不打印
- 关于 Base64 编码/解码的全部内容——完整指南
- 理解
multipart/form-data
内容类型
- 使用深度分析仪测量
- 面向对象编程
- OOP:继承完整指南
- 使用结构(嵌入)的继承
- 使用接口的继承
- 使用接口+结构的继承
- 面向对象程序设计:多态性的完全指南
- 编译时多态性
- 运行时多态性
- 函数/方法重载(替代/变通方法)
- 抽象类:完整指南
- 封装
- 协议缓冲区
- 协议缓冲区和开始:入门
fmt
包println
、printf
、print
- 理解
Errorf()
函数 - 理解
Fprintf()
函数 - 理解
Fprint()
函数 - 理解
Fprintln()
函数 - 理解
Println()
函数 - 理解
Printf()
函数 - 理解
Print()
函数
- GRPC
- GRPC 和 REST 的区别
- 设计模式
- 所有设计模式
- 抽象工厂设计模式
- 构建器模式
- 工厂设计模式
- 对象池设计模式
- 原型模式
- 单例设计模式
- 责任链设计模式
- 命令设计模式
- 迭代器设计模式
- 中介设计模式
- 备忘录设计模式
- 空对象设计模式
- 观察者设计模式
- 状态设计模式
- 策略设计模式
- 模板方法设计模式
- 访客设计模式
- 适配器设计模式
- 桥接设计模式
- 组合设计模式
- 装饰器设计模式
- 外观设计模式
- 享元设计模式
- 代理设计模式
- 文件
- 逐字读取一个大文件
- 逐行读取一个大文件
- 将文件读入变量
- 写入文件
- 追加到现有文件
- 删除文件
- 删除/移除文件夹
- 更改文件的修改/更新时间和访问时间
- 重命名文件或文件夹
- 检查文件是否在目录中
- 创建一个空文件
- 检查是否存在文件或目录
- 迭代所有文件和文件夹中的路径
- 获取当前工作目录
- 触摸 Golang 中的文件
- 将文件从一个位置移动到另一个位置或命令
mv
- 获取文件名、大小、权限位、模式、修改时间
- 制作文件的副本
- 文件夹/目录
- 创建目录或文件夹
cd
命令或更改当前工作目录
- 验证
- 验证结构中字段的存在性
- 验证结构中整数的范围
- 时间
- 了解时间和日期——完整指南
- 表示 DOB
- 获取 DOB
- 当前时间戳
- 时间/日期格式
- 时间转换
- 时间解析
- 两个时间值的时间差
- 获取不同时区的当前时间和日期
- 在不同时区之间转换时间
- 了解时间包中的持续时间
- 时间的加减
- 将 Unix 时间戳转换为时间
- 日期
- 创建新的时间实例
- 类型转换
- 将浮点转换为整数
- 将
int
转换为float
float32
和float64
之间的转换
- 图像
- 从网址下载图像或文件
- OS
- 执行 Shell 文件
- 列出所有环境变量
- 设置或取消设置或获取环境变量
- 检查是否设置了环境变量
- 检测操作系统
- 获取主机名
- 返回退出状态代码
- 执行操作系统/系统命令
- 获取当前用户名
- 获取当前用户的主目录
- 加载
.env
或环境文件
net/http
- 使用
net/http
包获取查询参数 net/http
包——检测超时- 实现基本的 HTTP 服务器
- 从传入的 HTTP 请求中获取请求头
- 为传入的 HTTP 请求设置响应头
- 获取传出 HTTP 请求的响应头
- 为传出的 HTTP 请求设置请求头
- 检查特定的头是否存在于 HTTP 请求中
- 规范的 HTTP 头部键含义
- 从一个 HTTP 请求中获取 JSON 请求体
- 从传入的 HTTP 请求中获取客户端的用户代理
- 带基本认证的 HTTP 客户端/服务器
- 解析
application/x-www-form-urlencoded
请求体的 HTTP 服务器 - 发送
x-www-form-urlencoded
请求体的 HTTP 客户端 - 在请求体中发送/接收 JPEG 文件的 HTTP 示例
- 在请求体中发送/接收 PDF 文件的 HTTP 示例
- 在请求体中发送/接收 PNG 文件的 HTTP 示例
- HTTP 客户端/服务器的
multipart/form-data
请求体示例 - 发送/接收
application/oct-stream
请求体 - 为什么响应体已关闭
- 在发出 HTTP 请求时设置超时
- 验证 HTTP 请求体中的整数范围
- 不跟随重定向的 HTTP 客户端
- 理解
Set-Cookie
响应头 CookieJar
- Cookie
- 读取 HTTP Cookie
- 设置 HTTP Cookie
- 返回 400(错误请求)状态代码
- 返回 404(找不到资源)状态代码
- 在 HTTP 响应中返回 401(未授权)状态代码
- 在 HTTP 响应中返回 403(禁止)状态代码
- 在 HTTP 响应中返回 200(OK)状态代码
- 返回 201(已创建)状态代码
- 返回 500(内部服务器错误)状态代码
- 如何设置 HTTP 响应的状态码
- 在 HTTP 响应中返回 JSON 正文
- 返回 202(已接受)
- 在 HTTP 响应中返回纯文本正文
- 在 HTTP 响应中返回图像或文件
- 解析网址并提取所有部分
- 从字符串中提取网址
- 将查询参数字符串转换为查询参数哈希
- 从网址获取完整的主机名和端口
- 从网址获取或提取查询参数
- 使用
- 错误
- 错误
- 错误——高级
- 创建错误的不同方法
- 比较错误或错误相等性
- 从错误或错误断言获取基础类型
- 错误的包装和取消包装
- 忽略错误
- 数据结构
- 所有数据结构
- 队列
- 栈
- 集合实现
- 链表
- 双向链表
- 二叉查找树
- 迭代二叉查找树
- 堆
- 最小堆
- 最大堆
- TRIE 实现方式
- 整数
- 反转数字或整数
- 实现自己的
Atoi()
函数 - 检查一个数字是否是回文
- 求数字的下一个排列
- 字符串
- 无重复字符的最长子串
- 字符串中最长的回文子串
- 生成有效的括号
- 检查有效括号
- 字符串内最长的有效括号子字符串
- 通配符匹配或正则表达式匹配
- 相加两个二进制数
- 数组
- 在数组中找到总和为目标数字的两个数字
- 两个排序数组的中位数
- 查找数组中的所有零和三元组
- 查找数组中的所有总和为目标数的三元组
- 使用数组中的三个数字,找出最接近目标数的和
- 查找
int
数组中第一个缺少的正整数 - 在排序和旋转数组中查找枢轴索引
- 在排序和旋转数组中搜索
- 查找排序数组中目标元素的第一个和最后一个位置
- 雨水收集问题
- 组合异序词
- 合并重叠间隔
- 排序 0、1 和 2 的数组
- 跳跃游戏
- 删除排序数组中的重复项
- 矩阵
- 螺旋矩阵问题
- 顺时针旋转对称矩阵或图像
- 算法
- LRU 高速缓存实现
- 链表
- 将单链表转换为数组
- 将单链表转换为循环链表
- 检查链表是否是循环的
- 在的单链表中删除正数第
k
个节点 - 在单链表中删除倒数第
k
个节点 - 反转双向链表
- 相加两个由链表表示的数字
- 反转链表
- 反转给定链表的
k
组中的节点 - 交换链表中节点对
- 将排序的链表转换为平衡的 BST
- 动态规划
- 两个字符串之间的编辑距离
- 字符串的交错
- 游戏
- 井字游戏
- 树
- 二叉树的层序遍历
- 二叉树的高度或最大深度
- 从前序和中序构造二叉树
- 从后序和中序构造二叉树
- 二叉查找树
- 检查给定的树是否是二叉查找树
- 通用程序
- 中缀到后缀的转换
- 后缀表达式的求值
- 排序算法
- 堆排序
- 插入排序
- 选择排序
- 冒泡排序
- 网络
- 验证 IP 地址
- 检查 IP 地址是 IPV4 还是 IPV6
- 从传入的 HTTP 请求中获取 IP 地址
- 正则表达式
- 在方括号或字符类内包含点
.
- 正则表达式的连接
- 正则表达式的交替
- 匹配全字符串
- 理解插入符号和美元字符
- 匹配字符串的前缀或后缀
- 不区分大小写的正则表达式匹配
- 匹配原始或字面值字符串
- 理解点
.
字符 - 替换所有匹配正则表达式的字符串
- 向后引用
- 正则表达式中的可选运算符或问号
?
- 在正则表达式中匹配数字
- 在正则表达式中匹配浮点数
- 理解正则表达式中的花括号
- 匹配任何字符的正则表达式
- 在正则表达式中使用变量
- 在方括号或字符类内包含点
- 记录器
- 记录器轮换
- MAC OS 系统
- 理解 MAC 上的
/etc/path
文件和/etc/path.d
目录
- 理解 MAC 上的
- JSON
- 解析 JSON 文件
贡献指南
本项目需要校对,欢迎大家提交 Pull Request。
请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并不要求您做到十全十美,因此请不要担心因为翻译上犯错——在大部分情况下,我们的服务器已经记录所有的翻译,因此您不必担心会因为您的失误遭到无法挽回的破坏。(改编自维基百科)
联系方式
负责人
- 飞龙: 562826179
其他
- 在我们的 apachecn/golang-by-example-2020-zh github 上提 issue.
- 发邮件到 Email:
apachecn@163.com
. - 在我们的 组织学习交流群 中联系群主/管理员即可.
下载
Docker
docker pull apachecn0/golang-by-example-2020-zh
docker run -tid -p :80 apachecn0/golang-by-example-2020-zh
# 访问 http://localhost:{port} 查看文档
PYPI
pip install golang-by-example-2020-zh
golang-by-example-2020-zh
# 访问 http://localhost:{port} 查看文档
NPM
npm install -g golang-by-example-2020-zh
golang-by-example-2020-zh
# 访问 http://localhost:{port} 查看文档
组织介绍
访问我们的主页。
赞助我们
通过平台自带的打赏功能,或点击这里。