From c47a39b2b321dea2177350dafab67ee052e07422 Mon Sep 17 00:00:00 2001
From: des <18638715007@163.com>
Date: Tue, 7 Apr 2026 22:44:49 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=8F=90=E4=BA=A4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/.gitignore | 10 ++++++++
.idea/go.imports.xml | 11 +++++++++
.idea/modules.xml | 8 +++++++
.idea/vcs.xml | 6 +++++
.idea/zire.iml | 9 +++++++
cfg.go | 11 +++++++++
cmd/zire/main.go | 52 +++++++++++++++++++++++++++++++++++++++++
go.mod | 19 +++++++++++++++
go.sum | 44 ++++++++++++++++++++++++++++++++++
internal/tools/index.go | 10 ++++++++
10 files changed, 180 insertions(+)
create mode 100644 .idea/.gitignore
create mode 100644 .idea/go.imports.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/vcs.xml
create mode 100644 .idea/zire.iml
create mode 100644 cfg.go
create mode 100644 cmd/zire/main.go
create mode 100644 go.mod
create mode 100644 go.sum
create mode 100644 internal/tools/index.go
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..b6b1ecf
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,10 @@
+# 默认忽略的文件
+/shelf/
+/workspace.xml
+# 已忽略包含查询文件的默认文件夹
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# 基于编辑器的 HTTP 客户端请求
+/httpRequests/
diff --git a/.idea/go.imports.xml b/.idea/go.imports.xml
new file mode 100644
index 0000000..d7202f0
--- /dev/null
+++ b/.idea/go.imports.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..08b8f53
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/zire.iml b/.idea/zire.iml
new file mode 100644
index 0000000..5e764c4
--- /dev/null
+++ b/.idea/zire.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/cfg.go b/cfg.go
new file mode 100644
index 0000000..a2607c8
--- /dev/null
+++ b/cfg.go
@@ -0,0 +1,11 @@
+package zire
+
+// Karmaforge 因果熔炉
+// 这个函数会被引用,并且最终被代码生成所重写
+func Karmaforge[T any]() *T {
+ panic("在使用因果熔炉之前,需要执行仪式")
+ // var result T
+ // return &result
+}
+
+var _ = Karmaforge
diff --git a/cmd/zire/main.go b/cmd/zire/main.go
new file mode 100644
index 0000000..31705cb
--- /dev/null
+++ b/cmd/zire/main.go
@@ -0,0 +1,52 @@
+package main
+
+import (
+ "errors"
+ "fmt"
+ "os"
+ "path/filepath"
+ "zire/internal/tools"
+
+ "golang.org/x/tools/go/packages"
+)
+
+func main() {
+ str, err := getModPath()
+ if err != nil {
+ fmt.Println(err.Error())
+ panic(err)
+ }
+
+ cfg := &packages.Config{
+ Mode: packages.NeedFiles | packages.NeedTypesInfo | packages.NeedFiles | packages.NeedTypes | packages.NeedName,
+ Dir: str,
+ }
+ pkgs, err := packages.Load(cfg, "./...")
+ tools.Check(err, "加载包失败")
+ for _, pkg := range pkgs {
+ fmt.Println(pkg.Name)
+ fmt.Println(pkg.TypesInfo.Scopes)
+ }
+}
+
+func getModPath() (string, error) {
+ dir, err := os.Getwd()
+ if err != nil {
+ return "", fmt.Errorf("获取当前目录失败: %w", err)
+ }
+
+ for {
+ modPath := filepath.Join(dir, "go.mod")
+ if _, err := os.Stat(modPath); err == nil {
+ return filepath.Dir(modPath), nil
+ }
+
+ parentDir := filepath.Dir(dir)
+ if parentDir == dir {
+ break // 到达根目录
+ }
+ dir = parentDir
+ }
+
+ return "", errors.New("没有找到 go.mod 文件")
+}
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000..c0c2390
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,19 @@
+module zire
+
+go 1.25
+
+require golang.org/x/tools v0.42.0
+
+require (
+ github.com/cenkalti/backoff/v4 v4.0.0 // indirect
+ github.com/davecgh/go-spew v1.1.0 // indirect
+ github.com/emirpasic/gods v1.12.0 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/reactivex/rxgo/v2 v2.5.0 // indirect
+ github.com/stretchr/objx v0.1.0 // indirect
+ github.com/stretchr/testify v1.4.0 // indirect
+ github.com/teivah/onecontext v0.0.0-20200513185103-40f981bfd775 // indirect
+ golang.org/x/mod v0.33.0 // indirect
+ golang.org/x/sync v0.19.0 // indirect
+ gopkg.in/yaml.v2 v2.2.2 // indirect
+)
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000..71104b6
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,44 @@
+github.com/cenkalti/backoff/v4 v4.0.0 h1:6VeaLF9aI+MAUQ95106HwWzYZgJJpZ4stumjj6RFYAU=
+github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
+github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg=
+github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
+github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/reactivex/rxgo/v2 v2.5.0 h1:FhPgHwX9vKdNQB2gq9EPt+EKk9QrrzoeztGbEEnZam4=
+github.com/reactivex/rxgo/v2 v2.5.0/go.mod h1:bs4fVZxcb5ZckLIOeIeVH942yunJLWDABWGbrHAW+qU=
+github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/teivah/onecontext v0.0.0-20200513185103-40f981bfd775 h1:BLNsFR8l/hj/oGjnJXkd4Vi3s4kQD3/3x8HSAE4bzN0=
+github.com/teivah/onecontext v0.0.0-20200513185103-40f981bfd775/go.mod h1:XUZ4x3oGhWfiOnUvTslnKKs39AWUct3g3yJvXTQSJOQ=
+go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8=
+golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
+golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=
+golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
diff --git a/internal/tools/index.go b/internal/tools/index.go
new file mode 100644
index 0000000..3b300c4
--- /dev/null
+++ b/internal/tools/index.go
@@ -0,0 +1,10 @@
+package tools
+
+import "fmt"
+
+func Check(err error, msg string) {
+ if err != nil {
+ fmt.Println(msg, err)
+ panic(err)
+ }
+}