Skip to content
This repository was archived by the owner on Jun 5, 2025. It is now read-only.

Commit 0b99f58

Browse files
author
dapeng
committed
update
1 parent 83be57b commit 0b99f58

32 files changed

+945
-688
lines changed

docs/.vuepress/config.js

Lines changed: 49 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ module.exports = {
4141
themeConfig: {
4242
repo: 'gone-io/gone',
4343
docsDir: 'docs',
44+
docsRepo: 'gone-io/docs-static',
45+
46+
editLinks: true,
47+
48+
// 默认为 "Edit this page"
49+
editLinkText: '帮助我们改善此页面!',
4450

4551
logo: '/assets/img/logo.png',
4652

@@ -141,17 +147,22 @@ module.exports = {
141147
text: '极简例子',
142148
link: '/zh/quick-start/simple.md',
143149
}, {
144-
text: 'Web项目',
145-
link: '/zh/quick-start/web.md',
146-
}, {
147-
text: 'Web + MySQL',
148-
link: '/zh/quick-start/mysql.md',
150+
text: "使用",
151+
items: [
152+
{
153+
text: 'Web项目',
154+
link: '/zh/quick-start/web.md',
155+
}, {
156+
text: 'Web + MySQL',
157+
link: '/zh/quick-start/mysql.md',
158+
}
159+
],
149160
}, {
150-
text: '封装一个Goner调用GPT',
151-
link: '/zh/quick-start/gpt.md',
152-
// }, {
153-
// text: 'JWT + MySQL + Redis + Schedule',
154-
// link: '/zh/quick-start/jwt+mysql+redis+schedule.md',
161+
text: "扩展",
162+
items: [{
163+
text: '封装一个Goner调用GPT',
164+
link: '/zh/quick-start/gpt.md',
165+
}]
155166
}]
156167
},
157168
{
@@ -164,55 +175,58 @@ module.exports = {
164175
text: "依赖注入",
165176
items: [{
166177
text: 'Goner和依赖注入',
167-
link: '/zh/guide/gone-and-inject.md',
178+
link: '/zh/guide/inject-1-goner-and-inject.md',
168179
}, {
169-
text: '支持哪些方式注入?',
170-
link: '/zh/guide/goner-inject.md',
180+
text: '依赖注入方式',
181+
link: '/zh/guide/inject-2-goner.md',
171182
}, {
172-
text: 'Gone vs Spring',
173-
link: '/zh/guide/gone-vs-spring.md',
183+
text: '函数参数的依赖注入',
184+
link: '/zh/guide/inject-3-func.md',
174185
}],
175186
}, {
176187
text: "内置模块使用",
177188
items: [{
178189
text: '内置Goners',
179-
link: '/zh/guide/inner-goner.md',
190+
link: '/zh/guide/goner-a-use.md',
180191
}, {
181192
text: '配置读取',
182-
link: '/zh/guide/config.md',
193+
link: '/zh/guide/goner-config.md',
183194
}, {
184-
text: '日志输出',
185-
link: '/zh/guide/logrus.md',
195+
text: '提供Web服务',
196+
link: '/zh/guide/goner-gin.md',
186197
}, {
187-
text: '链路追踪',
188-
link: '/zh/guide/tracer.md',
198+
text: '提供gRPC服务',
199+
link: '/zh/guide/goner-grpc.md',
189200
}, {
190-
text: '操作数据库',
191-
link: '/zh/guide/xorm.md',
201+
text: '日志输出',
202+
link: '/zh/guide/goner-logger.md',
192203
}, {
193-
text: '分布式锁 + 分布式缓存',
194-
link: '/zh/guide/redis',
204+
text: '使用Redis',
205+
link: '/zh/guide/goner-redis.md',
195206
}, {
196207
text: '配置定时任务',
197-
link: '/zh/guide/schedule.md',
208+
link: '/zh/guide/goner-schedule.md',
209+
}, {
210+
text: '链路追踪',
211+
link: '/zh/guide/goner-tracer.md',
198212
}, {
199-
text: '使用gRPC通信',
200-
link: '/zh/guide/grpc.md',
213+
text: '使用数据库',
214+
link: '/zh/guide/goner-xorm.md',
201215
}],
202216
}, {
203217
text: "效率提升",
204218
items: [{
205-
text: '自动生成 Priest',
206-
link: '/zh/guide/auto-gen-priest.md',
207-
}, {
208-
text: 'Hook 函数',
209-
link: '/zh/guide/hooks.md',
219+
text: '生成 Priest',
220+
link: '/zh/guide/x-1-gen-priest.md',
210221
}, {
211222
text: '错误处理',
212-
link: '/zh/guide/error.md',
223+
link: '/zh/guide/x-2-error.md',
213224
}, {
214225
text: '单元测试',
215-
link: '/zh/guide/unit-test.md',
226+
link: '/zh/guide/x-3-unit-test.md',
227+
}, {
228+
text: 'Hook 函数',
229+
link: '/zh/guide/x-4-hooks.md',
216230
}]
217231
}],
218232
},

