Python 与 Go 开发笔记合集

💡 原文中文,约13300字,阅读约需32分钟。
📝

内容提要

本文汇总了Python、Go、Django、NPM等开发笔记,涵盖Go的init、defer、panic/recover、new/make用法及go mod常见问题,Django常用命令、安全获取request的线程/协程本地实现、Admin自动注册与Choices枚举等技巧,NPM常用命令,以及VS Code手动安装Go工具包的方法。

🔎

延伸解读

Go 的 init、defer 与 panic/recover 执行顺序

文章通过示例说明:同一 package 可定义多个 init,按出现顺序执行,且 main 仅一个;defer 在函数返回前执行,多个 defer 按后进先出;panic 后 defer 中的 recover 可捕获异常并继续执行外层 defer。这些机制共同决定 Go 程序的初始化与异常处理流程,理解顺序有助于排查资源释放和错误恢复问题。

new 与 make 的关键区别

new 接收类型参数,返回指向零值内存的指针;make 仅用于 slice、map、chan,返回初始化后的引用类型而非指针。示例中 new(int) 得到 *int 指向 0,而 make([]int, 3) 得到长度为 3、元素为 0 的切片。文章强调 new 仅置零,make 会初始化底层数据结构,混用会导致类型错误或未初始化引用。

Django 中安全获取 request 的线程/协程本地实现

文章指出第三方工具在多线程或协程环境下获取 request 可能出错,因此给出基于 greenlet 或 thread 的 get_ident 实现 Local 类,将 request 绑定到当前执行单元。配合中间件在 process_request 中赋值、process_response 中清理,并提供 get_request 函数。该方案依赖中间件正确注册,且在新线程中调用会抛出异常,需注意生命周期管理。

go mod 常见报错与应对

文章记录三类 go mod 问题:升级 Go 版本后 go.sum 不匹配,需执行 go mod tidy 更新;go mod download 遇 TLS 连接错误,可临时禁用证书校验(export GIT_SSL_NO_VERIFY=1 或 git config 设置);goproxy 不支持 latest 查询时,需更换其他代理。这些操作均为环境相关,文章提醒环境变化后命令可能失效,应以官方文档为准。

❓

Q&A

Go 语言中 new 和 make 有什么区别?

new 用于分配内存,参数是类型,返回指向该类型零值的指针;make 用于为 slice、map 或 chan 分配内存并初始化,返回类型本身(引用),而不是指针。new 仅将内存置零,make 会对引用的数据进行初始化。

Django 中如何安全地在任意位置获取当前请求的 request 对象?

可以通过实现线程/协程本地存储(utils/local.py)和请求中间件(RequestProvider)来安全获取 request。中间件在 process_request 中将 request 存入 local.current_request,在 process_response 中清理,并提供 get_request() 函数供任意位置调用。

go mod tidy 能解决 go.sum 版本不匹配的问题吗?

可以。当升级 Go 版本后执行 go build 报错 missing go.sum entry 时,在 go build 之前执行 go mod tidy 更新 go.sum 即可解决。

VS Code 无法自动下载 Go 工具包时如何手动安装?

先创建目录 $GOPATH/src/golang.org/x,然后进入该目录克隆 tools 和 lint 仓库:git clone https://github.com/golang/tools.git 和 git clone https://github.com/golang/lint.git,最后执行 go get golang.org/x/tools/... 等命令安装。

Django 中如何让 Admin 自动注册所有 Model?

在 admin.py 中使用 inspect.getmembers(models) 遍历所有模型类,对每个类调用 admin.site.register 进行注册,并用 try-except 捕获异常。

npm 如何临时指定安装源?

可以在安装命令后加上 --registry 参数,例如:npm install [package name] --registry=https://registry.npm.taobao.org。

🏷️

标签

➡️

继续阅读