获得徽章 0
#青训营 x 字节后端训练营#
这篇文章是一篇关于Golang的学习笔记,主要介绍了Golang的起源、发展以及普及,包括Golang的主要特征与发展的环境、常见错误汇总、书籍推荐、Go语言环境安装、Go工作环境设置、包、函数、变量、常量、数据类型等方面的内容。文章还提供了一些Golang的学习资源,如书籍、网站、编辑器等。
这篇文章是一篇关于Golang的学习笔记,主要介绍了Golang的起源、发展以及普及,包括Golang的主要特征与发展的环境、常见错误汇总、书籍推荐、Go语言环境安装、Go工作环境设置、包、函数、变量、常量、数据类型等方面的内容。文章还提供了一些Golang的学习资源,如书籍、网站、编辑器等。
展开
评论
点赞
#青训营 x 字节后端训练营# 学习笔记:
• 常用的分布式事务解决方案:
1. TCC(Try-Confirm-Cancel)方案
2. 2PC(Two-Phase Commit)方案
3. 最大努力通知(定期校对)方案
• 事务的隔离级别:
- 数据库定义了四种隔离级别,分别是读未提交、读已提交、可重复读和串行化。
- 隔离级别越低,数据库性能越高,而隔离级别越高,数据库性能越差。
• 2PC(Two-Phase Commit)的实现方式:
1. 准备阶段
- 协调者向所有参与者发送事务内容,并询问是否可以执行事务提交操作。
- 参与者执行事务,并将Undo和Redo信息记录在事务日志中,然后向协调者发送响应消息。
2. 提交执行阶段
- 当协调者节点从所有参与者节点获得的相应消息都为"同意"时,向所有参与者节点发出"正式提交(commit)"的请求。
- 参与者节点正式完成操作,并释放在整个事务期间内占用的资源。
- 参与者节点向协调者节点发送"完成"消息。
- 协调者节点受到所有参与者节点反馈的"完成"消息后,完成事务。
- 如果任一参与者节点在第一阶段返回的响应消息为"中止",或者协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时,事务将回滚。
• 3PC(Three-Phase Commit)的实现方式:
1. CanCommit阶段
- 协调者向参与者发送commit请求,参与者如果可以提交就返回Yes响应,否则返回No响应。
2. PreCommit阶段
- 协调者向参与者发送预提交请求,参与者执行事务,并将Undo和Redo信息记录在事务日志中,然后向协调者发送响应消息。
3. DoCommit阶段
- 当协调者节点从所有参与者节点获得的相应消息都为"预提交"时,向所有参与者节点发出"正式提交(commit)"的请求。
• 常用的分布式事务解决方案:
1. TCC(Try-Confirm-Cancel)方案
2. 2PC(Two-Phase Commit)方案
3. 最大努力通知(定期校对)方案
• 事务的隔离级别:
- 数据库定义了四种隔离级别,分别是读未提交、读已提交、可重复读和串行化。
- 隔离级别越低,数据库性能越高,而隔离级别越高,数据库性能越差。
• 2PC(Two-Phase Commit)的实现方式:
1. 准备阶段
- 协调者向所有参与者发送事务内容,并询问是否可以执行事务提交操作。
- 参与者执行事务,并将Undo和Redo信息记录在事务日志中,然后向协调者发送响应消息。
2. 提交执行阶段
- 当协调者节点从所有参与者节点获得的相应消息都为"同意"时,向所有参与者节点发出"正式提交(commit)"的请求。
- 参与者节点正式完成操作,并释放在整个事务期间内占用的资源。
- 参与者节点向协调者节点发送"完成"消息。
- 协调者节点受到所有参与者节点反馈的"完成"消息后,完成事务。
- 如果任一参与者节点在第一阶段返回的响应消息为"中止",或者协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时,事务将回滚。
• 3PC(Three-Phase Commit)的实现方式:
1. CanCommit阶段
- 协调者向参与者发送commit请求,参与者如果可以提交就返回Yes响应,否则返回No响应。
2. PreCommit阶段
- 协调者向参与者发送预提交请求,参与者执行事务,并将Undo和Redo信息记录在事务日志中,然后向协调者发送响应消息。
3. DoCommit阶段
- 当协调者节点从所有参与者节点获得的相应消息都为"预提交"时,向所有参与者节点发出"正式提交(commit)"的请求。
展开
评论
点赞
#青训营 x 字节后端训练营#
这篇文章主要讲述了分布式事务的概念和实现。分布式事务是指在分布式环境下,多个节点之间进行的事务操作。由于分布式环境下的节点之间存在网络延迟和故障等问题,因此需要采用一些特殊的技术来保证事务的一致性。文章介绍了两种常见的分布式事务实现方案:2PC和TCC。其中,2PC是一种比较传统的实现方式,它采用了XA协议来保证事务的一致性。而TCC则是一种比较新的实现方式,它采用了“try-confirm-cancel”三阶段提交协议来实现分布式事务。此外,文章还介绍了本地消息表的实现方式,它通过消息日志的方式来异步执行需要分布式处理的任务,从而保证了事务的一致性。最后,文章总结了分布式事务的产生原因和基础,并提供了一些实现分布式事务的建议。
学习笔记:
• 分布式事务是指在分布式环境下,多个节点之间进行的事务操作。
• 2PC和TCC是两种常见的分布式事务实现方案。
• 2PC采用了XA协议来保证事务的一致性。
• TCC采用了“try-confirm-cancel”三阶段提交协议来实现分布式事务。
• 本地消息表通过消息日志的方式来异步执行需要分布式处理的任务,从而保证了事务的一致性。
• 分布式事务的产生原因包括service多个节点和resource多个节点。
• 实现分布式事务需要考虑隔离性、一致性、可靠性等因素。
这篇文章主要讲述了分布式事务的概念和实现。分布式事务是指在分布式环境下,多个节点之间进行的事务操作。由于分布式环境下的节点之间存在网络延迟和故障等问题,因此需要采用一些特殊的技术来保证事务的一致性。文章介绍了两种常见的分布式事务实现方案:2PC和TCC。其中,2PC是一种比较传统的实现方式,它采用了XA协议来保证事务的一致性。而TCC则是一种比较新的实现方式,它采用了“try-confirm-cancel”三阶段提交协议来实现分布式事务。此外,文章还介绍了本地消息表的实现方式,它通过消息日志的方式来异步执行需要分布式处理的任务,从而保证了事务的一致性。最后,文章总结了分布式事务的产生原因和基础,并提供了一些实现分布式事务的建议。
学习笔记:
• 分布式事务是指在分布式环境下,多个节点之间进行的事务操作。
• 2PC和TCC是两种常见的分布式事务实现方案。
• 2PC采用了XA协议来保证事务的一致性。
• TCC采用了“try-confirm-cancel”三阶段提交协议来实现分布式事务。
• 本地消息表通过消息日志的方式来异步执行需要分布式处理的任务,从而保证了事务的一致性。
• 分布式事务的产生原因包括service多个节点和resource多个节点。
• 实现分布式事务需要考虑隔离性、一致性、可靠性等因素。
展开
评论
点赞
#青训营 x 字节后端训练营#
学习笔记:
• MySQL索引背后的数据结构及算法原理
• B+树是MySQL使用的索引算法
• B+树的节点包含指向子节点的指针和存储数据的指针
• B+树的叶子节点存储数据,非叶子节点不存储数据
• B+树的节点大小通常为页大小的一半
• InnoDB的索引有聚集索引和非聚集索引
• MySQL逻辑架构图
• MySQL逻辑架构图分为连接处理、查询处理和存储引擎三层
• MySQL服务器进程为每个客户端连接创建一个线程
• MySQL服务器对客户端进行认证,可以通过用户名和密码认证,也可以通过SSL证书进行认证
• InnoDB页存储结构
• InnoDB的存储结构是以页为单位的,每个页的大小默认为16KB
• InnoDB的页存储结构分为页头、页体和页尾三部分
• InnoDB的页体存储了记录数据和空间管理信息
• InnoDB的页头存储了页的元信息,如页号、页类型和页校验和等
• InnoDB的页尾存储了页的校验和
• InnoDB锁类型思维导图
• InnoDB的锁类型包括共享锁、排他锁、意向共享锁和意向排他锁
• 共享锁和排他锁是两种最基本的锁类型
• 意向锁是为了在行级锁和表级锁之间提供一种协调机制
• InnoDB的乐观锁和悲观锁
• 乐观锁和悲观锁是两种并发控制的思想,可用于解决丢失更新问题
• 乐观锁每次去取数据,都很乐观,觉得不会出现并发问题,不上锁,但在更新时会检查是否有冲突
• 悲观锁每次去取数据,都很悲观,都觉得会被别人修改,会有并发问题,因此在访问、处理数据前就加排他锁
• InnoDB的锁粒度
• InnoDB的锁粒度包括表锁、行锁和页锁
• 表锁的锁定粒度最大,锁定力度大,发生锁冲突概率高,并发度最低,不会出现死锁
• 行锁的锁定粒度最小,锁定力度小,发生锁冲突概率低,并发度高,会出现死锁
• 页锁的锁定粒度介于表锁和行锁之间,发生锁冲突的概率一般,会出现死锁
• InnoDB的兼容性
• 共享锁和排他锁是兼容的,多个事务可以同时持有共享锁,但只能有一个事务持有排他锁
• 意向锁是兼容的,意向共享锁和意向排他锁可以与共享锁和排他锁共存
• 行锁和表锁是不兼容的,行锁和页锁也是不兼容的,一个事务不能同时持有行锁和表锁,或者同时持有行锁和页锁
学习笔记:
• MySQL索引背后的数据结构及算法原理
• B+树是MySQL使用的索引算法
• B+树的节点包含指向子节点的指针和存储数据的指针
• B+树的叶子节点存储数据,非叶子节点不存储数据
• B+树的节点大小通常为页大小的一半
• InnoDB的索引有聚集索引和非聚集索引
• MySQL逻辑架构图
• MySQL逻辑架构图分为连接处理、查询处理和存储引擎三层
• MySQL服务器进程为每个客户端连接创建一个线程
• MySQL服务器对客户端进行认证,可以通过用户名和密码认证,也可以通过SSL证书进行认证
• InnoDB页存储结构
• InnoDB的存储结构是以页为单位的,每个页的大小默认为16KB
• InnoDB的页存储结构分为页头、页体和页尾三部分
• InnoDB的页体存储了记录数据和空间管理信息
• InnoDB的页头存储了页的元信息,如页号、页类型和页校验和等
• InnoDB的页尾存储了页的校验和
• InnoDB锁类型思维导图
• InnoDB的锁类型包括共享锁、排他锁、意向共享锁和意向排他锁
• 共享锁和排他锁是两种最基本的锁类型
• 意向锁是为了在行级锁和表级锁之间提供一种协调机制
• InnoDB的乐观锁和悲观锁
• 乐观锁和悲观锁是两种并发控制的思想,可用于解决丢失更新问题
• 乐观锁每次去取数据,都很乐观,觉得不会出现并发问题,不上锁,但在更新时会检查是否有冲突
• 悲观锁每次去取数据,都很悲观,都觉得会被别人修改,会有并发问题,因此在访问、处理数据前就加排他锁
• InnoDB的锁粒度
• InnoDB的锁粒度包括表锁、行锁和页锁
• 表锁的锁定粒度最大,锁定力度大,发生锁冲突概率高,并发度最低,不会出现死锁
• 行锁的锁定粒度最小,锁定力度小,发生锁冲突概率低,并发度高,会出现死锁
• 页锁的锁定粒度介于表锁和行锁之间,发生锁冲突的概率一般,会出现死锁
• InnoDB的兼容性
• 共享锁和排他锁是兼容的,多个事务可以同时持有共享锁,但只能有一个事务持有排他锁
• 意向锁是兼容的,意向共享锁和意向排他锁可以与共享锁和排他锁共存
• 行锁和表锁是不兼容的,行锁和页锁也是不兼容的,一个事务不能同时持有行锁和表锁,或者同时持有行锁和页锁
展开
评论
点赞
#青训营 x 字节后端训练营#
这篇文章介绍了数据结构和算法的基本概念,包括线性结构、时间复杂度、空间复杂度、哈希函数、冒泡排序、字符串翻转、翻转链表和动态规划等。其中,对于时间复杂度,文章列举了常见的量级,并给出了大O表示法中的公式。对于哈希函数,文章介绍了几种常见的方法,包括取余法、平方取中法和拉链法。对于冒泡排序,文章给出了OC写法和Java写法。对于字符串翻转和翻转链表,文章分别给出了C语言和Java的代码实现。最后,文章介绍了动态规划的基本概念,并以力扣剑指Offer47. 礼物的最大价值为例,讲解了动态规划的使用方法。
这篇文章介绍了数据结构和算法的基本概念,包括线性结构、时间复杂度、空间复杂度、哈希函数、冒泡排序、字符串翻转、翻转链表和动态规划等。其中,对于时间复杂度,文章列举了常见的量级,并给出了大O表示法中的公式。对于哈希函数,文章介绍了几种常见的方法,包括取余法、平方取中法和拉链法。对于冒泡排序,文章给出了OC写法和Java写法。对于字符串翻转和翻转链表,文章分别给出了C语言和Java的代码实现。最后,文章介绍了动态规划的基本概念,并以力扣剑指Offer47. 礼物的最大价值为例,讲解了动态规划的使用方法。
展开
评论
点赞
#青训营 x 字节后端训练营#
这篇文章主要介绍了实时联网游戏后台服务技术选型和挑战,重点讲解了网络接入层的开发。文章首先介绍了S架构的游戏后台的三层,即网络接入层、游戏逻辑层和数据存储层,并指出它们各自所面临的问题域及对应技术栈。然后,文章重点讲解了网络接入层的开发,包括通讯协议、并发模型、游戏对象序列化等方面。在通讯协议方面,文章介绍了HTTP、Websocket、UDP、QUIC和WebRTC等协议,并分析了它们的优缺点。在并发模型方面,文章介绍了进程、线程、事件驱动和协程等四种常见的并发模型,并分析了它们的优缺点。在游戏对象序列化方面,文章介绍了基于文本和基于二进制两种序列化方式,并分析了它们的优缺点。最后,文章提出了一些开发建议,如采用协程并发模式开发网络接入层服务等。
学习笔记:
• S架构的游戏后台可划分为三层:网络接入层、游戏逻辑层和数据存储层。
• 网络接入层的主要任务是建立客户端和后台服务以及客户端之间的信道,接收来自客户端大量并发请求,考核该层的主要性能指标是:高吞吐、低延迟。
• 通讯协议方面,H5游戏还只能采用HTTP或Websocket方式通讯。而对于直接基于TCP协议通讯,可采用先用RSA协商加密秘钥,然后使用对称加密方式将数据加密后发送。
• 并发模型方面,服务端有4种常见的并发模型:进程、线程、事件驱动和协程。其中,建议使用协程并发模式开发网络接入层服务。
• 游戏对象序列化方面,序列化主要有基于文本和基于二进制两种。在开发过程中一般会先采用文本序列化方式,在游戏正式上线前切换至二进制序列化方式以减少传输流量、提升编解码效率。
这篇文章主要介绍了实时联网游戏后台服务技术选型和挑战,重点讲解了网络接入层的开发。文章首先介绍了S架构的游戏后台的三层,即网络接入层、游戏逻辑层和数据存储层,并指出它们各自所面临的问题域及对应技术栈。然后,文章重点讲解了网络接入层的开发,包括通讯协议、并发模型、游戏对象序列化等方面。在通讯协议方面,文章介绍了HTTP、Websocket、UDP、QUIC和WebRTC等协议,并分析了它们的优缺点。在并发模型方面,文章介绍了进程、线程、事件驱动和协程等四种常见的并发模型,并分析了它们的优缺点。在游戏对象序列化方面,文章介绍了基于文本和基于二进制两种序列化方式,并分析了它们的优缺点。最后,文章提出了一些开发建议,如采用协程并发模式开发网络接入层服务等。
学习笔记:
• S架构的游戏后台可划分为三层:网络接入层、游戏逻辑层和数据存储层。
• 网络接入层的主要任务是建立客户端和后台服务以及客户端之间的信道,接收来自客户端大量并发请求,考核该层的主要性能指标是:高吞吐、低延迟。
• 通讯协议方面,H5游戏还只能采用HTTP或Websocket方式通讯。而对于直接基于TCP协议通讯,可采用先用RSA协商加密秘钥,然后使用对称加密方式将数据加密后发送。
• 并发模型方面,服务端有4种常见的并发模型:进程、线程、事件驱动和协程。其中,建议使用协程并发模式开发网络接入层服务。
• 游戏对象序列化方面,序列化主要有基于文本和基于二进制两种。在开发过程中一般会先采用文本序列化方式,在游戏正式上线前切换至二进制序列化方式以减少传输流量、提升编解码效率。
展开
评论
点赞
#青训营 x 字节后端训练营#
这篇文章是一篇关于Git基础操作的总结。文章提供了一张Git操作流程的图,并解释了一些基本概念,如版本库、工作区、暂存区等。接着,文章列出了一些常用的Git命令,包括添加、提交、查看、分支管理等。此外,文章还介绍了Git分支开发规范和优雅的提交Git Commit Message等内容。最后,文章提供了一个备忘录,包含60多个Git常用命令行。
这篇文章是一篇关于Git基础操作的总结。文章提供了一张Git操作流程的图,并解释了一些基本概念,如版本库、工作区、暂存区等。接着,文章列出了一些常用的Git命令,包括添加、提交、查看、分支管理等。此外,文章还介绍了Git分支开发规范和优雅的提交Git Commit Message等内容。最后,文章提供了一个备忘录,包含60多个Git常用命令行。
展开
评论
点赞
#青训营 x 字节后端训练营#
## 学习笔记
• 实习生需要有耐心和恒心,逐渐适应和熟悉新环境。
• 在工作中需要学会时间管理,合理规划和安排自己的时间。
• 学习专业技能需要长时间踏实的积累,多看多写是提升技能的捷径。
• 技术分享不仅能够帮助读者,也能够倒逼作者学习和成长。
• 工程化团队需要建设基础工程化框架、中后台研发框架、代码质量相关的扫描平台、nodejs基础库等。
## 学习笔记
• 实习生需要有耐心和恒心,逐渐适应和熟悉新环境。
• 在工作中需要学会时间管理,合理规划和安排自己的时间。
• 学习专业技能需要长时间踏实的积累,多看多写是提升技能的捷径。
• 技术分享不仅能够帮助读者,也能够倒逼作者学习和成长。
• 工程化团队需要建设基础工程化框架、中后台研发框架、代码质量相关的扫描平台、nodejs基础库等。
展开
评论
1
#青训营 x 字节后端训练营#
这篇文章主要介绍了HTTP和HTTPS的相关知识,包括HTTP报文的组成、HTTP状态码、HTTPS的握手过程等。以下是学习笔记:
## HTTP报文
• HTTP报文由报文首部和报文主体两部分组成,两者之间用空行分隔。
• 报文首部包含请求行、请求头、状态行和响应头等信息。
• 报文主体是可选的,通常用于传输实体主体或文件。
## HTTP状态码
• HTTP状态码用于表示客户端请求的返回结果,标记服务器端的处理是否正常,通知出现的错误等工作。
• 状态码由三位数字组成,第一位数字表示响应类型。
## HTTPS握手过程
• HTTPS握手过程包括SSL/TLS协议的握手和应用层协议的通信。
• 握手过程分为SSL第一次握手和SSL重复握手两个阶段。
• SSL第一次握手包括客户端发送Client Hello报文、服务器发送Server Hello报文、服务器发送Certificate报文、客户端发送Client Key Exchange报文等步骤。
• SSL重复握手包括客户端发送Finished报文、服务器发送Finished报文等步骤。
## 其他
• TRACE方法可以查询发送出去的请求是怎样被加工修改的。
• CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
• HTTP首部字段根据实际用途被分为以下4种类型:通用首部字段、请求首部字段、响应首部字段和实体首部字段。
这篇文章主要介绍了HTTP和HTTPS的相关知识,包括HTTP报文的组成、HTTP状态码、HTTPS的握手过程等。以下是学习笔记:
## HTTP报文
• HTTP报文由报文首部和报文主体两部分组成,两者之间用空行分隔。
• 报文首部包含请求行、请求头、状态行和响应头等信息。
• 报文主体是可选的,通常用于传输实体主体或文件。
## HTTP状态码
• HTTP状态码用于表示客户端请求的返回结果,标记服务器端的处理是否正常,通知出现的错误等工作。
• 状态码由三位数字组成,第一位数字表示响应类型。
## HTTPS握手过程
• HTTPS握手过程包括SSL/TLS协议的握手和应用层协议的通信。
• 握手过程分为SSL第一次握手和SSL重复握手两个阶段。
• SSL第一次握手包括客户端发送Client Hello报文、服务器发送Server Hello报文、服务器发送Certificate报文、客户端发送Client Key Exchange报文等步骤。
• SSL重复握手包括客户端发送Finished报文、服务器发送Finished报文等步骤。
## 其他
• TRACE方法可以查询发送出去的请求是怎样被加工修改的。
• CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
• HTTP首部字段根据实际用途被分为以下4种类型:通用首部字段、请求首部字段、响应首部字段和实体首部字段。
展开
评论
点赞
#青训营 x 字节后端训练营#
学习笔记:互联网项目开发流程
前言:互联网项目开发涉及多个工种的协同合作,如业务、产品、研发、测试、运营、UI设计和运维等。
时间节奏:定义项目开发时间节点,确保各阶段按时完成。
资源投入:合理安排研发资源,避免项目延期风险。
研发、测试、上线阶段:研发需求设计、设计评审、功能开发、提测报告、接口文档、单测信息等;测试需求验证、功能测试、BUG修复等;上线前准备上线报告、线上配置数据和权限等。
项目复盘:对项目进行技术总结、分享成长,避免同类问题再次发生。复盘内容包括数据库、业务、功能、部署、接口等方面的优化和改进。
总结:合理把控互联网项目开发流程,确保项目按时上线;通过技术分析、复盘、总结、归纳,沉淀技术资料,提升技术氛围。
学习笔记:互联网项目开发流程
前言:互联网项目开发涉及多个工种的协同合作,如业务、产品、研发、测试、运营、UI设计和运维等。
时间节奏:定义项目开发时间节点,确保各阶段按时完成。
资源投入:合理安排研发资源,避免项目延期风险。
研发、测试、上线阶段:研发需求设计、设计评审、功能开发、提测报告、接口文档、单测信息等;测试需求验证、功能测试、BUG修复等;上线前准备上线报告、线上配置数据和权限等。
项目复盘:对项目进行技术总结、分享成长,避免同类问题再次发生。复盘内容包括数据库、业务、功能、部署、接口等方面的优化和改进。
总结:合理把控互联网项目开发流程,确保项目按时上线;通过技术分析、复盘、总结、归纳,沉淀技术资料,提升技术氛围。
展开
评论
1
#青训营 x 字节后端训练营#
这是一篇关于Go设计模式实战系列的文章,主要介绍了如何在真实业务场景中使用设计模式。文章采用了以下结构:什么是「XX设计模式」、什么真实业务场景可以使用「XX设计模式」、怎么用「XX设计模式」。本文主要介绍了「组合模式」结合Go语言天生的并发特性,如何在真实业务场景中使用。并发组合模式的优势是原本串行的业务可以被并发执行,利用多核优势提升性能。文章以某东的订单结算页面为例,说明了如何使用并发组合模式。在订单结算页面中,页面由多个模块构成,每个模块可以由多个子模块构成。有些模块之间并没有依赖,且该模块涉及服务远程调用等阻塞操作,这些模块可以被并发的执行。文章最后介绍了如何使用并发组合模式。
这是一篇关于Go设计模式实战系列的文章,主要介绍了如何在真实业务场景中使用设计模式。文章采用了以下结构:什么是「XX设计模式」、什么真实业务场景可以使用「XX设计模式」、怎么用「XX设计模式」。本文主要介绍了「组合模式」结合Go语言天生的并发特性,如何在真实业务场景中使用。并发组合模式的优势是原本串行的业务可以被并发执行,利用多核优势提升性能。文章以某东的订单结算页面为例,说明了如何使用并发组合模式。在订单结算页面中,页面由多个模块构成,每个模块可以由多个子模块构成。有些模块之间并没有依赖,且该模块涉及服务远程调用等阻塞操作,这些模块可以被并发的执行。文章最后介绍了如何使用并发组合模式。
展开
评论
1
#青训营 x 字节后端训练营#
这篇文章主要介绍了如何使用Viper处理Go应用程序的配置文件。Viper是一个功能强大且高度可配置的库,用于管理Go应用程序中的配置。它支持多种配置需求和格式,包括从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息,从环境变量中读取,从远程配置系统(etcd或Consul)读取并监控配置变化,从命令行参数读取配置,从buffer读取配置等。文章中还介绍了如何使用Viper处理YAML配置文件并将其集成到Gin框架中。最后,文章提供了一些示例代码,展示了如何使用Viper设置默认值、读取配置文件等。
这篇文章主要介绍了如何使用Viper处理Go应用程序的配置文件。Viper是一个功能强大且高度可配置的库,用于管理Go应用程序中的配置。它支持多种配置需求和格式,包括从JSON、TOML、YAML、HCL、envfile和Java properties格式的配置文件读取配置信息,从环境变量中读取,从远程配置系统(etcd或Consul)读取并监控配置变化,从命令行参数读取配置,从buffer读取配置等。文章中还介绍了如何使用Viper处理YAML配置文件并将其集成到Gin框架中。最后,文章提供了一些示例代码,展示了如何使用Viper设置默认值、读取配置文件等。
展开
评论
1
#青训营 x 字节后端训练营#
• GoFrame是一款模块化、高性能、企业级的Go基础开发框架,是Golang标准库的一个增强扩展级,包含通用核心的基础开发组件。
• GoFrame的设计思想类似于PHP的Laravel框架,非常值得学习和借鉴。
• 对于有基础的同学,建议可以简单熟悉一下框架设计、操作一下快速开始,然后就重点阅读核心组件,尤其是数据库ORM。
• 对于有PHP基础,只是没有go语言基础的同学来讲,转go还是比较轻松的。可能只是不能像PHP那么灵活,那么随心所欲的写代码了,尝试一下GO语言苛刻的规范化开发也未尝不是一种享受。
• 在看文档过程中,我们不能很明显的知道当前文档的版本,这个问题可以通过把页面拉到最上面,点击左上角进行版本切换来解决。
• GoFrame是一款模块化、高性能、企业级的Go基础开发框架,是Golang标准库的一个增强扩展级,包含通用核心的基础开发组件。
• GoFrame的设计思想类似于PHP的Laravel框架,非常值得学习和借鉴。
• 对于有基础的同学,建议可以简单熟悉一下框架设计、操作一下快速开始,然后就重点阅读核心组件,尤其是数据库ORM。
• 对于有PHP基础,只是没有go语言基础的同学来讲,转go还是比较轻松的。可能只是不能像PHP那么灵活,那么随心所欲的写代码了,尝试一下GO语言苛刻的规范化开发也未尝不是一种享受。
• 在看文档过程中,我们不能很明显的知道当前文档的版本,这个问题可以通过把页面拉到最上面,点击左上角进行版本切换来解决。
展开
评论
1
#青训营 x 字节后端训练营#
- 零值是指当你声明变量并未显式初始化时,始终为你的变量自动设置一个默认初始值。
- nil 是 Golang 中预先声明的标识符,表示引用类型(指针、接口、函数、映射、切片和通道)未初始化时的零值。
- 空结构是没有任何字段的结构类型,占用空间大小为零字节。
- 空结构可以被用于减少内存使用和提高寻址速度。
- 如果接口中已存储任何具体值,则接口将不会是 nil。
- 在进行比较时,编译器可以转化为 p == (*int)(nil),但对于接口则不行。
- 在 Golang 编程中,鼓励开发人员显式的将错误作为返回值来处理。
- 零值是指当你声明变量并未显式初始化时,始终为你的变量自动设置一个默认初始值。
- nil 是 Golang 中预先声明的标识符,表示引用类型(指针、接口、函数、映射、切片和通道)未初始化时的零值。
- 空结构是没有任何字段的结构类型,占用空间大小为零字节。
- 空结构可以被用于减少内存使用和提高寻址速度。
- 如果接口中已存储任何具体值,则接口将不会是 nil。
- 在进行比较时,编译器可以转化为 p == (*int)(nil),但对于接口则不行。
- 在 Golang 编程中,鼓励开发人员显式的将错误作为返回值来处理。
展开
评论
1
#青训营 x 字节后端训练营#
学习笔记:
当使用 Go 语言官方库时遇到性能问题,可以尝试替换为优化性能的开源库。
- fasthttp 是一个比 net/http 快十倍的 HTTP 库,其优化核心思路是资源复用。
- jsoniter 是一个快速且灵活的 JSON 解析器,可以比标准库 encoding/json 快 6 倍之多。
- quicktemplate 是一个快速、强大且易于使用的 Go 模板渲染引擎,可以比标准库 html/template 快 20 倍以上。
- 在使用这些开源库时需要注意版本兼容性和学习成本等问题,因为这些库与官方库有所不同,所以切换时需要谨慎考虑。
- 在使用官方库时遇到问题可以通过搜索引擎或向 Go 官方提 issue 解决。
- 这些开源库中的优化技巧和最佳实践可以帮助读者学习到很多实用的 Go 代码优化技巧,例如在 fasthttp 中尽量避免 string 和 []byte 的转换开销等。
学习笔记:
当使用 Go 语言官方库时遇到性能问题,可以尝试替换为优化性能的开源库。
- fasthttp 是一个比 net/http 快十倍的 HTTP 库,其优化核心思路是资源复用。
- jsoniter 是一个快速且灵活的 JSON 解析器,可以比标准库 encoding/json 快 6 倍之多。
- quicktemplate 是一个快速、强大且易于使用的 Go 模板渲染引擎,可以比标准库 html/template 快 20 倍以上。
- 在使用这些开源库时需要注意版本兼容性和学习成本等问题,因为这些库与官方库有所不同,所以切换时需要谨慎考虑。
- 在使用官方库时遇到问题可以通过搜索引擎或向 Go 官方提 issue 解决。
- 这些开源库中的优化技巧和最佳实践可以帮助读者学习到很多实用的 Go 代码优化技巧,例如在 fasthttp 中尽量避免 string 和 []byte 的转换开销等。
展开
评论
1