Go 错误处理的演进:从痛点到优雅实践 前言 错误处理是 Go 语言开发中绕不开的话题。与其他语言的异常机制不同,Go 选择了显式错误返回的设计哲学。虽然这
SSH 密钥管理 1. 密钥对原理回顾 SSH 密钥认证使用非对称加密:本机持有私钥,远端(GitHub / 服务器)保存公钥。 私钥 ~/.ssh/id_ed25519 ← 绝对不能泄露,只存本机 公钥 ~/.ssh/id_ed25519.pub
1. Git 的本质:内容寻址文件系统 Git 本质上是一个以内容寻址的文件系统,在此之上构建了版本控制功能。 所有数据以对象形式存储在 .git/objects/ 目录下,每个对象用其内
1. 工作流模型 1.1 Git Flow 适合有计划版本发布的项目(如移动端 App、开源库)。 main ──●──────────────────────────●── (仅
1. Git 简介 Git 是 Linus Torvalds 于 2005 年为管理 Linux 内核代码而开发的分布式版本控制系统。 与集中式版本控制(如 SVN)不同,每个 Git 仓库都包含完整的历史记录和版本追踪
SSH 详解 1. SSH 是什么 SSH(Secure Shell)是一种加密网络协议,用于在不安全的网络上安全地远程登录和执行命令。默认端口 22。 SSH 替代了早期
背景 项目中向插入消息中心服务发送数据,消息字符串中有时间,格式是2006-01-02 15:04:05,于此同时向mysql数据库写数据,其中
背景 项目中使用gin框架,一般的注册路由和函数都这样写 func main() { engine := gin.New() engine.GET("/test",testHandler) engine.Run("localhost:8080") } type TestReq struct { Name string } func testHandler(ctx *gin.Context) { // 解析参数 name:=ctx.Query("name") testReq:=TestReq{Name: name} // 检查参数 checkTestReq(testReq) ... // 获取sessi
高并发秒杀问题 流程: 先来看秒杀活动流程: 活动入口 客户端秒杀列表页 商品秒杀详情页 点击购买 携带活动ID,商品ID提交服务端 服务端判断活动是否结束
高并发抢红包问题 红包随机值 为了避免抢红包时实时计算效率慢,采用创建红包活动时就提前计算入红包库。 分配红包尽可能平均,假如现剩60块钱,还要分
背景 为了测试环境调试方便和线上环境快速定位问题,客户端请求接口我们要给他们返回一个traceID来标识本次请求。这样拿着traceId来找我
概述 HTML5 开始提供的一种浏览器与服务器进行全双工通讯的网络技术,属于应用层协议。它基于 TCP 传输协议,并复用 HTTP 的握手通道。 说到优点,这里的对比参照物
获取运行目录和工作目录 二进制hello文件所在文件为/a/b/c/hello 如果在目录/c/d/e目录下执行文件hello /a/b/c/hello f.txt fmt.Println(getCurrentAbPathByExecutable()) // 获取当前执
信号处理 Go 信号通知通过在 Channel 上发送 os.Signal 值来工作。如我们如果使用 Ctrl+C,那么会触发 SIGINT 信号,操作系统会中断该进程的正常流程,并进入相应的信号处
go http流程 go中使用web非常简单,因为api封装很完美,一般我们会写下面代码: http.Handle("/",handler) http.HandleFunc("/user",HandlerFunc) http.ListenAndServe(":8080",nil) 还有下面的: mux := http.ServeMux{} mux.Handle("",handler) http.ListenAndServe("",&mux) 前者没有自动路由器,那么会使
默认的路由器引流 func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Hello World")) }) if err := http.ListenAndServe(":8000", nil); err != nil { fmt.Println("start http server fail:", err) } } 例子中 http.HandleFunc 通过看源码,可以看到 URI “/” 被注册到了 DefaultServeMux 上。 net/http 里面有个非常重要的
什么是“Trie 树”? Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速
进程 通常我们把一个程序的执行成为一个进程。它是操作系统进行资源分配的最小单位。 进程使用fork(这个一个系统调用)来创建若干的新的进程。前者
栈和堆 在编译时,一切无法确定大小或大小可以改变的数据,最好放到堆上,堆适合不可预知大小的内存分配。但是为此付出的代价是分配速度较慢,而且会形
使用值为 nil 的 slice、map会发生啥 允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元素,则会造成运行时 panic。 func main() { var m map[string]int v, ok := m["one"] // nil m