- 博客(24)
- 收藏
- 关注
原创 Go 错误处理
error如果只需要简单的字符串,errors.New就够了。但有时需要携带更多信息,可以自定义结构体实现error接口:Code int级别是否可恢复典型场景处理方式error是文件不存在、网络超时返回error值,调用者处理panic是(通过 recover)数组越界、向 nil map 写入recover捕获,或者让它崩溃fatal否配置错误、关键资源缺失os.Exit,无法恢复Go 的错误处理哲学是“把错误当作普通值”。理解好errorpanic和fatal。
2026-06-14 16:16:04
239
原创 Go 的类型系统
Go 是一门静态强类型语言,这意味着变量的类型在编译时确定且不会改变,同时编译器会严格检查类型匹配。这种设计虽然少了一些动态语言的灵活性,但换来了代码的清晰、安全和高性能。本文将梳理 Go 类型系统的主要特点。
2026-06-07 15:29:01
272
原创 Go 迭代器
简单说,你可以编写一个生成器函数,它接收一个回调(通常命名为yield),然后在内部将元素逐个传给yield。之后,这个函数就可以直接放在for range后面使用。// 一个简单的整数序列迭代器for i := 0;i < n;i++ {if!yield(i) {return// 输出 0 1 2 3 4yield返回bool:返回true表示继续迭代,返回false表示提前终止(对应循环中的break。
2026-05-31 16:56:58
234
原创 Go 泛型笔记
写一个求和函数,如果只支持int再写一个支持float64的,逻辑完全一样,只是类型不同。为每个类型重复写一份代码显然不合理。用反射(any+ 类型断言)可以解决,但代码繁琐、性能差、编译时失去类型检查。。
2026-05-24 16:50:18
365
原创 Go 基本接口
接口定义一组行为规范(方法签名),不提供实现。实现是隐式的:一个类型只要拥有接口要求的所有方法,它就自动实现了该接口。接口变量可以保存任何实现该接口的具体值,调用方法时会自动派发到实际类型的方法。空接口(any可以保存任意类型的值,常用于接收未知类型的参数。接口比较会先比类型再比内容,不可比较的类型会 panic。接口是 Go 语言实现多态和解耦的核心工具。它不关心你“是什么”,只关心你“能做什么”。这正是行为抽象的精髓。
2026-05-17 17:10:18
346
原创 Go 函数式选项模式
函数式选项模式是 Go 社区自发形成的一种惯用法,它利用了闭包、可变参数、函数类型等特性,完美解决了多参数构造函数的难题。如果遇到可选参数多、未来可能扩展的结构体,不妨试试这个模式。
2026-05-10 15:49:08
390
原创 Go 语法基础笔记
Go 中的字符串是只读的,这意味着你无法直接修改一个字符串中的某个字符。// s[0] = 'H' // 这行会编译报错为什么这样设计?因为字符串在很多场景下是作为常量使用的,不可变性带来了安全性:你可以放心地把字符串传递给多个函数,不用担心它会被意外修改。
2026-04-26 16:55:49
316
原创 双指针经典题目
双指针(Two Pointers)是算法题中最常用的技巧之一。它的核心思想是使用两个指针,以不同的策略(如同向、相向、一快一慢等)移动,优化时间复杂度。本文通过三道 LeetCode 经典题目快慢指针两指针方向相反(链表环检测)对撞指针两指针方向相同(三数之和、四数之和)类型适用场景核心要点快慢指针链表环检测、链表中点、倒数第K个节点利用速度差或起始位置差对撞指针有序数组的 N 数之和、两数之和根据当前和与目标值的大小关系移动滑动窗口子数组、子串问题维护一个满足条件的窗口,左右边界同向移动。
2026-04-13 22:42:07
388
原创 字典树 (Trie)
#define ALPHABET_SIZE 26 // 假设只处理小写字母// 字典树节点结构// 子节点指针数组// 是否为单词结尾} TrieNode;// 创建新节点i++) {
2026-03-30 21:57:33
348
原创 回溯算法基本内容
本质:回溯 = 深度优先搜索(DFS)+ 状态重置。实现方法:确定参数结束条件单层逻辑backtrack 函数内部是 for 循环,循环体内是“做选择 -> 递归 -> 撤销选择”三步曲。剪枝:在递归前或for循环中,通过条件判断提前终止或跳过一些分支,是优化回溯算法的关键。牢记:回溯时一定要“撤销选择”,让状态恢复到原来的样子。
2026-03-14 23:38:58
305
原创 二叉树的层序遍历
int val;// 假设最多100个节点int front;// 队首下标int rear;// 队尾下标// 初始化队列// 入队// 出队// 判断队列是否为空。
2026-03-08 18:25:01
374
原创 前缀和算法
对于原数组arr,我们构造一个前缀和数组prefix(边界条件,方便计算)换句话说,prefix[i]表示原数组前i个元素的和。前缀和还可以扩展到二维数组(矩阵):// 二维前缀和构建i <= rows;j++) {// 计算子矩阵和。
2025-12-07 18:20:34
791
原创 滑动窗口算法
滑动窗口算法是一种常用的数组/字符串处理技巧,它通过维护一个窗口(通常是连续的子数组或子串)来高效解决一系列问题。这种算法能够将某些暴力解法的时间复杂度从O(n²)降低到O(n),在处理子串、子数组问题时特别有效。
2025-11-23 18:49:37
939
原创 C语言 文件操作
FILE* file = fopen("C:\\Users\\OMEN\\Desktop\\新建 文本文档.txt", "w");write_array(arr, size, "C:\\Users\\OMEN\\Desktop\\新建 文本文档.txt");printf("成功写入 %d 个学生信息到文本文件: %s\n", count, filename);printf("成功从文本文件读取 %d 个学生信息\n", *count);printf("无法打开文件!printf("无法打开文件!
2025-11-09 17:57:10
581
原创 链表基本用法
include <stdlib.h> //记得包含头文件/*定义*/int val;//用于存放数据//用于指向下一节点} LN;//创建节点函数if(node!= NULL){//使用函数初始化节点链表基本操作:增删改查。
2025-11-02 18:54:31
689
原创 二分法思想与运用
二分法(Binary Search)是一种在中通过每次比较将搜索范围减半从而快速定位目标的算法。:数据必须有序(单调)数学原理曾在高中学过,与这里这个是一样的。
2025-11-02 18:46:15
391
原创 双指针算法
双指针的核心思想是使用两个指针,以不同的策略(如同向、相向、一快一慢等)移动,从而将原本需要多重循环的问题,优化为单次遍历。若两指针方向相反,则称为 对撞指针。若两指针方向相同,则称为 快慢指针。
2025-11-02 18:45:06
276
原创 结构体数组和结构体指针
结构体类型是一种构造类型,它同简单类型(int、float 和 char 等)一样,也可以定义指针变量,定义方式也一样。例如int id;int score;/*定义结构体变量 s 和结构体指针变量 p ,并将结构体变量 s 的地址赋给指针 p */
2025-10-26 19:09:48
862
原创 大小端相关知识
大小端(Endianness),也叫做字节序,它描述的是多字节数据 (如整数,浮点数等) 在内存中如何存储的。即数据的"高位"和"低位"字节在内存地址中的排列顺序。
2025-10-26 19:08:16
772
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