fix(posts): apply consultant review corrections to batch-06 and update review pack v2.0
This commit is contained in:
1 parent
b2fdccf284
commit
0e31199510
12 files changed
+1673
-259
No files matched your search
@@ -19,9 +19,9 @@ summary:
|
||||
detail: "将本地开发到官方 Catalog 发布的打包流程固化,防止动态解释器包名冲突再次发生。"
|
||||
stack: ["Traefik v3.x", "Go 1.20+", "Yaegi 解释器", "Docker", "Linux 边缘节点"]
|
||||
jumpLinks:
|
||||
business: "#交付结果"
|
||||
business: "#本地测试全绿上云启动暴雷的-go-插件"
|
||||
architecture: "#yaegi-动态解释器的包名推断规则"
|
||||
result: "#修复步骤与目录树对齐"
|
||||
result: "#交付结果"
|
||||
dynamicCta: true
|
||||
---
|
||||
|
||||
@@ -66,11 +66,11 @@ Traefik 会要求 Yaegi 在插件包中寻找并导出符合中间件契约的
|
||||
|
||||
然而,这里隐藏了一个极其隐蔽的契约断层。
|
||||
|
||||
在标准的 Go 语言开发中,如果一个仓库的名字带有连字符(如 `traefik-botfilter`),开发者通常会在源码文件首行采用惯用的简短包名(例如 `package botfilter`)。官方的 Go 编译器(`go build`)与测试框架(`go test`)完全允许这种写法,只要同目录下所有文件的 package 声明保持一致即可。
|
||||
在标准的 Go 语言工程中,模块路径与目录名经常带有连字符(如 `module github.com/hoelee/traefik-botfilter`),而源码文件首行通常声明不带前缀的合法标识符(如 `package botfilter`)。官方 Go 编译器(`gc`)通过模块导入路径可以完美绑定解析。
|
||||
|
||||
**但是,Yaegi 并不会读取 `go.mod` 来推断你声明的包名。**
|
||||
**但是,Yaegi 动态解释器并不走标准 Go 模块语义解析流程。**
|
||||
|
||||
Traefik 的插件加载器会硬编码地从 **`moduleName` 的最后一个路径段** 计算期望的包标识符,并且**自动将所有的连字符(`-`)强制替换为下划线(`_`)**:
|
||||
Traefik 的动态插件加载器会直接从静态配置中 **`moduleName` 的最后一个路径段** 提取包标识符,并且**自动将所有的连字符(`-`)强制转换为下划线(`_`)**:
|
||||
|
||||
$$\text{模块路径}: \texttt{github.com/hoelee/traefik-botfilter} \longrightarrow \text{预期包名}: \texttt{traefik\_botfilter}$$
|
||||
|
||||
|
||||
Reference in new issue
Block a user