docs/zh/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ func main() {
7474
// 调用框架内置组件,加载gin框架
7575
_ = goner.GinPriest(cemetery)
7676

77-
//一个controller类型的Goner埋葬到墓园
78-
//埋葬是什么意思? => https://goner.fun/zh/guide/core-concept.html#bury-%E5%9F%8B%E8%91%AC
79-
//墓园是什么意思? => https://goner.fun/zh/guide/core-concept.html#cemetery-%E5%A2%93%E5%9B%AD
77+
//一个controller类型的Goner注册到Gone
78+
//关于Bury => https://goner.fun/zh/guide/core-concept.html#bury-%E5%9F%8B%E8%91%AC
79+
//关于cemetery => https://goner.fun/zh/guide/core-concept.html#cemetery-%E5%A2%93%E5%9B%AD
8080
cemetery.Bury(&controller{})
8181
return nil
8282
})
@@ -103,7 +103,7 @@ curl -X POST 'http://localhost:8080/hello' \
103103
### 鬼话版本
104104
> 我们编写的代码终究只是死物,除非他们被运行起来。
105105
106-
在Gone中,组件被抽象为 Goner(逝者),Goner 属性可以注入其他的 Goner 。Gone启动前,需要将所有 Goners 埋葬 到 墓园;Gone启动后,会 复活 所有 Goners,建立一个 天国,“天国的所有人都不再残缺,他们想要的必定得到满足”。
106+
在Gone中,组件被抽象为 Goner(逝者),Goner 属性可以注入其他的 Goner 。Gone启动前,需要将所有 Goners 注册 到 墓园;Gone启动后,会 复活 所有 Goners,建立一个 天国,“天国的所有人都不再残缺,他们想要的必定得到满足”。
107107

108108

109109
### 代码版本

docs/zh/guide/gone-vs-spring.md renamed to docs/zh/blogs/0_gone-vs-spring.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
---
22
sidebar: auto
33
sidebarDepth: 4
4-
prev: ./goner-inject
5-
next: ./inner-goner
4+
prev: ../blogs/
5+
next: ./1_v1.x_release
66
---
77

88
# 对比 Gone 和 Spring 的依赖注入

docs/zh/blogs/README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ next: ../
99
时间:2024-06-18
1010

1111
## [v1.x版本 正式发布](https://goner.fun/zh/blogs/1_v1.x_release.html)
12-
时间:2024-06-16
12+
时间:2024-06-16
13+
14+
## [对比 Gone 和 Spring 的依赖注入](./0_gone-vs-spring.md)
15+
时间:2024-05-28

