免费编程教程

Python 中 typing 模块的类型注解

typing.List[int] 标注列表元素类型Optional[str] 表示可以是字符串或 None。TypeVar 泛型。类型注解提高代码可读性不强制运行期检查。

18 0 0
2026-07-07
Go 中 url.Values 构建查询参数

url.Values 是 map[string][]string 类型用 Add 方法添加参数Encode 方法编码成查询字符串。适合构建 GET 请求的 URL 参数。

39 0 0
2026-07-07
Python 中 classmethod 和 staticmethod 的区别

@classmethod 接收 cls 参数可以访问类属性和其他类方法。@staticmethod 不接收 cls 或 self 只是一个放在类命名空间中的普通函数。

16 0 0
2026-07-07
Python 中 functools.partial 偏函数

partial(func, arg1) 固定函数的部分参数返回一个新函数。适合回调函数或需要预先绑定参数的场景。本文用转换温度单位的例子展示。

55 0 0
2026-07-07
Go 中 iota 枚举常量的用法

iota 在 const 块中逐行递增。const (A = iota B C) 从 0 开始。配合移位操作可以生成位掩码。本文展示 iota 在枚举定义中的多种模式。

15 0 0
2026-07-07
Python 中 frozenset 不可变集合

frozenset 是不可变集合可以作为字典的 key 或放在集合中。set 不能哈希frozenset 可以。适合表示需要去重的常量集合。

20 0 0
2026-07-07
Go 中 strconv 包的类型转换

strconv.Atoi 字符串转整数strconv.Itoa 整数转字符串。ParseFloat/FormatBool 等处理其他类型。转换失败返回 error。本文列出常用转换函数。

21 0 0
2026-07-07
Python 中 zip 同时遍历多个列表

zip(list1, list2) 同时遍历多个列表自动以短的为准。zip(*) 解包将配对数据还原成原列表。本文展示 zip 在并行处理中的应用。

37 0 0
2026-07-07
Python 中的装饰器传参三层嵌套

带参数的装饰器需要三层嵌套。外层接收参数中间层接收函数内层包装调用。functools.wraps 保持原函数的元信息。本文展示带参数装饰器的写法。

21 0 0
2026-07-07
Go 中 strings 包常用函数

strings.Contains/HasPrefix/TrimSpace/Split/Join/Replace 是字符串处理的核心函数。本文展示这些函数在文本处理中的常见组合用法。

24 0 0
2026-07-07
Go 中的接口型函数 Function Interface Pattern

Go 通过将函数作为接口的实现定义函数类型并实现该接口的方法。net/http.HandlerFunc 是典型例子。本文展示这种灵活的设计模式。

21 0 0
2026-07-07
Python 中 global 和 nonlocal 的区别

global 声明变量来自模块级作用域nonlocal 声明变量来自外层函数(非全局)。在嵌套函数中修改外层变量用 nonlocal。

35 0 0
2026-07-07
Go 中 sort 包的排序接口

sort.Interface 需要实现 Len/Less/Swap 三个方法。sort.Slice 用闭包更方便。sort.Search 二分查找有序序列。本文展示 sort 包的常用方法。

37 0 0
2026-07-07
Python 中 itertools 模块的常用工具

itertools 提供高效的迭代器工具。chain 串联多个可迭代对象product 笛卡尔积cycle 循环。本文展示 itertools 在数据处理中的常用组合。

13 0 0
2026-07-07
Python 中 NotImplementedError 和抽象基类

NotImplementedError 在基类方法中抛出强制子类实现该方法。Python 的 ABC 和 abstractmethod 是更正式的抽象基类机制。本文对比两种方式。

28 0 0
2026-07-06
Go 中 recover 只能捕获本 goroutine 的 panic

defer recover() 只能捕获同一 goroutine 中的 panic。在 go func 中发生的 panic 不能被外层 recover 捕获导致程序崩溃。需要在每个 goroutine 中处理。

25 0 0
2026-07-06
Python 中 functools.lru_cache 缓存函数结果

lru_cache 自动缓存函数的返回值相同参数不再重新执行。适合计算密集和纯函数。maxsize 控制缓存数量 typed 区分不同类型参数。本文用斐波那契数列展示优化效果。

17 0 0
2026-07-06
Go 中 init 函数的执行顺序

Go 的 init 函数在包初始化时自动执行不能被显式调用。同一包内的 init 按文件名字典序执行依赖的包先初始化。本文解释 init 的执行规则。

29 0 0
2026-07-06
Python 类中的 __slots__ 节省内存

__slots__ 告诉 Python 不要为实例创建 __dict__ 字典存储属性而是用固定大小的数组。创建大量实例时 __slots__ 可以节省大量内存。本文对比开启前后的内存差异。

40 0 0
2026-07-06
Go 中的空结构体 struct{} 用途

struct{} 不占任何内存用作 channel 的信号(chan struct{})或 Set 的 map 值(map[string]struct{})。本文展示空结构体的实际应用场景。

