🌓

新手也能懂的分层设计:为什么项目里要先定义接口再实现

作为刚接触企业级项目的 Go 新手,我最近发现一个很有意思的现象:同事写代码时,总爱先在 Proto 里定义一堆接口,再用结构体去实现具体逻辑。调用的时候也不直接用结构体对象,而是通过接口方法调用 —— 刚开始看代码时满脑子疑惑:这不是多此一举吗?直接写实现不好吗?为啥要绕这么一圈? 直到后来遇到一个实际需求,再加上和 GPT 梳理思路,我才恍然大悟:原...

阅读全文

接口设计场景下数据层的最佳实践

设计数据库的小tips1、数据库表字段不建议设置值时允许为null。 NULL 的比较特性:任何与 NULL 的比较(=, !=, <, >)结果都不是 TRUE 或 FALSE,而是 UNKNOWN。这使得 WHERE 子句的行为变得难以预测。 函数与运算的行为不确定:大多数聚合函数(如 SUM, AVG, COUNT)会忽略 NULL 值...

阅读全文

万米跑后的流水账

今天参加公司的万米跑,很开心拿到了这次比赛的女子第一名,这份成就感永远铭记,虽然成绩并不是很优秀(没有突破自己的个人最好成绩),但是这个过程是让人时刻兴奋的,关键是,在跑步的过程中认识了跟跑的高中生,试着影响他去了解学习ai和计算机。在这个过程中,我反复强调兴趣和做热爱的事情,实际上也是在说给自己,做热爱的喜欢的事情,然后不顾一切后果~ 而现在,我认为我在...

阅读全文

Kafka的理解?

Kafka 本质上是一个消息队列中间件,经常在高并发的场景下我们会见到它,那顾名思义它就是面向于高并发的场景。下面我们来简单了解一下它吧~ kafka有几个关键的概念既然是消息队列,那么一定包含生产者和消费者: 每个生产者生产的消息都会属于一个topic,同一个topic的消息们会按照策略被分到不同的分区(partion)中,为了高可用,每个topic的多个...

阅读全文

GMP模型的理解

GMP 是 Go 语言特有的协程调度模型: 其中 G 代表 Goroutine(协程), M 代表 Machine(工作线程), P 代表 Processor(逻辑处理器), 其中G、P、M均由Go runtime在用户态创建。因此他们都在用户态。 Goroutine(协程)本质上是一个go程序的函数,在主函数中用go关键字标注,那么这个函数就会独立于主函数...

阅读全文

Git合并冲突解决与操作逻辑(AI版)

基于自己的思考结合AI给我梳理的总结,强烈建议看,真的非常条理性,易读也易懂。 在多人协作的 Git 开发流程中,代码冲突是不可避免的场景。如何优雅地解决冲突并确保本地修改不丢失,需要一套清晰的操作逻辑。以下是对冲突解决思路的梳理与优化: 一、冲突场景的核心矛盾当多人基于同一分支开发时,若远程分支已存在他人提交的新内容,而你的本地修改基于旧版本进行,此时...

阅读全文

git合并冲突的两种解决方案

我们拉取了一个项目,在此分支进行,修改,同时别人也拉取了统一分支的代码进行修改而且也已经提交到远程,这时候如果我们将本地代码提交了并推送到远程,一定会出现代码冲突的问题,如果我们在代码提交前,再git pull ,也会出现冲突问题, 那么有没有一个优雅的办法应对代码仓库冲突的问题,又避免内容丢失? 有两种解决方案 1、git stash -> ...

阅读全文

写接口的感悟

数据命名要规范,数据需要分析清楚再设计接口,对于写接口的时候先整体后局部,代码实现可以交给AI,在后端开发中,沟通是极为重要的,一定要花时间分析数据,下面分享一下自己写接口的经验流程: 1、设计接口文档,先确定大致要实现的接口,每个接口的传参和入参、函数名,函数名要用驼峰命名,公有函数首字母大写,私有函数首字母小写。以及接口要实现的功能。 2、定义数据结...

阅读全文

一文把反射说得明明白白

说到反射,大家可能并不陌生。Java有这个概念,Go语言也有。但无论是官网还是各路教程,往往说得玄乎又抽象,让人看完还是一脸问号。今天我们就用最通俗的语言,把它说清楚。 先以 Java反射 举个例子。 1. 先搞明白 Java 运行时Java 写好的代码要先编译成 .class 字节码文件,再由 Java 虚拟机(JVM)翻译成二进制机器码运行。JVM ...

阅读全文

etcd与redis的特性解析

为什么写这个,因为感觉这玩意官方写得不太明白,所以想用更为通俗易懂的方式写清楚这是什么,看得愉快~ 关于etcd etcd 官方对它的定义是:一个高度一致的分布式键值存储系统,能为分布式系统或机器集群提供可靠的数据存储服务。它的厉害之处在于,即便遇到网络分区,也能优雅地完成领导者选举,而且机器故障也不怕,哪怕是领导者节点出问题也能应对。​ 咱们先拆拆 “分...

阅读全文