docs/zh/goners/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ next: ../
1212
|接口名 | 实现| GoneId|功能介绍|
1313
|---|---|---|--|
1414
|[Heaven](https://pkg.go.dev/github.com/gone-io/gone#Heaven)|[heaven](https://github.com/gone-io/gone/blob/12ea8e3577fbed493766f522ab002136edf3805d/heaven.go#L65)|gone-heaven|负责将Goner从cemetery中复活,执行安装的Hook函数,管理框架的启停流程和状态。|
15-
|[Cemetery](https://pkg.go.dev/github.com/gone-io/gone#Cemetery)|[cemetery](https://github.com/gone-io/gone/blob/12ea8e3577fbed493766f522ab002136edf3805d/cemetery.go#L17)|gone-cemetery|管理Goners,提供将Goner埋葬的Bury方法;依赖注入的逻辑主要在该结构体中实现。|
15+
|[Cemetery](https://pkg.go.dev/github.com/gone-io/gone#Cemetery)|[cemetery](https://github.com/gone-io/gone/blob/12ea8e3577fbed493766f522ab002136edf3805d/cemetery.go#L17)|gone-cemetery|管理Goners,提供将Goner注册的Bury方法;依赖注入的逻辑主要在该结构体中实现。|
1616

1717
## 框架内置Goners
1818
框架内置Goners,是为丰富Gone的功能而开发的,比如支持Web开发、支持数据库连接、支持Redis等…
1919
代码实现在 [goner目录](https://github.com/gone-io/gone/tree/v0.1.4/goner),该目录下的每个子目录分别实现了一个gone的特性,每个特性包含一个或多个Goner的定义和实现。
2020

21-
为了方便使用,我们在 [goner/priest.go](https://github.com/gone-io/gone/blob/v0.1.4/goner/priest.go) 中定义了`Priest`函数,可以按功能直接批量埋葬相关Goners
21+
为了方便使用,我们在 [goner/priest.go](https://github.com/gone-io/gone/blob/v0.1.4/goner/priest.go) 中定义了`Priest`函数,可以按功能直接批量注册相关Goners
2222

2323

2424

docs/zh/guide/core-concept.md

Lines changed: 50 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
---
22
sidebar: auto
3-
prev: false
4-
next: ./gone-and-inject
3+
prev: ./
4+
next: ./inject-1-goner-and-inject.md
55
---
66

77
# Gone的核心概念
8-
“我们编写的代码,终究只是死物,除非他在 **天国(程序)****复活(对Goners完成依赖的装配)**,为此我们需要将他 **埋葬(注册)****墓园(Gone内部的Goners仓库)**。”
8+
> “我们编写的代码,终究只是死物,除非他在 **天国(程序)****复活(对Goners完成依赖的装配)**,为此我们需要将他 **埋葬(注册)****墓园(Gone内部的Goners仓库)**。”
99
1010
[[toc]]
1111

12-
## Goner(Gone中的组件,只有实现了Goner接口才能被注册到Gone中)
12+
## Goner
1313

14-
在Gone框架中,最核心的概念就是 **Goner**,是指通过匿名嵌入了 `gone.Flag` 而实现**Goner**接口的结构体实例指针
14+
**Goner** 是指实现了 `gone.Goner` 接口的结构体实例指针;只有实现了`gone.Goner`接口的实例才能被注册到Gone中;实现`Goner`接口 有且只有 通过嵌入 **`gone.Flag`** 来实现
1515

1616
举个例子,下面的worker就是一个goner:
1717
```go
@@ -22,14 +22,14 @@ type Worker struct {
2222
worker := &Worker{}
2323
```
2424

25-
Goner是Gone框架中的组件,是实现依赖注入的关键:
26-
1. Goner可以作为属性注入到其Goner
27-
2. Goner的属性可以被其Goners注入
25+
Goner是Gone的组件,是实现依赖注入的关键:
26+
1. Goner可以作为值被注入到其Goner的属性;
27+
2. Goner的属性可以被其Goners注入
2828

2929

30-
为什么需要内嵌一个 `gone.Flag`,能通过其他方式实现**Goner**接口吗?
3130

32-
::: tip
31+
32+
::: tip 为什么只能内嵌 `gone.Flag`实现**Goner**接口?
3333
下面是Goner和gone.Flag的源代码:
3434
```go
3535
type Flag struct{}
@@ -51,23 +51,26 @@ Goner作为接口,要求实现它的“对象”拥有一个私有的方法`go
5151
多个**Goner**,我们使用其复数形式(**Goners**)表示。
5252
:::
5353

54-
在Gone框架中,还包含了三类特殊的Goner,定义如下:
5554

5655

57-
### 🔮Prophet(先知,率先知道复活已经完成)
56+
57+
## 特殊Goners
58+
59+
60+
### 🔮Prophet(先知,率先知道装配完成)
5861
一种特殊的 **Goner**,在普通 **Goner** 上实现了 **`AfterRevive() AfterReviveError`** 方法就是 **Prophet(先知)****AfterRevive** 会在所有 **Goners** 都完成依赖注入装配流程后被执行。
5962

6063
Prophet接口定义如下:
6164
```go
6265
// Prophet 先知
6366
type Prophet interface {
6467
Goner
65-
//AfterRevive 在Goner复活后会被执行
68+
//AfterRevive 在所有Goners装配完后会被执行
6669
AfterRevive() error
6770
}
6871
```
6972

70-
### 😇Angel(天使,看护服务的开启和结束
73+
### 😇Angel(天使,看护开始和结束
7174
一种特殊的 **Goner**,拥有天使左翼`Start(Cemetery) error` 和 天使右翼`Stop(Cemetery) error`,左翼负责开始(用于分配资源,启动某项服务),右翼负责结束(用于终止某项服务,回收资源)。
7275

7376
Angel接口定义如下:
@@ -79,8 +82,9 @@ type Angel interface {
7982
}
8083
```
8184

82-
### 🧛🏻‍♀️Vampire(吸血鬼,一个可以用于扩展依赖注入的强大工具)
83-
一种特殊的 **Goner**,拥有特殊能力——吸血`Suck(conf string, v reflect.Value) SuckError`**Suck**可以将不是**Goner**的值赋予注入给Goner属性。
85+
### 🧛🏻‍♀️Vampire(吸血鬼,扩展注入类型)
86+
87+
一种特殊的 **Goner**,拥有特殊能力——“吸血”`Suck(conf string, v reflect.Value) SuckError`**Suck**可以将不是**Goner**的值赋予注入给Goner属性。
8488

8589
Vampire接口定义如下:
8690
```go
@@ -92,44 +96,47 @@ type Vampire interface {
9296
```
9397

9498

95-
## Cemetery(墓园,goners仓库)
96-
Cemetery用于管理Goners,主要提供Bury(埋葬)和 revive(复活)的方法,其接口定义如下:
99+
## Cemetery(Goners仓库)
100+
101+
Cemetery用于管理Goners,主要提供Bury(注册)和 revive(装配)的方法,其接口定义如下:
97102
```go
98103
type Cemetery interface {
99104
// ... 其他方法
100105
Goner
101-
Bury(Goner, ...GonerId) Cemetery // 埋葬,将逝者埋葬到墓园
106+
Bury(Goner, ...GonerId) Cemetery // 将Goner注册到框架
102107

103108

104109

105-
//ReviveAllFromTombs 复活所有Goner
110+
//ReviveAllFromTombs 装配所有Goner
106111
ReviveAllFromTombs() error
107112

108113
//...
109114
}
110115
```
111-
从代码上可以看到Cemetery本身也是一个Goner,在Gone框架启动时他会被自动埋葬和复活
116+
从代码上可以看到Cemetery本身也是一个Goner,在Gone框架启动时他自己也注册到Cemetery中
112117

113-
### Bury(埋葬,完成Goner注册)
114-
将Goner **埋葬(注册)****Cemetery(goners仓库)** 就是将Goner注册到框架,以待装配流程完成属性的注入;在代码实现上,**Bury****Cemetery**上的公开方法,一般在通过 **Priest** 函数调用该方法。
118+
### Bury(注册)
115119

116-
### Revive(复活,Goners依赖的属性的自动装配)
117-
Revive(复活)指的是Goner所有需要注入的属性完成依赖装配的过程。在函数`ReviveAllFromTombs() error`中,尝试复活所有被注册的Goners,如果存在属性不能正常注入,程序将抛出panic。
120+
将Goner **注册****Cemetery(goners仓库)** 就是将Goner注册到框架,以待装配流程完成属性的注入;在代码实现上,**Bury****Cemetery**上的公开方法,一般在通过 **Priest** 函数调用该方法。
121+
122+
### Revive(装配)
123+
Revive(装配)指的是Goner所有需要注入的属性完成依赖装配的过程。在函数`ReviveAllFromTombs() error`中,尝试装配所有被注册的Goners,如果存在属性不能正常注入,程序将抛出panic。
118124

119125
::: tip
120-
**ReviveAllFromTombs**在完成了复活所有的**Goners**后,会调用所有**Prophet****AfterRevive**方法。
126+
**ReviveAllFromTombs**在完成了装配所有的**Goners**后,会调用所有**Prophet****AfterRevive**方法。
121127
:::
122128

123129

124-
## Heaven(天国,代表程序本身)
125-
Heaven(天国)代表了一个Gone程序,用于管理程序的启动、停止等状态和流程(复活在启动前完成),用于在启动前后以及程序停止前执行一些hook任务。Heaven接收一个牧师函数开始运行,例如:
130+
## Heaven
131+
Heaven(天国)代表了一个Gone程序,用于管理程序的启动、停止等状态和流程(装配在启动前完成),用于在启动前后以及程序停止前执行一些hook任务。Heaven接收一个牧师函数开始运行,例如:
132+
126133
```go
127134
package main
128135

129136
import "github.com/gone-io/gone"
130137

131138
func Priest(cemetery gone.Cemetery) error {
132-
// 调用 cemetery.Bury 埋葬 Goner
139+
// 调用 cemetery.Bury 注册 Goner
133140
// 或者 调用其他 Priest 函数
134141
// TODO
135142
return nil
@@ -147,7 +154,7 @@ package main
147154
import "github.com/gone-io/gone"
148155

149156
func Priest(cemetery gone.Cemetery) error {
150-
// 调用 cemetery.Bury 埋葬 Goner
157+
// 调用 cemetery.Bury 注册 Goner
151158
// 或者 调用其他 Priest 函数
152159
// TODO
153160
return nil
@@ -163,8 +170,9 @@ func main(){
163170
}
164171
```
165172

166-
## Priest (牧师,一个用于完成goners注册的加载函数)
167-
Priest (牧师)是负责将**Goner**埋葬到**Cemetery**的函数,他的定义如下:
173+
## Priest (批量注册Goners)
174+
175+
Priest (牧师)是负责将**Goner**注册到Gone的函数,他的定义如下:
168176
```go
169177
type Priest func(cemetery Cemetery) error
170178
```
@@ -186,7 +194,7 @@ func aPriest(cemetery gone.Cemetery) error {
186194
cemetery.Bury(&Boss{Name: "Jim"}, "boss-jim")
187195
cemetery.Bury(&Worker{Name: "Bob"}, "worker-bob")
188196

189-
//匿名埋葬,不指定被埋葬Goner的GonerId
197+
//匿名注册,不指定被注册Goner的GonerId
190198
cemetery.Bury(&Worker{Name: "X"})
191199
return nil
192200
}
@@ -214,8 +222,14 @@ func aPriest(cemetery gone.Cemetery) error {
214222
return nil
215223
}
216224
```
217-
如果我们开发了一个组件包,其中使用了多个**Goners**来完成响应的功能,使用时需要同时**埋葬**这些**Goners**,那么我们可以编写一个**Priest**函数方便业务代码批量**埋葬**这些**Goners**
218225

219-
框架内置的组件包,我们就是这样干的,[代码](https://github.com/gone-io/gone/blob/main/goner/priest.go)[文档](https://goner.fun/zh/goners/#%E6%A1%86%E6%9E%B6%E5%86%85%E7%BD%AEgoners)
226+
如果开发了一个组件包使用了多个**Goners**来实现相应的功能;使用时需要同时注册多个Goners,可能不是那么方便;为了方便用户使用我们开发的包,可以编写一个**Priest**函数批量注册Goners。
227+
228+
Gone内置的组件包,我们就是这样做的,可以参考[代码](https://github.com/gone-io/gone/blob/main/goner/priest.go)[文档](https://goner.fun/zh/goners/#%E6%A1%86%E6%9E%B6%E5%86%85%E7%BD%AEgoners)
229+
230+
另外,我们开发了一个命令行辅助工具 **[gone](https://goner.fun/zh/references/gone-tool.html)**,用于扫描特殊注释`//go:gone`自动生成牧师函数,参考 [自动生成Priest](./auto-gen-priest.md)
231+
232+
## 总结
233+
在Gone中,组件叫`Goner`(逝者),称为Goner需要嵌入`gone.Flag`(死亡标记),Goner被注册(埋在)到 `Cemetery`(墓园)中;Gone启动时,自动装配(Revive)所有Goners,建立一个天国(Gone程序),在天国中有先知、天使和吸血鬼。
220234

221-
另外,我们开发了一个命令行辅助工具**gone**,用于扫描特殊注释`//go:gone`自动生成牧师函数,参考[自动生成Priest](./auto-gen-priest.md)
235+
是不是很有意思呢?

0 commit comments

Comments
 (0)