18 0 0
2026-07-06
Python f-string 的格式化和调试功能

Python 3.8+ 的 f-string 支持 f"{var=}" 调试语法自动输出变量名和值。对齐用 :>10 和 :<10。本文展示 f-string 的多种高级格式化方式。

31 0 0
2026-07-06
Go 中 channel 的 close 和 range 操作

close(ch) 通知接收方不会再发送新数据。range ch 持续接收直到 channel 关闭。只应该由发送方 close channel向已关闭的 channel 发送会 panic。

24 0 0
2026-07-06
Python 中 property 装饰器代替 getter setter

property 把方法调用变成属性访问obj.get_x() 变成 obj.x。在需要控制属性访问逻辑时不用破坏已有的点属性调用方式。本文展示 property 的用法。

17 0 0
2026-07-06
Go panic 时打印完整的调用栈

defer recover() 捕获 panic 后调用 debug.Stack() 可以打印完整的 goroutine 调用栈方便定位问题。本文实现一个 recoverWithStack 辅助函数。

16 0 0
2026-07-06
Python 中 type 和 isinstance 判断类型的区别

isinstance 考虑继承关系type 不考虑。type(obj) is int 无法检测子类isinstance 可以。本文用类的继承关系展示两者的差异。

12 0 0
2026-07-06
Python 解包 operator 的 * 和 **

*list 解包可迭代对象**dict 解包字典。在函数调用时解包参数列表在赋值时解包序列。本文展示解包在函数定义和调用中的多种用法。

18 0 0
2026-07-06
Python 字符串拼接用 join 而不是加号

"".join(list) 比 str += str 快很多因为字符串不可变每次 += 创建新字符串 O(n^2)。join 预分配缓冲区一次性生成。本文对比 10 万次拼接的性能差异。

30 0 0
2026-07-06
Python 可变默认参数的陷阱

def foo(lst=[]) 多次调用不传参时 lst 累积了前一次的值因为默认参数在函数定义时创建且只创建一次。正确做法是用 None 判断后创建新列表。

18 0 0
2026-07-06
Go 类型断言和类型 switch

类型断言 x.(T) 从接口值提取具体类型。配合逗号 ok 形式可以避免 panic。type switch 配合 fallthrough 处理多种类型。本文展示类型断言的各种写法。

26 0 0
2026-07-06
Python 生成器和迭代器的区别

生成器用 yield 关键字实现迭代器用 __iter__ 和 __next__ 实现。生成器是创建迭代器的便捷方式。两者都是惰性计算的。本文对比两种方式的实现代码。

29 0 0
2026-07-05
Go 中 new 和 make 的区别

new 返回指向零值的指针make 初始化 slice/map/channel 并返回非零值。new 只分配内存不初始化make 分配并初始化。本文用代码对比两者的行为差异。

30 0 0
2026-07-05
Python os.path.join 在路径末尾多一斜杠的问题

os.path.join(a, b/) 可能返回 a/b/ 而不是 a/b。因为 os.path.join 认为末尾斜杠表示这是一个目录。传入路径前先 strip 掉多余的斜杠可以避免。

26 0 0
2026-07-05
Go 中 struct 作为 map 的 key

Go 的 map key 必须是可以比较的类型 struct 如果所有字段都可比较可以作为 key。包含 slice 或 map 字段的 struct 不能作为 key。本文用代码验证哪些 struct 可以作为 key。

18 0 0
2026-07-05
Python __init__ 和 __new__ 的区别

__new__ 创建实例__init__ 初始化实例。__new__ 在 __init__ 之前执行且必须返回实例。实现单例模式时重写 __new__ 控制实例的创建过程。

9 0 0
2026-07-05
Python 元组和列表的选型不可变vs可变

元组不可变可以作为字典的键列表不能。元组占用的内存比列表小且创建更快。但列表有 append remove 等方法。本文从性能和使用场景对比两者的选择。

9 0 0
2026-07-05
Python with 语句和上下文管理器

with 语句在进入和退出代码块时自动调用 __enter__ 和 __exit__ 方法适合管理文件连接和锁等资源。本文展示如何自定义上下文管理器。

30 0 0
2026-07-05
Go 命名返回值的 defer 陷阱

Go 的 defer 可以修改命名返回值但这段代码在 return 求值之后才执行 defer 实际修改无效。理解 defer return 和返回值的执行顺序是避免这类问题的关键。

13 0 0
2026-07-05
Python 文件编码错误 UnicodeDecodeError

open 文件不指定 encoding 时默认用系统编码(Windows 是 GBK)如果文件是 UTF-8 就会报错。open 时显式指定 encoding=utf-8 或先用 chardet 检测编码。

33 0 0
2026-07-05
Go 切片扩容策略理解 append 的内存行为

Go 切片在 append 超过容量时会重新分配底层数组容量翻倍(小切片)或增长 25%(大切片)。理解这个机制有助于减少不必要的内存分配和复制。本文用代码展示容量的增长曲线。

