日志系统 引入 现在已经2026年了,现在的日志不只是简单的文本文件,而是可观测性的基石,我们当然不能用Println去打印日志了,我们需要一个更加结构化,更加高效的日志系统。 基本介绍 时至今日,Uber-go/zap依旧是高性能日志的常用库,Lumbjack是文件切割的标准组件。 我们再终端执行 go get -u go.uber.…
引入 当有十万人同时刷新页面MySQL会直接挂掉,这个时候我们想到了Redis可以轻松抗住压力那么,我们能不能通过Redis来优化一下。 核心思路 我们先去Redis找数据找到了返回,找不到再去MySQL找,增删改则是先改MySQL的数据,然后删除Redis的缓存,下次读取时去DB拉最新的数据 Redis 的“特殊错误”:redis.Nil 在 G…
链接与建表 基础概念 数据库类似于一个Excel表,与Redis相比,SQL必须建一个库,才能建表 Table类似于Excel里面的Sheet工作表,表必须规定好表头 Model模型,就是Go的结构体,GORM负责把结构体变成MySQL表。 核心函数解析 ① dsn (Data Source Name) 这是连接数据库的“身份证”,格式是固定的: …
路由控制 引入 我们前面写过的代码,路由比较简单,但是实际开发中往往很复杂,我们可能要这样写 r.GET("/user/login", login) r.POST("/user/register", register) r.GET("/user/info", info) r.GET("/video/list…
准备 安装第三方开源Redis库 go mod init redis-demo go get github.com/redis/go-redis/v9 然后我们先不管别的 ,我们来一段代码,来试试看看可不可以跑通,我们再来继续学习 package main import ( "c…
分类 TCP socket编程,是网编的主流,底层用的是TCP/ip协议 b/s结构的http编程,使用浏览器去访问服务器时,使用的http协议,但是底层依旧是tcp socket实现。 基础知识 协议 TCP/IP是Internet最基本的协议,是由网络层的IP协议和传输层的TCP协议组成。 OSI模型约TCP/IP参考模型 层级(从高到低)OS…
引入 在我们前面学结构体的序列化和反序列化时,我们通过给结构体属性加标签,解决了序列化的时候可以将字段的名字根据我的tag进行序列化,这里就用到了我们的反射,所以反射到底是什么东西,我们接着往下看。 基本介绍 1.反射可以在运行时动态获取变量的各种信息,比如变量的类型和类别。 2.如果是结构体变量,还可以获取到结构体本身的信息,如字段、方法 3.通…
Goroutine协程 引入 某天产品经理闲着没事干,提出了以这样一个需求: 统计1~10000之间哪些是素数 当然,for循环秒了,但是你要循环多少次捏? 为了优化这个问题,引入了并发或者并行的方式,将任务分给多个goroutine去完成,这个时候就会使用到goroutine。 基本介绍 进程和线程 进程就是程序在操作系统中的一次执行过程…
引入 我们写了一段函数或者一个模块,我们该怎么确认他的运行结果是正确的呢? 当然我们有最简单粗暴的方法,就是直接调用该函数,看实际输出结果和预期结果是否一致,但是这样很不方便,我们在main函数里面调用,如果项目正在运行,需要停止项目,同时我们要测试多模块的时候需要调用很多函数,非常麻烦。 我们为了优化传统的测试方式,Go引入了testing框架和…
基本介绍 是一种轻量级的数据交换格式,易于人阅读和编写的同时也利于机器的解析和生成,目前已经成为主流的的数据格式,任何数据类型都可以用json来表示。 通常程序再网络传输时先将数据序列化成json字符串,接收方获得json字符串后再进行反序列化回复成原来的数据。 JSON键值对是用来保存数据的一种方式,键值组合中键写在前面用双引号包裹,用冒号分隔,…