个人学习笔记总结。Basic Types、Strings、Arrays, Slices, and Maps、Control Statements、Declarations & Types、Formatted & File I/O、 Functions, Parameters、Defer、Closures、Slices in Detail、Reader、Structs, Struct tags & JSON、 Regular Expressions、Reference & Value …
个人学习笔记总结。Basic Types、Strings、Arrays, Slices, and Maps、Control Statements、Declarations & Types、Formatted & File I/O、 Functions, Parameters、Defer、Closures、Slices in Detail、Reader、Structs, Struct tags & JSON、 Regular Expressions、Reference & Value …
Go语言是怎样诞生的? Go语言的创始人有三位,分别是图灵奖获得者、C语法联合发明人、Unix之父肯·汤普森(Ken Thompson)、Plan 9操作系统领导者、UTF-8编码的最初设计者罗伯·派克(Rob Pike)、以及Java的HotSpot虚拟机和Chrome浏览器的JavaScript V8引擎的设计者之一罗伯特·格瑞史莫(Robert Griesemer)。 他们可能都没有想到,他们三个人在2007年9月20日下午的一次普通讨论,就这么成为了计算机编程语言领域的一次著名历史事件,开启了一个新编程语言…
一、分布式链路追踪发展简介 1.1 分布式链路追踪介绍 关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www.cnblogs.com/jiujuan/p/16097314.html) 。 这里的 OpenTelemetry 有一段发展历程。 APM(Application Performance Monitoring) 和 Distributed Tracing(分布式跟踪),后者是前者的子集。 微服务架构流行起来后,为了监控…
AES(Advanced Encryption Standard) 是一种对称加密算法,是比 DES 更好的对称加密算法类。 使用AES,在前后端之间传送密码等相关数据时,能简单高效的提高安全性。 前端的 AES(javascript/typescript) 前端的加密库一般用 crypto-js。crypto-js 支持很多加密和hash算法,使用 AES算法很简单。 var CryptoJS = require("crypto-js"); var secretKey = "len1…
实现Redis的database层(核心层:处理命令并返回) https://github.com/csgopher/go-redis 本文涉及以下文件: dict:定义字典的一些方法 sync_dict:实现dict db:分数据库 command:定义指令 ping,keys,string:指令的具体处理逻辑 database:单机版数据库 datastruct/dict/dict.go // 遍历字典所有的键值对,返回值是布尔,true继续遍历,false停止遍历 type Consumer func(key…
为什么有tcp Keepalive? 服务器和客户端建立tcp连接以后,客户端/服务器如何知道对方是否挂掉了? 这时候TCP协议提出一个办法,当客户端端等待超过一定时间后自动给服务端发送一个空的报文,如果对方回复了这个报文证明连接还存活着,如果对方没有报文返回且进行了多次尝试都是一样,那么就认为连接已经丢失,客户端就没必要继续保持连接了。如果没有这种机制就会有很多空闲的连接占用着系统资源。 KeepAlive并不是TCP协议规范的一部分,但在几乎所有的TCP/IP协议栈(不管是Linux还是Windows…
Go语言结构体 1、概念结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。组成结构体类型的那些数据称为 字段(fields)。每个字段都有一个类型和一个名字;在一个结构体中,字段名字必须是唯一的。 2、特点结构体的概念在软件工程上旧的术语叫 ADT(抽象数据类型:Abstract Data Type),在一些老的编程语言中叫 记…
概要 最近遇到一个需求,golang应用部署在远程机器,远程机器在内网,部署之后不方便再次登录此远程机器去升级。 因此,需要golang应用自动检查是否需要升级,如果需要升级,则下载二进制后自升级。 自升级库 golang自升级的库有好几个,比较之后决定采用: https://github.com/jpillora/overseer 此库不是最全面的,但是实现原理和提供的接口比较简单,代码量也不大,便于定制。 overseer 库简介 overseer 将升级的程序启动在主协程上,真正完成功能的部分作为 Progr…
1.背景 在大型项目开发过程中,经常会遇到打印大量日志,输出信息和在源码中写注释的情况。对于软件开发来说,我们一般都是打印输出英文的日志(主要考虑软件在各种环境下的兼容性,如果打印中文日志可能会出现乱码,另外英文日志更容易搜索,更容易后续做国际化),但是对于我们中国人来说,很容易就把中文全角的中文标点符号一不注意就写到日志中了。不过源码中的注释因为是完全面向开发者的,不会面向客户,所以如果研发团队全是中国人,那么代码注释用中文就更有效率。 在实际开发过程中,确实就发现了打印日志中包含了中文标点的情况,但是如果我们直…
1. 简介 本文将介绍 Go 语言中的 WaitGroup 并发原语,包括 WaitGroup 的基本使用方法、实现原理、使用注意事项以及常见的使用方式。能够更好地理解和应用 WaitGroup 来协调多个 Goroutine 的执行,提高 Go 并发编程的效率和稳定性。 2. 基本使用 2.1 定义 WaitGroup是Go语言标准库中的一个结构体,它提供了一种简单的机制,用于同步多个协程的执行。适用于需要并发执行多个任务并等待它们全部完成后才能继续执行后续操作的场景。 2.2 使用方式 首先主协程创建WaitG…