26 0 0
2026-07-05
Python 字典键不存在用 get 而不是 try except

dict[key] 键不存在抛 KeyError。dict.get(key, default) 不存在时返回默认值不抛异常。比 try/except KeyError 更简洁。本文对比四种字典安全访问方式。

31 0 0
2026-07-05
Go defer 在 for 循环里资源泄漏

defer 在函数返回时执行不是在 for 循环结束时执行。在循环里 defer 文件关闭会导致文件句柄在整个函数执行期间无法释放。解法是在循环里用匿名函数包裹 defer。

29 0 0
2026-07-05
Python pip freeze 导出依赖后安装报版本冲突

pip freeze 导出的是当前环境的所有包包括间接依赖。换到新环境时这些间接依赖版本可能与直接依赖冲突。推荐用 pip-compile 或 poetry 锁定直接依赖而非完整环境快照。

28 0 0
2026-07-05
Python 列表传参函数内修改影响原列表

Python 列表传参函数内修改影响原列表是开发中经常遇到的问题。本文从实际场景出发分析原因并给出可操作的解决方案适合正在排查这个问题的开发者参考。

13 0 0
2026-07-04
Go panic 和 recover 不是异常处理

Go panic 和 recover 不是异常处理是开发中经常遇到的问题。本文从实际场景出发分析原因并给出可操作的解决方案适合正在排查这个问题的开发者参考。

15 0 0
2026-07-04
setTimeout 模拟 setInterval 不怕堆积

setTimeout 模拟 setInterval 不怕堆积是开发中经常遇到的问题。本文从实际场景出发分析原因并给出可操作的解决方案适合正在排查这个问题的开发者参考。

15 0 0
2026-07-04
JS delete 删数组元素但 length 没变

JS delete 删数组元素但 length 没变是开发中经常遇到的问题。本文从实际场景出发分析原因并给出可操作的解决方案适合正在排查这个问题的开发者参考。

17 0 0
2026-07-04
pip install 报 externally-managed-environment

pip install 报 externally-managed-environment是开发中经常遇到的问题。本文从实际场景出发分析原因并给出可操作的解决方案适合正在排查这个问题的开发者参考。

17 0 0
2026-07-04
Python str 和 bytes 混用报 TypeError

Python str 和 bytes 混用报 TypeError是开发中经常遇到的问题。本文从实际场景出发分析原因并给出可操作的解决方案适合正在排查这个问题的开发者参考。

5 0 0
2026-07-04
Go 的 time.Sleep 在测试中的替代方案

测试中为了等 goroutine 执行完就加 time.Sleep 这不是可靠做法。慢的时候等不夠快的时候浪费时间。用 sync.WaitGroup chan 或 errgroup 才是正确方式。本文对比用 Sleep 和用 WaitGroup 的测试稳定性和执行速度。

71 0 0
2026-07-04
Go 中 len 对字符串和 slice 的返回含义不同

len("中") 返回 3 不是 1因为 len 计算的是字符串的字节数而非字符数。len(slice) 返回当前元素个数。理解这个区别在处理中文编码时很重要。本文用 Unicode 字符串示例说明。

25 0 0
2026-07-04
Python 中 os.system 和 subprocess.run 的选型

os.system 简单但不安全无法获取命令输出且容易受 shell 注入攻击。subprocess.run 可以捕获输出设置超时和错误处理。本文用系统命令调用为例对比两个 API 的安全性和灵活性。

14 0 0
2026-07-04
JS 中 undefined 和 null 的区别不只是类型不同

undefined 表示变量声明了但没赋值null 表示主动赋值空值。typeof null 返回 object 是语言历史遗留问题。函数参数不传是 undefinedJSON 序列化会忽略 undefined 但不忽略 null。本文用表格对比二者的表现差异。

18 0 0
2026-07-04
Qt C++ 桌面开发

使用 Qt 框架开发高性能、原生风格的跨平台桌面应用程序。

27 0 0
2026-06-18
GTK 图形界面

使用 GTK 工具包为 Linux 系统构建原生外观的图形化应用程序。

35 0 0
2026-06-18
Kotlin 协程

使用 Kotlin 协程编写非阻塞异步代码,掌握 suspend、launch 和 Flow。

18 0 0
2026-06-17
Java 虚拟线程 Project Loom

使用虚拟线程大幅降低并发编程复杂度,以同步代码实现异步性能。

20 0 0
2026-06-17
Java 记录类 Record

使用 Record 关键字快速定义只读的纯数据类,减少样板代码。

20 0 0
2026-06-17
Java 模块化系统

使用 Java 平台模块系统定义强封装边界,构建可维护的大型应用。

14 0 0
2026-06-17
Stream API 与 Lambda

深入 Stream 的中间操作与终端操作,利用并行流提升性能。

20 0 0
2026-06-17
Java 函数式编程

用声明式风格操作集合,通过 Stream 管道化过滤、映射和归约数据。

22 0 0
2026-06-17